stat: make -f optional. This allows to build stat for non-linux systems
function old new delta packed_usage 30761 30706 -55 Based on the patch by Ron Yorston. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
fe0dc34746
commit
ace833028f
@ -543,22 +543,6 @@ config FEATURE_SPLIT_FANCY
|
|||||||
Supports additional suffixes 'b' for 512 bytes,
|
Supports additional suffixes 'b' for 512 bytes,
|
||||||
'g' for 1GiB for the -b option.
|
'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
|
config STTY
|
||||||
bool "stty"
|
bool "stty"
|
||||||
default y
|
default y
|
||||||
|
@ -12,54 +12,83 @@
|
|||||||
*
|
*
|
||||||
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
|
* 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:#define stat_trivial_usage
|
||||||
//usage: "[OPTIONS] FILE..."
|
//usage: "[OPTIONS] FILE..."
|
||||||
//usage:#define stat_full_usage "\n\n"
|
//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: IF_FEATURE_STAT_FORMAT(
|
||||||
//usage: "\n -c fmt Use the specified format"
|
//usage: "\n -c FMT Use the specified format"
|
||||||
//usage: )
|
//usage: )
|
||||||
|
//usage: IF_FEATURE_STAT_FILESYSTEM(
|
||||||
//usage: "\n -f Display filesystem status"
|
//usage: "\n -f Display filesystem status"
|
||||||
|
//usage: )
|
||||||
//usage: "\n -L Follow links"
|
//usage: "\n -L Follow links"
|
||||||
//usage: "\n -t Display info in terse form"
|
//usage: "\n -t Terse display"
|
||||||
//usage: IF_SELINUX(
|
//usage: IF_SELINUX(
|
||||||
//usage: "\n -Z Print security context"
|
//usage: "\n -Z Print security context"
|
||||||
//usage: )
|
//usage: )
|
||||||
//usage: IF_FEATURE_STAT_FORMAT(
|
//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 octal\n"
|
||||||
//usage: " %A Access rights in human readable form\n"
|
//usage: " %A Access rights in human readable form\n"
|
||||||
//usage: " %b Number of blocks allocated (see %B)\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 decimal\n"
|
||||||
//usage: " %D Device number in hex\n"
|
//usage: " %D Device number in hex\n"
|
||||||
//usage: " %f Raw mode in hex\n"
|
//usage: " %f Raw mode in hex\n"
|
||||||
//usage: " %F File type\n"
|
//usage: " %F File type\n"
|
||||||
//usage: " %g Group ID of owner\n"
|
//usage: " %g Group ID\n"
|
||||||
//usage: " %G Group name of owner\n"
|
//usage: " %G Group name\n"
|
||||||
//usage: " %h Number of hard links\n"
|
//usage: " %h Number of hard links\n"
|
||||||
//usage: " %i Inode number\n"
|
//usage: " %i Inode number\n"
|
||||||
//usage: " %n File name\n"
|
//usage: " %n File name\n"
|
||||||
//usage: " %N File name, with -> TARGET if symlink\n"
|
//usage: " %N File name, with -> TARGET if symlink\n"
|
||||||
//usage: " %o I/O block size\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 Major device type in hex\n"
|
||||||
//usage: " %T Minor device type in hex\n"
|
//usage: " %T Minor device type in hex\n"
|
||||||
//usage: " %u User ID of owner\n"
|
//usage: " %u User ID\n"
|
||||||
//usage: " %U User name of owner\n"
|
//usage: " %U User name\n"
|
||||||
//usage: " %x Time of last access\n"
|
//usage: " %x Time of last access\n"
|
||||||
//usage: " %X Time of last access as seconds since Epoch\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\n"
|
||||||
//usage: " %Y Time of last modification as seconds since Epoch\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\n"
|
||||||
//usage: " %Z Time of last change as seconds since Epoch\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: " %a Free blocks available to non-superuser\n"
|
||||||
//usage: " %b Total data blocks in file system\n"
|
//usage: " %b Total data blocks\n"
|
||||||
//usage: " %c Total file nodes in file system\n"
|
//usage: " %c Total file nodes\n"
|
||||||
//usage: " %d Free file nodes in file system\n"
|
//usage: " %d Free file nodes\n"
|
||||||
//usage: " %f Free blocks in file system\n"
|
//usage: " %f Free blocks\n"
|
||||||
//usage: IF_SELINUX(
|
//usage: IF_SELINUX(
|
||||||
//usage: " %C Security context in selinux\n"
|
//usage: " %C Security context in selinux\n"
|
||||||
//usage: )
|
//usage: )
|
||||||
@ -71,13 +100,16 @@
|
|||||||
//usage: " %t Type in hex\n"
|
//usage: " %t Type in hex\n"
|
||||||
//usage: " %T Type in human readable form"
|
//usage: " %T Type in human readable form"
|
||||||
//usage: )
|
//usage: )
|
||||||
|
//usage: )
|
||||||
|
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
|
|
||||||
#define OPT_FILESYS (1 << 0)
|
enum {
|
||||||
#define OPT_TERSE (1 << 1)
|
OPT_TERSE = (1 << 0),
|
||||||
#define OPT_DEREFERENCE (1 << 2)
|
OPT_DEREFERENCE = (1 << 1),
|
||||||
#define OPT_SELINUX (1 << 3)
|
OPT_FILESYS = (1 << 2) * ENABLE_FEATURE_STAT_FILESYSTEM,
|
||||||
|
OPT_SELINUX = (1 << (2+ENABLE_FEATURE_STAT_FILESYSTEM)) * ENABLE_SELINUX,
|
||||||
|
};
|
||||||
|
|
||||||
#if ENABLE_FEATURE_STAT_FORMAT
|
#if ENABLE_FEATURE_STAT_FORMAT
|
||||||
typedef bool (*statfunc_ptr)(const char *, const char *);
|
typedef bool (*statfunc_ptr)(const char *, const char *);
|
||||||
@ -132,6 +164,7 @@ static const char *human_time(time_t t)
|
|||||||
#undef buf
|
#undef buf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ENABLE_FEATURE_STAT_FILESYSTEM
|
||||||
/* Return the type of the specified file system.
|
/* Return the type of the specified file system.
|
||||||
* Some systems have statfvs.f_basetype[FSTYPSZ]. (AIX, HP-UX, and Solaris)
|
* Some systems have statfvs.f_basetype[FSTYPSZ]. (AIX, HP-UX, and Solaris)
|
||||||
* Others have statfs.f_fstypename[MFSNAMELEN]. (NetBSD 1.5.2)
|
* 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);
|
while (--sz > 0);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
#endif /* FEATURE_STAT_FILESYSTEM */
|
||||||
|
|
||||||
#if ENABLE_FEATURE_STAT_FORMAT
|
#if ENABLE_FEATURE_STAT_FORMAT
|
||||||
static void strcatc(char *str, char c)
|
static void strcatc(char *str, char c)
|
||||||
@ -217,6 +251,7 @@ static void printfs(char *pformat, const char *msg)
|
|||||||
printf(pformat, msg);
|
printf(pformat, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ENABLE_FEATURE_STAT_FILESYSTEM
|
||||||
/* print statfs info */
|
/* print statfs info */
|
||||||
static void FAST_FUNC 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
|
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);
|
printf(pformat, m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* print stat info */
|
/* print stat info */
|
||||||
static void FAST_FUNC print_stat(char *pformat, const char m,
|
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 */
|
#endif /* FEATURE_STAT_FORMAT */
|
||||||
|
|
||||||
|
#if ENABLE_FEATURE_STAT_FILESYSTEM
|
||||||
/* Stat the file system and print what we find. */
|
/* Stat the file system and print what we find. */
|
||||||
#if !ENABLE_FEATURE_STAT_FORMAT
|
#if !ENABLE_FEATURE_STAT_FORMAT
|
||||||
#define do_statfs(filename, format) do_statfs(filename)
|
#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 */
|
#endif /* FEATURE_STAT_FORMAT */
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#endif /* FEATURE_STAT_FILESYSTEM */
|
||||||
|
|
||||||
/* stat the file and print what we find */
|
/* stat the file and print what we find */
|
||||||
#if !ENABLE_FEATURE_STAT_FORMAT
|
#if !ENABLE_FEATURE_STAT_FORMAT
|
||||||
@ -721,12 +759,15 @@ int stat_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
statfunc_ptr statfunc = do_stat;
|
statfunc_ptr statfunc = do_stat;
|
||||||
|
|
||||||
opt_complementary = "-1"; /* min one arg */
|
opt_complementary = "-1"; /* min one arg */
|
||||||
opts = getopt32(argv, "ftL"
|
opts = getopt32(argv, "tL"
|
||||||
|
IF_FEATURE_STAT_FILESYSTEM("f")
|
||||||
IF_SELINUX("Z")
|
IF_SELINUX("Z")
|
||||||
IF_FEATURE_STAT_FORMAT("c:", &format)
|
IF_FEATURE_STAT_FORMAT("c:", &format)
|
||||||
);
|
);
|
||||||
|
#if ENABLE_FEATURE_STAT_FILESYSTEM
|
||||||
if (opts & OPT_FILESYS) /* -f */
|
if (opts & OPT_FILESYS) /* -f */
|
||||||
statfunc = do_statfs;
|
statfunc = do_statfs;
|
||||||
|
#endif
|
||||||
#if ENABLE_SELINUX
|
#if ENABLE_SELINUX
|
||||||
if (opts & OPT_SELINUX) {
|
if (opts & OPT_SELINUX) {
|
||||||
selinux_or_die();
|
selinux_or_die();
|
||||||
|
Loading…
Reference in New Issue
Block a user