1 /* Convert between the kernel's `struct stat' format, and libc's.
2 Copyright (C) 1991,1995,1996,1997,1998,2000,2003 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, write to the Free
17 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
22 #include <kernel_stat.h>
24 #ifdef STAT_IS_KERNEL_STAT
35 __xstat_conv (int vers
, struct kernel_stat
*kbuf
, void *ubuf
)
39 case _STAT_VER_KERNEL
:
40 /* Nothing to do. The struct is in the form the kernel expects.
41 We should have short-circuted before we got here, but for
43 *(struct kernel_stat
*) ubuf
= *kbuf
;
48 struct stat
*buf
= ubuf
;
50 /* Convert to current kernel version of `struct stat'. */
51 buf
->st_dev
= kbuf
->st_dev
;
52 buf
->st_pad1
[0] = 0; buf
->st_pad1
[1] = 0; buf
->st_pad1
[2] = 0;
53 buf
->st_ino
= kbuf
->st_ino
;
54 buf
->st_mode
= kbuf
->st_mode
;
55 buf
->st_nlink
= kbuf
->st_nlink
;
56 buf
->st_uid
= kbuf
->st_uid
;
57 buf
->st_gid
= kbuf
->st_gid
;
58 buf
->st_rdev
= kbuf
->st_rdev
;
59 buf
->st_pad2
[0] = 0; buf
->st_pad2
[1] = 0;
61 buf
->st_size
= kbuf
->st_size
;
62 buf
->st_blksize
= kbuf
->st_blksize
;
63 buf
->st_blocks
= kbuf
->st_blocks
;
65 buf
->st_atime
= kbuf
->st_atime
; buf
->__reserved0
= 0;
66 buf
->st_mtime
= kbuf
->st_mtime
; buf
->__reserved1
= 0;
67 buf
->st_ctime
= kbuf
->st_ctime
; buf
->__reserved2
= 0;
69 buf
->st_pad5
[0] = 0; buf
->st_pad5
[1] = 0;
70 buf
->st_pad5
[2] = 0; buf
->st_pad5
[3] = 0;
71 buf
->st_pad5
[4] = 0; buf
->st_pad5
[5] = 0;
72 buf
->st_pad5
[6] = 0; buf
->st_pad5
[7] = 0;
85 __xstat64_conv (int vers
, struct kernel_stat
*kbuf
, void *ubuf
)
87 #ifdef XSTAT_IS_XSTAT64
88 return xstat_conv (vers
, kbuf
, ubuf
);
94 struct stat64
*buf
= ubuf
;
96 buf
->st_dev
= kbuf
->st_dev
;
97 buf
->st_pad1
[0] = 0; buf
->st_pad1
[1] = 0; buf
->st_pad1
[2] = 0;
98 buf
->st_ino
= kbuf
->st_ino
;
99 buf
->st_mode
= kbuf
->st_mode
;
100 buf
->st_nlink
= kbuf
->st_nlink
;
101 buf
->st_uid
= kbuf
->st_uid
;
102 buf
->st_gid
= kbuf
->st_gid
;
103 buf
->st_rdev
= kbuf
->st_rdev
;
104 buf
->st_pad2
[0] = 0; buf
->st_pad2
[1] = 0; buf
->st_pad2
[2] = 0;
106 buf
->st_size
= kbuf
->st_size
;
107 buf
->st_blksize
= kbuf
->st_blksize
;
108 buf
->st_blocks
= kbuf
->st_blocks
;
110 buf
->st_atime
= kbuf
->st_atime
; buf
->__reserved0
= 0;
111 buf
->st_mtime
= kbuf
->st_mtime
; buf
->__reserved1
= 0;
112 buf
->st_ctime
= kbuf
->st_ctime
; buf
->__reserved2
= 0;
114 buf
->st_pad4
[0] = 0; buf
->st_pad4
[1] = 0;
115 buf
->st_pad4
[2] = 0; buf
->st_pad4
[3] = 0;
116 buf
->st_pad4
[4] = 0; buf
->st_pad4
[5] = 0;
117 buf
->st_pad4
[6] = 0; buf
->st_pad4
[7] = 0;
121 /* If struct stat64 is different from struct stat then
122 _STAT_VER_KERNEL does not make sense. */
123 case _STAT_VER_KERNEL
:
125 __set_errno (EINVAL
);
133 #endif /* ! STAT_IS_KERNEL_STAT */