*
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
*/
-
#include "libbb.h"
-/* vars to control behavior */
#define OPT_FILESYS (1 << 0)
#define OPT_TERSE (1 << 1)
#define OPT_DEREFERENCE (1 << 2)
}
/* print statfs info */
-static void print_statfs(char *pformat, const char m,
+static void FAST_FUNC print_statfs(char *pformat, const char m,
const char *const filename, const void *data
IF_SELINUX(, security_context_t scontext))
{
printf(pformat, get_f_fsid(statfsbuf));
} else if (m == 'l') {
strcat(pformat, "lu");
- printf(pformat, (unsigned long) (statfsbuf->f_namelen));
+ printf(pformat, (unsigned long) statfsbuf->f_namelen);
} else if (m == 't') {
strcat(pformat, "lx");
- printf(pformat, (unsigned long) (statfsbuf->f_type)); /* no equiv */
+ printf(pformat, (unsigned long) statfsbuf->f_type); /* no equiv */
} else if (m == 'T') {
printfs(pformat, human_fstype(statfsbuf->f_type));
} else if (m == 'b') {
- strcat(pformat, "jd");
- printf(pformat, (intmax_t) (statfsbuf->f_blocks));
+ strcat(pformat, "llu");
+ printf(pformat, (unsigned long long) statfsbuf->f_blocks);
} else if (m == 'f') {
- strcat(pformat, "jd");
- printf(pformat, (intmax_t) (statfsbuf->f_bfree));
+ strcat(pformat, "llu");
+ printf(pformat, (unsigned long long) statfsbuf->f_bfree);
} else if (m == 'a') {
- strcat(pformat, "jd");
- printf(pformat, (intmax_t) (statfsbuf->f_bavail));
+ strcat(pformat, "llu");
+ printf(pformat, (unsigned long long) statfsbuf->f_bavail);
} else if (m == 's' || m == 'S') {
strcat(pformat, "lu");
- printf(pformat, (unsigned long) (statfsbuf->f_bsize));
+ printf(pformat, (unsigned long) statfsbuf->f_bsize);
} else if (m == 'c') {
- strcat(pformat, "jd");
- printf(pformat, (intmax_t) (statfsbuf->f_files));
+ strcat(pformat, "llu");
+ printf(pformat, (unsigned long long) statfsbuf->f_files);
} else if (m == 'd') {
- strcat(pformat, "jd");
- printf(pformat, (intmax_t) (statfsbuf->f_ffree));
-#if ENABLE_SELINUX
+ strcat(pformat, "llu");
+ printf(pformat, (unsigned long long) statfsbuf->f_ffree);
+# if ENABLE_SELINUX
} else if (m == 'C' && (option_mask32 & OPT_SELINUX)) {
printfs(pformat, scontext);
-#endif
+# endif
} else {
strcatc(pformat, 'c');
printf(pformat, m);
}
/* print stat info */
-static void print_stat(char *pformat, const char m,
+static void FAST_FUNC print_stat(char *pformat, const char m,
const char *const filename, const void *data
IF_SELINUX(, security_context_t scontext))
{
printf(pformat, filename);
}
} else if (m == 'd') {
- strcat(pformat, "ju");
- printf(pformat, (uintmax_t) statbuf->st_dev);
+ strcat(pformat, "llu");
+ printf(pformat, (unsigned long long) statbuf->st_dev);
} else if (m == 'D') {
- strcat(pformat, "jx");
- printf(pformat, (uintmax_t) statbuf->st_dev);
+ strcat(pformat, "llx");
+ printf(pformat, (unsigned long long) statbuf->st_dev);
} else if (m == 'i') {
- strcat(pformat, "ju");
- printf(pformat, (uintmax_t) statbuf->st_ino);
+ strcat(pformat, "llu");
+ printf(pformat, (unsigned long long) statbuf->st_ino);
} else if (m == 'a') {
strcat(pformat, "lo");
printf(pformat, (unsigned long) (statbuf->st_mode & (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)));
strcat(pformat, "lx");
printf(pformat, (unsigned long) minor(statbuf->st_rdev));
} else if (m == 's') {
- strcat(pformat, "ju");
- printf(pformat, (uintmax_t) (statbuf->st_size));
+ strcat(pformat, "llu");
+ printf(pformat, (unsigned long long) statbuf->st_size);
} else if (m == 'B') {
strcat(pformat, "lu");
printf(pformat, (unsigned long) 512); //ST_NBLOCKSIZE
} else if (m == 'b') {
- strcat(pformat, "ju");
- printf(pformat, (uintmax_t) statbuf->st_blocks);
+ strcat(pformat, "llu");
+ printf(pformat, (unsigned long long) statbuf->st_blocks);
} else if (m == 'o') {
strcat(pformat, "lu");
printf(pformat, (unsigned long) statbuf->st_blksize);
printfs(pformat, human_time(statbuf->st_atime));
} else if (m == 'X') {
strcat(pformat, TYPE_SIGNED(time_t) ? "ld" : "lu");
- printf(pformat, (unsigned long) statbuf->st_atime);
+ /* note: (unsigned long) would be wrong:
+ * imagine (unsigned long64)int32 */
+ printf(pformat, (long) statbuf->st_atime);
} else if (m == 'y') {
printfs(pformat, human_time(statbuf->st_mtime));
} else if (m == 'Y') {
strcat(pformat, TYPE_SIGNED(time_t) ? "ld" : "lu");
- printf(pformat, (unsigned long) statbuf->st_mtime);
+ printf(pformat, (long) statbuf->st_mtime);
} else if (m == 'z') {
printfs(pformat, human_time(statbuf->st_ctime));
} else if (m == 'Z') {
strcat(pformat, TYPE_SIGNED(time_t) ? "ld" : "lu");
- printf(pformat, (unsigned long) statbuf->st_ctime);
-#if ENABLE_SELINUX
+ printf(pformat, (long) statbuf->st_ctime);
+# if ENABLE_SELINUX
} else if (m == 'C' && (option_mask32 & OPT_SELINUX)) {
printfs(pformat, scontext);
-#endif
+# endif
} else {
strcatc(pformat, 'c');
printf(pformat, m);
}
}
-static void print_it(const char *masterformat, const char *filename,
- void (*print_func) (char*, char, const char*, const void* IF_SELINUX(, security_context_t scontext)),
+static void print_it(const char *masterformat,
+ const char *filename,
+ void FAST_FUNC (*print_func)(char*, char, const char*, const void* IF_SELINUX(, security_context_t scontext)),
const void *data
- IF_SELINUX(, security_context_t scontext) )
+ IF_SELINUX(, security_context_t scontext))
{
/* Create a working copy of the format string */
char *format = xstrdup(masterformat);
free(format);
free(dest);
}
-#endif
+#endif /* FEATURE_STAT_FORMAT */
/* Stat the file system and print what we find. */
#if !ENABLE_FEATURE_STAT_FORMAT
static bool do_statfs(const char *filename, const char *format)
{
struct statfs statfsbuf;
-
#if !ENABLE_FEATURE_STAT_FORMAT
const char *format;
#endif
#if ENABLE_FEATURE_STAT_FORMAT
if (format == NULL) {
-#if !ENABLE_SELINUX
+# if !ENABLE_SELINUX
format = (option_mask32 & OPT_TERSE
? "%n %i %l %t %s %b %f %a %c %d\n"
: " File: \"%n\"\n"
"Block size: %-10s\n"
"Blocks: Total: %-10b Free: %-10f Available: %a\n"
"Inodes: Total: %-10c Free: %d");
-#else
+# else
format = (option_mask32 & OPT_TERSE
? (option_mask32 & OPT_SELINUX ? "%n %i %l %t %s %b %f %a %c %d %C\n":
"%n %i %l %t %s %b %f %a %c %d\n")
"Blocks: Total: %-10b Free: %-10f Available: %a\n"
"Inodes: Total: %-10c Free: %d\n")
);
-#endif /* SELINUX */
+# endif /* SELINUX */
}
print_it(format, filename, print_statfs, &statfsbuf IF_SELINUX(, scontext));
#else /* FEATURE_STAT_FORMAT */
statfsbuf.f_namelen);
if (option_mask32 & OPT_TERSE)
- printf("%lx ", (unsigned long) (statfsbuf.f_type));
+ printf("%lx ", (unsigned long) statfsbuf.f_type);
else
printf("Type: %s\n", human_fstype(statfsbuf.f_type));
-#if !ENABLE_SELINUX
+# if !ENABLE_SELINUX
format = (option_mask32 & OPT_TERSE
- ? "%lu %ld %ld %ld %ld %ld\n"
+ ? "%lu %llu %llu %llu %llu %llu\n"
: "Block size: %-10lu\n"
- "Blocks: Total: %-10jd Free: %-10jd Available: %jd\n"
- "Inodes: Total: %-10jd Free: %jd\n");
+ "Blocks: Total: %-10llu Free: %-10llu Available: %llu\n"
+ "Inodes: Total: %-10llu Free: %llu\n");
printf(format,
- (unsigned long) (statfsbuf.f_bsize),
- (intmax_t) (statfsbuf.f_blocks),
- (intmax_t) (statfsbuf.f_bfree),
- (intmax_t) (statfsbuf.f_bavail),
- (intmax_t) (statfsbuf.f_files),
- (intmax_t) (statfsbuf.f_ffree));
-#else
+ (unsigned long) statfsbuf.f_bsize,
+ (unsigned long long) statfsbuf.f_blocks,
+ (unsigned long long) statfsbuf.f_bfree,
+ (unsigned long long) statfsbuf.f_bavail,
+ (unsigned long long) statfsbuf.f_files,
+ (unsigned long long) statfsbuf.f_ffree);
+# else
format = (option_mask32 & OPT_TERSE
- ? (option_mask32 & OPT_SELINUX ? "%lu %ld %ld %ld %ld %ld %C\n":
- "%lu %ld %ld %ld %ld %ld\n")
- : (option_mask32 & OPT_SELINUX ?
- "Block size: %-10lu\n"
- "Blocks: Total: %-10jd Free: %-10jd Available: %jd\n"
- "Inodes: Total: %-10jd Free: %jd"
- "S_context: %C\n":
- "Block size: %-10lu\n"
- "Blocks: Total: %-10jd Free: %-10jd Available: %jd\n"
- "Inodes: Total: %-10jd Free: %jd\n"));
+ ? (option_mask32 & OPT_SELINUX ? "%lu %llu %llu %llu %llu %llu %C\n" : "%lu %llu %llu %llu %llu %llu\n")
+ : (option_mask32 & OPT_SELINUX
+ ? "Block size: %-10lu\n"
+ "Blocks: Total: %-10llu Free: %-10llu Available: %llu\n"
+ "Inodes: Total: %-10llu Free: %llu"
+ "S_context: %C\n"
+ : "Block size: %-10lu\n"
+ "Blocks: Total: %-10llu Free: %-10llu Available: %llu\n"
+ "Inodes: Total: %-10llu Free: %llu\n"
+ )
+ );
printf(format,
- (unsigned long) (statfsbuf.f_bsize),
- (intmax_t) (statfsbuf.f_blocks),
- (intmax_t) (statfsbuf.f_bfree),
- (intmax_t) (statfsbuf.f_bavail),
- (intmax_t) (statfsbuf.f_files),
- (intmax_t) (statfsbuf.f_ffree),
+ (unsigned long) statfsbuf.f_bsize,
+ (unsigned long long) statfsbuf.f_blocks,
+ (unsigned long long) statfsbuf.f_bfree,
+ (unsigned long long) statfsbuf.f_bavail,
+ (unsigned long long) statfsbuf.f_files,
+ (unsigned long long) statfsbuf.f_ffree,
scontext);
if (scontext)
freecon(scontext);
-#endif
+# endif
#endif /* FEATURE_STAT_FORMAT */
return 1;
}
#if ENABLE_FEATURE_STAT_FORMAT
if (format == NULL) {
-#if !ENABLE_SELINUX
+# if !ENABLE_SELINUX
if (option_mask32 & OPT_TERSE) {
format = "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %o";
} else {
"Access: %x\n" "Modify: %y\n" "Change: %z\n";
}
}
-#else
+# else
if (option_mask32 & OPT_TERSE) {
format = (option_mask32 & OPT_SELINUX ?
"%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %o %C\n":
"Access: %x\n" "Modify: %y\n" "Change: %z\n");
}
}
-#endif
+# endif
}
print_it(format, filename, print_stat, &statbuf IF_SELINUX(, scontext));
#else /* FEATURE_STAT_FORMAT */
if (option_mask32 & OPT_TERSE) {
- printf("%s %ju %ju %lx %lu %lu %jx %ju %lu %lx %lx %lu %lu %lu %lu"
+ printf("%s %llu %llu %lx %lu %lu %llx %llu %lu %lx %lx %lu %lu %lu %lu"
IF_NOT_SELINUX("\n"),
filename,
- (uintmax_t) (statbuf.st_size),
- (uintmax_t) statbuf.st_blocks,
+ (unsigned long long) statbuf.st_size,
+ (unsigned long long) statbuf.st_blocks,
(unsigned long) statbuf.st_mode,
(unsigned long) statbuf.st_uid,
(unsigned long) statbuf.st_gid,
- (uintmax_t) statbuf.st_dev,
- (uintmax_t) statbuf.st_ino,
+ (unsigned long long) statbuf.st_dev,
+ (unsigned long long) statbuf.st_ino,
(unsigned long) statbuf.st_nlink,
(unsigned long) major(statbuf.st_rdev),
(unsigned long) minor(statbuf.st_rdev),
(unsigned long) statbuf.st_ctime,
(unsigned long) statbuf.st_blksize
);
-#if ENABLE_SELINUX
+# if ENABLE_SELINUX
if (option_mask32 & OPT_SELINUX)
printf(" %lc\n", *scontext);
else
bb_putchar('\n');
-#endif
+# endif
} else {
char *linkname = NULL;
else
printf(" File: \"%s\"\n", filename);
- printf(" Size: %-10ju\tBlocks: %-10ju IO Block: %-6lu %s\n"
- "Device: %jxh/%jud\tInode: %-10ju Links: %-5lu",
- (uintmax_t) (statbuf.st_size),
- (uintmax_t) statbuf.st_blocks,
+ printf(" Size: %-10llu\tBlocks: %-10llu IO Block: %-6lu %s\n"
+ "Device: %llxh/%llud\tInode: %-10llu Links: %-5lu",
+ (unsigned long long) statbuf.st_size,
+ (unsigned long long) statbuf.st_blocks,
(unsigned long) statbuf.st_blksize,
file_type(&statbuf),
- (uintmax_t) statbuf.st_dev,
- (uintmax_t) statbuf.st_dev,
- (uintmax_t) statbuf.st_ino,
+ (unsigned long long) statbuf.st_dev,
+ (unsigned long long) statbuf.st_dev,
+ (unsigned long long) statbuf.st_ino,
(unsigned long) statbuf.st_nlink);
if (S_ISBLK(statbuf.st_mode) || S_ISCHR(statbuf.st_mode))
printf(" Device type: %lx,%lx\n",
(pw_ent != NULL) ? pw_ent->pw_name : "UNKNOWN",
(unsigned long) statbuf.st_gid,
(gw_ent != NULL) ? gw_ent->gr_name : "UNKNOWN");
-#if ENABLE_SELINUX
+# if ENABLE_SELINUX
printf(" S_Context: %lc\n", *scontext);
-#endif
+# endif
printf("Access: %s\n" "Modify: %s\n" "Change: %s\n",
human_time(statbuf.st_atime),
human_time(statbuf.st_mtime),