summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJim Meyering <meyering@redhat.com>2007-10-07 21:55:42 +0200
committerJim Meyering <meyering@redhat.com>2007-10-07 21:57:55 +0200
commit035a5ca2b0fb83ca179ed7739e18bb60437bc525 (patch)
treef5702994f4b8f0c64f3ae6f76ec7da68f6113854 /src
parent847fbc4eba6701fb1548713de855207a47e876f7 (diff)
downloadcoreutils-035a5ca2b0fb83ca179ed7739e18bb60437bc525.tar.xz
Don't let a helper function modify errno.
* src/remove.c (full_filename_): Save and restore errno. Spotted by Bruno Haible.
Diffstat (limited to 'src')
-rw-r--r--src/remove.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/remove.c b/src/remove.c
index 3cbfe6683..4f91dd420 100644
--- a/src/remove.c
+++ b/src/remove.c
@@ -305,7 +305,8 @@ right_justify (char *dst, size_t dst_len, const char *src, size_t src_len,
/* Using the global directory name obstack, create the full name FILENAME.
Return it in sometimes-realloc'd space that should not be freed by the
caller. Realloc as necessary. If realloc fails, use a static buffer
- and put as long a suffix in that buffer as possible. */
+ and put as long a suffix in that buffer as possible. Be careful not
+ to change errno. */
#define full_filename(Filename) full_filename_ (ds, Filename)
static char *
@@ -313,6 +314,7 @@ full_filename_ (Dirstack_state const *ds, const char *filename)
{
static char *buf = NULL;
static size_t n_allocated = 0;
+ int saved_errno = errno;
size_t dir_len = obstack_object_size (&ds->dir_stack);
char *dir_name = obstack_base (&ds->dir_stack);
@@ -350,6 +352,7 @@ full_filename_ (Dirstack_state const *ds, const char *filename)
memcpy (static_buf, ELLIPSES_PREFIX,
sizeof (ELLIPSES_PREFIX) - 1);
}
+ errno = saved_errno;
return p;
}
@@ -372,6 +375,7 @@ full_filename_ (Dirstack_state const *ds, const char *filename)
assert (strlen (buf) + 1 == n_bytes_needed);
}
+ errno = saved_errno;
return buf;
}