diff options
author | Eric Blake <ebb9@byu.net> | 2009-10-23 06:06:46 -0600 |
---|---|---|
committer | Eric Blake <ebb9@byu.net> | 2009-10-23 06:29:54 -0600 |
commit | c0dcf3238bb9341c03bdb7f73c1af1b3898de557 (patch) | |
tree | 297ff50ee909652a7e027251c9d85f8b16b282de | |
parent | a08e13a0fbd1843c06e51707dc479116187f1243 (diff) | |
download | coreutils-c0dcf3238bb9341c03bdb7f73c1af1b3898de557.tar.xz |
build: prohibit improper use of stat and lstat
* cfg.mk (sc_prohibit_stat_macro_address): New rule.
* src/ln.c (do_link): Adjust comment to avoid false positive.
* src/stat.c (do_stat): Likewise.
* src/touch.c (main): Likewise.
-rw-r--r-- | cfg.mk | 6 | ||||
-rw-r--r-- | src/ln.c | 2 | ||||
-rw-r--r-- | src/stat.c | 2 | ||||
-rw-r--r-- | src/touch.c | 2 |
4 files changed, 9 insertions, 3 deletions
@@ -197,6 +197,12 @@ sc_prohibit_readlink: msg='do not use readlink(at); use via xreadlink or areadlink*' \ $(_prohibit_regexp) +# Don't use address of "stat" or "lstat" functions +sc_prohibit_stat_macro_address: + @re='\<l?stat '':|&l?stat\>' \ + msg='stat() and lstat() may be function-like macros' \ + $(_prohibit_regexp) + # Ensure that date's --help output stays in sync with the info # documentation for GNU strftime. The only exception is %N, # which date accepts but GNU strftime does not. @@ -138,7 +138,7 @@ do_link (const char *source, const char *dest) { /* Which stat to use depends on whether linkat will follow the symlink. We can't use the shorter - (logical ? stat : lstat) (source, &source_stats) + (logical?stat:lstat) (source, &source_stats) since stat might be a function-like macro. */ if ((logical ? stat (source, &source_stats) : lstat (source, &source_stats)) diff --git a/src/stat.c b/src/stat.c index d3e16d705..ae5491154 100644 --- a/src/stat.c +++ b/src/stat.c @@ -903,7 +903,7 @@ do_stat (char const *filename, bool terse, char const *format) } } /* We can't use the shorter - (follow_links ? stat : lstat) (filename, &statbug) + (follow_links?stat:lstat) (filename, &statbug) since stat might be a function-like macro. */ else if ((follow_links ? stat (filename, &statbuf) diff --git a/src/touch.c b/src/touch.c index d44bd2739..11d73ce6c 100644 --- a/src/touch.c +++ b/src/touch.c @@ -348,7 +348,7 @@ main (int argc, char **argv) if (use_ref) { struct stat ref_stats; - /* Don't use (no_dereference ? lstat : stat) (args), since stat + /* Don't use (no_dereference?lstat:stat) (args), since stat might be an object-like macro. */ if (no_dereference ? lstat (ref_file, &ref_stats) : stat (ref_file, &ref_stats)) |