瀏覽代碼

fix spurious errors in refactored passwd/group code

errno was treated as the error status when the return value of getline
was negative, but this condition can simply indicate EOF and is not
necessarily an error.

the spurious errors caused by this bug masked the bug which was fixed
in commit fc5a96c9c8aa186effad7520d5df6b616bbfd29d.
Rich Felker 10 年之前
父節點
當前提交
0afef1aa24
共有 2 個文件被更改,包括 2 次插入2 次删除
  1. 1 1
      src/passwd/getgrent_a.c
  2. 1 1
      src/passwd/getpwent_a.c

+ 1 - 1
src/passwd/getgrent_a.c

@@ -18,7 +18,7 @@ int __getgrent_a(FILE *f, struct group *gr, char **line, size_t *size, char ***m
 	pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
 	for (;;) {
 		if ((l=getline(line, size, f)) < 0) {
-			rv = errno;
+			rv = ferror(f) ? errno : 0;
 			free(*line);
 			*line = 0;
 			gr = 0;

+ 1 - 1
src/passwd/getpwent_a.c

@@ -17,7 +17,7 @@ int __getpwent_a(FILE *f, struct passwd *pw, char **line, size_t *size, struct p
 	pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
 	for (;;) {
 		if ((l=getline(line, size, f)) < 0) {
-			rv = errno;
+			rv = ferror(f) ? errno : 0;
 			free(*line);
 			*line = 0;
 			pw = 0;