X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fcanonicalize.c;h=e5b69d9fdb4df39d672972fe181894a5f90760fe;hb=086a61209bc0d4d46b0b73b635bfb9b018ce772d;hp=e84c3392ed36feac5fa56864440d561c06fea82c;hpb=55c6e4b6fe65fdfd5154228209a5c9828bb8ec9d;p=gnulib.git diff --git a/lib/canonicalize.c b/lib/canonicalize.c index e84c3392e..e5b69d9fd 100644 --- a/lib/canonicalize.c +++ b/lib/canonicalize.c @@ -198,7 +198,14 @@ canonicalize_filename_mode (const char *name, canonicalize_mode_t can_mode) dest += end - start; *dest = '\0'; - if ((logical ? stat (rname, &st) : lstat (rname, &st)) != 0) + if (logical && (can_mode == CAN_MISSING)) + { + /* Avoid the stat in this case as it's inconsequential. + i.e. we're neither resolving symlinks or testing + component existence. */ + st.st_mode = 0; + } + else if ((logical ? stat (rname, &st) : lstat (rname, &st)) != 0) { saved_errno = errno; if (can_mode == CAN_EXISTING)