fix errno handling in scandir:
authorRich Felker <dalias@aerifal.cx>
Mon, 11 Apr 2011 05:58:14 +0000 (01:58 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 11 Apr 2011 05:58:14 +0000 (01:58 -0400)
1. saved errno was not being restored, illegally clearing errno to 0.
2. no need to backup and save errno around free; it will not touch
except perhaps when the program has already invoked UB...

src/dirent/scandir.c

index 6a0a999..aad813a 100644 (file)
@@ -35,12 +35,11 @@ int scandir(const char *path, struct dirent ***res,
        closedir(d);
 
        if (errno) {
-               old_errno = errno;
                if (names) while (cnt-->0) free(names[cnt]);
                free(names);
-               errno = old_errno;
                return -1;
        }
+       errno = old_errno;
 
        if (cmp) qsort(names, cnt, sizeof *names, (int (*)(const void *, const void *))cmp);
        *res = names;