]> git.sesse.net Git - plocate/blobdiff - updatedb.cpp
uring: always pair io_uring_get_probe_ring and io_uring_free_probe
[plocate] / updatedb.cpp
index 188d3c2113f08c7ecd2de6045d9f6694782e6625..812304bb6b8439cc835dc1ddd1bf7cb709e48445 100644 (file)
@@ -39,6 +39,7 @@ any later version.
 #include <fcntl.h>
 #include <getopt.h>
 #include <grp.h>
+#include <inttypes.h>
 #include <iosfwd>
 #include <math.h>
 #include <memory>
@@ -610,8 +611,12 @@ int scan(const string &path, int fd, dev_t parent_dev, dir_time modified, dir_ti
        } else {
                dir = fdopendir(fd);  // Takes over ownership of fd.
                if (dir == nullptr) {
-                       perror("fdopendir");
-                       exit(1);
+                       // fdopendir() wants to fstat() the fd to verify that it's indeed
+                       // a directory, which can seemingly fail on at least CIFS filesystems
+                       // if the server feels like it. We treat this as if we had an error
+                       // on opening it, ie., ignore the directory.
+                       close(fd);
+                       return 0;
                }
 
                dirent *de;
@@ -703,8 +708,8 @@ int scan(const string &path, int fd, dev_t parent_dev, dir_time modified, dir_ti
                                if (getrlimit(RLIMIT_NOFILE, &rlim) == -1) {
                                        fprintf(stderr, "Hint: Try `ulimit -n 131072' or similar.\n");
                                } else {
-                                       fprintf(stderr, "Hint: Try `ulimit -n %lu' or similar (current limit is %lu).\n",
-                                               rlim.rlim_cur * 2, rlim.rlim_cur);
+                                       fprintf(stderr, "Hint: Try `ulimit -n %" PRIu64 " or similar (current limit is %" PRIu64 ").\n",
+                                               static_cast<uint64_t>(rlim.rlim_cur * 2), static_cast<uint64_t>(rlim.rlim_cur));
                                }
                                exit(1);
                        }