X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fcanonicalize.c;h=402a8ff176ce11587b050c84b8abb76fee55c8ea;hb=34e0afdb6e79191a794f1a68280dff7a65721031;hp=c0a814d4cee300a20100306c1e6672e4e2ec2c9b;hpb=6df0d905e1a2cb127af844642ebf25ebb96b7323;p=gnulib.git diff --git a/lib/canonicalize.c b/lib/canonicalize.c index c0a814d4c..402a8ff17 100644 --- a/lib/canonicalize.c +++ b/lib/canonicalize.c @@ -152,6 +152,7 @@ canonicalize_filename_mode (const char *name, canonicalize_mode_t can_mode) char const *rname_limit; size_t extra_len = 0; Hash_table *ht = NULL; + int saved_errno; if (name == NULL) { @@ -239,6 +240,7 @@ canonicalize_filename_mode (const char *name, canonicalize_mode_t can_mode) if (lstat (rname, &st) != 0) { + saved_errno = errno; if (can_mode == CAN_EXISTING) goto error; if (can_mode == CAN_ALL_BUT_LAST && *end) @@ -259,7 +261,7 @@ canonicalize_filename_mode (const char *name, canonicalize_mode_t can_mode) { if (can_mode == CAN_MISSING) continue; - errno = ELOOP; + saved_errno = ELOOP; goto error; } @@ -268,6 +270,7 @@ canonicalize_filename_mode (const char *name, canonicalize_mode_t can_mode) { if (can_mode == CAN_MISSING && errno != ENOMEM) continue; + saved_errno = errno; goto error; } @@ -303,7 +306,7 @@ canonicalize_filename_mode (const char *name, canonicalize_mode_t can_mode) { if (!S_ISDIR (st.st_mode) && *end && (can_mode != CAN_MISSING)) { - errno = ENOTDIR; + saved_errno = ENOTDIR; goto error; } } @@ -323,5 +326,6 @@ error: free (rname); if (ht) hash_free (ht); + errno = saved_errno; return NULL; }