stat: make -f optional. This allows to build stat for non-linux systems
No binary (build failed)
—
(log yok)
| @@ -543,22 +543,6 @@ config FEATURE_SPLIT_FANCY | |
| Supports additional suffixes 'b' for 512 bytes, | |
| 'g' for 1GiB for the -b option. | |
| - | config STAT |
| - | bool "stat" |
| - | default y |
| - | select PLATFORM_LINUX # statfs() |
| - | help |
| - | display file or filesystem status. |
| - | |
| - | config FEATURE_STAT_FORMAT |
| - | bool "Enable custom formats (-c)" |
| - | default y |
| - | depends on STAT |
| - | help |
| - | Without this, stat will not support the '-c format' option where |
| - | users can pass a custom format string for output. This adds about |
| - | 7k to a nonstatic build on amd64. |
| - | |
| config STTY | |
| bool "stty" | |
| default y | |
| @@ -12,54 +12,83 @@ | |
| * | |
| * Licensed under GPLv2 or later, see file LICENSE in this source tree. | |
| */ | |
| + | //config:config STAT |
| + | //config: bool "stat" |
| + | //config: default y |
| + | //config: help |
| + | //config: display file or filesystem status. |
| + | //config: |
| + | //config:config FEATURE_STAT_FORMAT |
| + | //config: bool "Enable custom formats (-c)" |
| + | //config: default y |
| + | //config: depends on STAT |
| + | //config: help |
| + | //config: Without this, stat will not support the '-c format' option where |
| + | //config: users can pass a custom format string for output. This adds about |
| + | //config: 7k to a nonstatic build on amd64. |
| + | //config: |
| + | //config:config FEATURE_STAT_FILESYSTEM |
| + | //config: bool "Enable display of filesystem status (-f)" |
| + | //config: default y |
| + | //config: depends on STAT |
| + | //config: select PLATFORM_LINUX # statfs() |
| + | //config: help |
| + | //config: Without this, stat will not support the '-f' option to display |
| + | //config: information about filesystem status. |
| + | |
| //usage:#define stat_trivial_usage | |
| //usage: "[OPTIONS] FILE..." | |
| //usage:#define stat_full_usage "\n\n" | |
| - | //usage: "Display file (default) or filesystem status\n" |
| + | //usage: "Display file" |
| + | //usage: IF_FEATURE_STAT_FILESYSTEM(" (default) or filesystem") |
| + | //usage: " status\n" |
| //usage: IF_FEATURE_STAT_FORMAT( | |
| - | //usage: "\n -c fmt Use the specified format" |
| + | //usage: "\n -c FMT Use the specified format" |
| //usage: ) | |
| + | //usage: IF_FEATURE_STAT_FILESYSTEM( |
| //usage: "\n -f Display filesystem status" | |
| + | //usage: ) |
| //usage: "\n -L Follow links" | |
| - | //usage: "\n -t Display info in terse form" |
| + | //usage: "\n -t Terse display" |
| //usage: IF_SELINUX( | |
| //usage: "\n -Z Print security context" | |
| //usage: ) | |
| //usage: IF_FEATURE_STAT_FORMAT( | |
| - | //usage: "\n\nValid format sequences for files:\n" |
| + | //usage: "\n\nFMT sequences"IF_FEATURE_STAT_FILESYSTEM(" for files")":\n" |
| //usage: " %a Access rights in octal\n" | |
| //usage: " %A Access rights in human readable form\n" | |
| //usage: " %b Number of blocks allocated (see %B)\n" | |
| - | //usage: " %B The size in bytes of each block reported by %b\n" |
| + | //usage: " %B Size in bytes of each block reported by %b\n" |
| //usage: " %d Device number in decimal\n" | |
| //usage: " %D Device number in hex\n" | |
| //usage: " %f Raw mode in hex\n" | |
| //usage: " %F File type\n" | |
| - | //usage: " %g Group ID of owner\n" |
| - | //usage: " %G Group name of owner\n" |
| + | //usage: " %g Group ID\n" |
| + | //usage: " %G Group name\n" |
| //usage: " %h Number of hard links\n" | |
| //usage: " %i Inode number\n" | |
| //usage: " %n File name\n" | |
| //usage: " %N File name, with -> TARGET if symlink\n" | |
| //usage: " %o I/O block size\n" | |
| - | //usage: " %s Total size, in bytes\n" |
| + | //usage: " %s Total size in bytes\n" |
| //usage: " %t Major device type in hex\n" | |
| //usage: " %T Minor device type in hex\n" | |
| - | //usage: " %u User ID of owner\n" |
| - | //usage: " %U User name of owner\n" |
| + | //usage: " %u User ID\n" |
| + | //usage: " %U User name\n" |
| //usage: " %x Time of last access\n" | |
| //usage: " %X Time of last access as seconds since Epoch\n" | |
| //usage: " %y Time of last modification\n" | |
| //usage: " %Y Time of last modification as seconds since Epoch\n" | |
| //usage: " %z Time of last change\n" | |
| //usage: " %Z Time of last change as seconds since Epoch\n" | |
| - | //usage: "\nValid format sequences for file systems:\n" |
| + | //usage: IF_FEATURE_STAT_FILESYSTEM( |
| + | //usage: "\nFMT sequences for file systems:\n" |
| //usage: " %a Free blocks available to non-superuser\n" | |
| - | //usage: " %b Total data blocks in file system\n" |
| - | //usage: " %c Total file nodes in file system\n" |
| - | //usage: " %d Free file nodes in file system\n" |
| - | //usage: " %f Free blocks in file system\n" |
| + | //usage: " %b Total data blocks\n" |
| + | //usage: " %c Total file nodes\n" |
| + | //usage: " %d Free file nodes\n" |
| + | //usage: " %f Free blocks\n" |
| //usage: IF_SELINUX( | |
| //usage: " %C Security context in selinux\n" | |
| //usage: ) | |
| @@ -71,13 +100,16 @@ | |
| //usage: " %t Type in hex\n" | |
| //usage: " %T Type in human readable form" | |
| //usage: ) | |
| + | //usage: ) |
| #include "libbb.h" | |
| - | #define OPT_FILESYS (1 << 0) |
| - | #define OPT_TERSE (1 << 1) |
| - | #define OPT_DEREFERENCE (1 << 2) |
| - | #define OPT_SELINUX (1 << 3) |
| + | enum { |
| + | OPT_TERSE = (1 << 0), |
| + | OPT_DEREFERENCE = (1 << 1), |
| + | OPT_FILESYS = (1 << 2) * ENABLE_FEATURE_STAT_FILESYSTEM, |
| + | OPT_SELINUX = (1 << (2+ENABLE_FEATURE_STAT_FILESYSTEM)) * ENABLE_SELINUX, |
| + | }; |
| #if ENABLE_FEATURE_STAT_FORMAT | |
| typedef bool (*statfunc_ptr)(const char *, const char *); | |
| @@ -132,6 +164,7 @@ static const char *human_time(time_t t) | |
| #undef buf | |
| } | |
| + | #if ENABLE_FEATURE_STAT_FILESYSTEM |
| /* Return the type of the specified file system. | |
| * Some systems have statfvs.f_basetype[FSTYPSZ]. (AIX, HP-UX, and Solaris) | |
| * Others have statfs.f_fstypename[MFSNAMELEN]. (NetBSD 1.5.2) | |
| @@ -202,6 +235,7 @@ static unsigned long long get_f_fsid(const struct statfs *statfsbuf) | |
| while (--sz > 0); | |
| return r; | |
| } | |
| + | #endif /* FEATURE_STAT_FILESYSTEM */ |
| #if ENABLE_FEATURE_STAT_FORMAT | |
| static void strcatc(char *str, char c) | |
| @@ -217,6 +251,7 @@ static void printfs(char *pformat, const char *msg) | |
| printf(pformat, msg); | |
| } | |
| + | #if ENABLE_FEATURE_STAT_FILESYSTEM |
| /* print statfs info */ | |
| static void FAST_FUNC print_statfs(char *pformat, const char m, | |
| const char *const filename, const void *data | |
| @@ -263,6 +298,7 @@ static void FAST_FUNC print_statfs(char *pformat, const char m, | |
| printf(pformat, m); | |
| } | |
| } | |
| + | #endif |
| /* print stat info */ | |
| static void FAST_FUNC print_stat(char *pformat, const char m, | |
| @@ -423,6 +459,7 @@ static void print_it(const char *masterformat, | |
| } | |
| #endif /* FEATURE_STAT_FORMAT */ | |
| + | #if ENABLE_FEATURE_STAT_FILESYSTEM |
| /* Stat the file system and print what we find. */ | |
| #if !ENABLE_FEATURE_STAT_FORMAT | |
| #define do_statfs(filename, format) do_statfs(filename) | |
| @@ -538,6 +575,7 @@ static bool do_statfs(const char *filename, const char *format) | |
| #endif /* FEATURE_STAT_FORMAT */ | |
| return 1; | |
| } | |
| + | #endif /* FEATURE_STAT_FILESYSTEM */ |
| /* stat the file and print what we find */ | |
| #if !ENABLE_FEATURE_STAT_FORMAT | |
| @@ -721,12 +759,15 @@ int stat_main(int argc UNUSED_PARAM, char **argv) | |
| statfunc_ptr statfunc = do_stat; | |
| opt_complementary = "-1"; /* min one arg */ | |
| - | opts = getopt32(argv, "ftL" |
| + | opts = getopt32(argv, "tL" |
| + | IF_FEATURE_STAT_FILESYSTEM("f") |
| IF_SELINUX("Z") | |
| IF_FEATURE_STAT_FORMAT("c:", &format) | |
| ); | |
| + | #if ENABLE_FEATURE_STAT_FILESYSTEM |
| if (opts & OPT_FILESYS) /* -f */ | |
| statfunc = do_statfs; | |
| + | #endif |
| #if ENABLE_SELINUX | |
| if (opts & OPT_SELINUX) { | |
| selinux_or_die(); | |