From 46ca486c3c21327f96b98da48c5055699c866df1 Mon Sep 17 00:00:00 2001 From: mckay Date: Thu, 15 Jan 1998 13:52:55 +0000 Subject: Return the correct errno from getcwd() even if free() or closedir() overwrites it. This actually showed up when running under an old kernel when free() called the madvise() stub which set errno, causing getcwd() to return EOPNOTSUPP instead of ERANGE. --- lib/libc/gen/getcwd.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'lib/libc') diff --git a/lib/libc/gen/getcwd.c b/lib/libc/gen/getcwd.c index 344a418..f178784 100644 --- a/lib/libc/gen/getcwd.c +++ b/lib/libc/gen/getcwd.c @@ -268,10 +268,14 @@ notfound: errno = save_errno ? save_errno : ENOENT; /* FALLTHROUGH */ err: + save_errno = errno; + if (ptsize) free(pt); if (dir) (void) closedir(dir); free(up); + + errno = save_errno; return (NULL); } -- cgit v1.1