From: Andreas Dilger Date: Thu, 27 Jun 2019 08:25:55 +0000 (-0600) Subject: stat: don't explicitly request file size for filenames X-Git-Tag: v8.32~67 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a1a5e9a32eb9525680edd02fd127240c27ba0999;p=thirdparty%2Fcoreutils.git stat: don't explicitly request file size for filenames When calling 'stat -c %N' to print the filename, don't explicitly request the size of the file via statx(), as it may add overhead on some filesystems. The size is only needed to optimize an allocation for the relatively rare case of reading a symlink name, and the worst effect is a somewhat-too-large temporary buffer may be allocated for areadlink_with_size(), or internal retries if buffer is too small. The file size will be returned by statx() on most filesystems, even if not requested, unless the filesystem considers this to be too expensive for that file, in which case the tradeoff is worthwhile. * src/stat.c: Don't explicitly request STATX_SIZE for filenames. --- diff --git a/src/stat.c b/src/stat.c index ec0bb7de49..ee68f1682b 100644 --- a/src/stat.c +++ b/src/stat.c @@ -1282,7 +1282,7 @@ fmt_to_mask (char fmt) switch (fmt) { case 'N': - return STATX_MODE|STATX_SIZE; + return STATX_MODE; case 'd': case 'D': return STATX_MODE; @@ -1354,7 +1354,7 @@ do_stat (char const *filename, char const *format, char const *format2) int fd = STREQ (filename, "-") ? 0 : AT_FDCWD; int flags = 0; struct stat st; - struct statx stx; + struct statx stx = { 0, }; const char *pathname = filename; struct print_args pa; pa.st = &st;