Wrong assumption that errno values are positive. Could cause "rm -f" to

fail for non-existent entries.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24499 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2008-03-21 12:16:22 +00:00
parent 590bb3b9e2
commit b4c0ce288e
+6 -3
View File
@@ -150,16 +150,19 @@ typedef struct dirstack_state Dirstack_state;
/* 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;
}