Преглед изворни кода

fix errno handling in scandir:

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...
Rich Felker пре 14 година
родитељ
комит
dae17a1aaf
1 измењених фајлова са 1 додато и 2 уклоњено
  1. 1 2
      src/dirent/scandir.c

+ 1 - 2
src/dirent/scandir.c

@@ -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;