stat: make stat -f show filesystem "ID:" as coreutils does
print_statfs 358 370 +12
This commit is contained in:
parent
f3c2d13602
commit
98f5cdfca7
@ -139,6 +139,20 @@ static void printfs(char *pformat, const char *msg)
|
|||||||
printf(pformat, msg);
|
printf(pformat, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* "man statfs" says that statfsbuf->f_fsid is a mess */
|
||||||
|
/* coreutils treats it as an array of ints, most significant first */
|
||||||
|
static unsigned long long get_f_fsid(const struct statfs *statfsbuf)
|
||||||
|
{
|
||||||
|
const unsigned *p = (const void*) &statfsbuf->f_fsid;
|
||||||
|
unsigned sz = sizeof(statfsbuf->f_fsid) / sizeof(unsigned);
|
||||||
|
unsigned long long r = 0;
|
||||||
|
|
||||||
|
do
|
||||||
|
r = (r << (sizeof(unsigned)*8)) | *p++;
|
||||||
|
while (--sz > 0);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
/* print statfs info */
|
/* print statfs info */
|
||||||
static void print_statfs(char *pformat, const char m,
|
static void print_statfs(char *pformat, const char m,
|
||||||
const char *const filename, const void *data
|
const char *const filename, const void *data
|
||||||
@ -148,11 +162,11 @@ static void print_statfs(char *pformat, const char m,
|
|||||||
if (m == 'n') {
|
if (m == 'n') {
|
||||||
printfs(pformat, filename);
|
printfs(pformat, filename);
|
||||||
} else if (m == 'i') {
|
} else if (m == 'i') {
|
||||||
strcat(pformat, "Lx");
|
strcat(pformat, "llx");
|
||||||
printf(pformat, statfsbuf->f_fsid);
|
printf(pformat, get_f_fsid(statfsbuf));
|
||||||
} else if (m == 'l') {
|
} else if (m == 'l') {
|
||||||
strcat(pformat, "lu");
|
strcat(pformat, "lu");
|
||||||
printf(pformat, statfsbuf->f_namelen);
|
printf(pformat, (unsigned long) (statfsbuf->f_namelen));
|
||||||
} else if (m == 't') {
|
} else if (m == 't') {
|
||||||
strcat(pformat, "lx");
|
strcat(pformat, "lx");
|
||||||
printf(pformat, (unsigned long) (statfsbuf->f_type)); /* no equiv */
|
printf(pformat, (unsigned long) (statfsbuf->f_type)); /* no equiv */
|
||||||
@ -349,10 +363,11 @@ static void print_it(const char *masterformat, const char *filename,
|
|||||||
#endif
|
#endif
|
||||||
static bool do_statfs(const char *filename, const char *format)
|
static bool do_statfs(const char *filename, const char *format)
|
||||||
{
|
{
|
||||||
|
struct statfs statfsbuf;
|
||||||
|
|
||||||
#if !ENABLE_FEATURE_STAT_FORMAT
|
#if !ENABLE_FEATURE_STAT_FORMAT
|
||||||
const char *format;
|
const char *format;
|
||||||
#endif
|
#endif
|
||||||
struct statfs statfsbuf;
|
|
||||||
#if ENABLE_SELINUX
|
#if ENABLE_SELINUX
|
||||||
security_context_t scontext = NULL;
|
security_context_t scontext = NULL;
|
||||||
|
|
||||||
@ -406,10 +421,10 @@ static bool do_statfs(const char *filename, const char *format)
|
|||||||
format = (option_mask32 & OPT_TERSE
|
format = (option_mask32 & OPT_TERSE
|
||||||
? "%s %llx %lu "
|
? "%s %llx %lu "
|
||||||
: " File: \"%s\"\n"
|
: " File: \"%s\"\n"
|
||||||
" ID: %-8Lx Namelen: %-7lu ");
|
" ID: %-8llx Namelen: %-7lu ");
|
||||||
printf(format,
|
printf(format,
|
||||||
filename,
|
filename,
|
||||||
statfsbuf.f_fsid,
|
get_f_fsid(&statfsbuf),
|
||||||
statfsbuf.f_namelen);
|
statfsbuf.f_namelen);
|
||||||
|
|
||||||
if (option_mask32 & OPT_TERSE)
|
if (option_mask32 & OPT_TERSE)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user