9 #if defined MAJOR_IN_SYSMACROS
10 # include <sys/sysmacros.h>
11 #elif defined MAJOR_IN_MKDEV
12 # include <sys/mkdev.h>
14 # include <sys/types.h>
20 #if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
21 # include <sys/stat.h>
22 # define STAT_PREFIX "(stat(64)?\\(|newfstatat\\(AT_FDCWD, )"
24 # include <sys/syscall.h>
25 # if defined __NR_stat
26 # define NR_stat __NR_stat
27 # define STAT_PREFIX "stat\\("
28 # elif defined __NR_newstat
29 # define NR_stat __NR_newstat
30 # define STAT_PREFIX "newstat\\("
34 # define stat libc_stat
35 # define stat64 libc_stat64
36 # include <sys/stat.h>
51 # define dev_t __kernel_dev_t
52 # define ino_t __kernel_ino_t
53 # define mode_t __kernel_mode_t
54 # define nlink_t __kernel_nlink_t
55 # define uid_t __kernel_uid_t
56 # define gid_t __kernel_gid_t
57 # define off_t __kernel_off_t
58 # define loff_t __kernel_loff_t
59 # include <asm/stat.h>
60 # endif /* STAT_PREFIX */
61 #endif /* _FILE_OFFSET_BITS */
66 print_ftype(unsigned int mode)
70 else if (S_ISDIR(mode))
72 else if (S_ISCHR(mode))
74 else if (S_ISBLK(mode))
77 printf("%#o", mode & S_IFMT);
81 print_perms(unsigned int mode)
83 printf("%#o", mode & ~S_IFMT);
94 struct tm *p = localtime(&t);
97 printf("%02d/%02d/%02d-%02d:%02d:%02d",
98 p->tm_year + 1900, p->tm_mon + 1, p->tm_mday,
99 p->tm_hour, p->tm_min, p->tm_sec);
101 printf("%llu", (unsigned long long) t);
105 main(int ac, const char **av)
111 if (sizeof(stb.st_size) > 4)
113 assert(syscall(NR_stat, av[1], &stb) == 0);
117 assert(stat(av[1], &stb) == 0);
120 printf(STAT_PREFIX "\"%s\", \\{", av[1]);
121 printf("st_dev=makedev\\(%u, %u\\)",
122 (unsigned int) major(stb.st_dev),
123 (unsigned int) minor(stb.st_dev));
124 printf(", st_ino=%llu", (unsigned long long) stb.st_ino);
125 printf(", st_mode=");
126 print_ftype(stb.st_mode);
128 print_perms(stb.st_mode);
129 printf(", st_nlink=%u", (unsigned int) stb.st_nlink);
130 printf(", st_uid=%u", (unsigned int) stb.st_uid);
131 printf(", st_gid=%u", (unsigned int) stb.st_gid);
132 #ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
133 printf(", st_blksize=%u", (unsigned int) stb.st_blksize);
135 #ifdef HAVE_STRUCT_STAT_ST_BLOCKS
136 printf(", st_blocks=%u", (unsigned int) stb.st_blocks);
139 switch (stb.st_mode & S_IFMT) {
140 case S_IFCHR: case S_IFBLK:
141 #ifdef HAVE_STRUCT_STAT_ST_RDEV
142 printf(", st_rdev=makedev\\(%u, %u\\)",
143 (unsigned int) major(stb.st_rdev),
144 (unsigned int) minor(stb.st_rdev));
146 printf(", st_size=makedev\\(%u, %u\\)",
147 (unsigned int) major(stb.st_size),
148 (unsigned int) minor(stb.st_size));
152 printf(", st_size=%llu", (unsigned long long) stb.st_size);
155 printf(", st_atime=");
156 print_time(stb.st_atime);
157 printf(", st_mtime=");
158 print_time(stb.st_mtime);
159 printf(", st_ctime=");
160 print_time(stb.st_ctime);
161 printf("(, st_flags=[0-9]+)?");
162 printf("(, st_fstype=[^,]*)?");
163 printf("(, st_gen=[0-9]+)?");
168 printf("\\) += 0\n");
172 #else /* !STAT_PREFIX */