chiark / gitweb /
install: replace readdir_r with readdir
authorFlorian Weimer <fweimer@redhat.com>
Thu, 19 Dec 2013 10:59:19 +0000 (11:59 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 21 Dec 2013 23:35:55 +0000 (18:35 -0500)
The old code incorrectly assumed that readdir_r updates errno.

src/shared/install.c

index 17e8a7508e07a4976ab4c24fb8b62e9bfff76dd7..5001ad43be016061fe6b20c6d209c9bd1cecb725 100644 (file)
@@ -212,11 +212,10 @@ static int remove_marked_symlinks_fd(
 
         for (;;) {
                 struct dirent *de;
-                union dirent_storage buf;
-                int k;
 
-                k = readdir_r(d, &buf.de, &de);
-                if (k != 0) {
+                errno = 0;
+                de = readdir(d);
+                if (!de && errno != 0) {
                         r = -errno;
                         break;
                 }
@@ -373,12 +372,11 @@ static int find_symlinks_fd(
         }
 
         for (;;) {
-                int k;
                 struct dirent *de;
-                union dirent_storage buf;
 
-                k = readdir_r(d, &buf.de, &de);
-                if (k != 0)
+                errno = 0;
+                de = readdir(d);
+                if (!de && errno != 0)
                         return -errno;
 
                 if (!de)
@@ -1938,12 +1936,12 @@ int unit_file_get_list(
 
                 for (;;) {
                         struct dirent *de;
-                        union dirent_storage buffer;
                         _cleanup_unitfilelist_free_ UnitFileList *f = NULL;
 
-                        r = readdir_r(d, &buffer.de, &de);
-                        if (r != 0)
-                                return -r;
+                        errno = 0;
+                        de = readdir(d);
+                        if (!de && errno != 0)
+                                return -errno;
 
                         if (!de)
                                 break;