From: Ingo Weinhold Date: Fri, 21 Mar 2008 13:10:27 +0000 (+0100) Subject: remove.c: Accommodate systems with negative errno values. X-Git-Tag: v6.11~65 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e73dfc3899c2a622c91c0948610a1c5c1e1972d1;p=thirdparty%2Fcoreutils.git remove.c: Accommodate systems with negative errno values. * src/remove.c (cache_fstatat): Store errno value directly in the st_ino field, rather than trying to shoehorn it into st_size. This is required at least on BeOS and Haiku. --- diff --git a/src/remove.c b/src/remove.c index 1658fb9900..9c6dc9ee25 100644 --- a/src/remove.c +++ b/src/remove.c @@ -171,16 +171,19 @@ static size_t g_n_allocated; /* Like fstatat, but cache the result. If ST->st_size is -1, the status has not been gotten yet. If less than -1, fstatat failed - with errno == -1 - ST->st_size. Otherwise, the status has already + with errno == ST->st_ino. Otherwise, the status has already been gotten, so return 0. */ static int cache_fstatat (int fd, char const *file, struct stat *st, int flag) { if (st->st_size == -1 && fstatat (fd, file, st, flag) != 0) - st->st_size = -1 - errno; + { + st->st_size = -2; + st->st_ino = errno; + } if (0 <= st->st_size) return 0; - errno = -1 - st->st_size; + errno = (int) st->st_ino; return -1; }