From e73dfc3899c2a622c91c0948610a1c5c1e1972d1 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Fri, 21 Mar 2008 14:10:27 +0100 Subject: 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. --- src/remove.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/remove.c b/src/remove.c index 1658fb990..9c6dc9ee2 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; } -- cgit v1.2.3-70-g09d2