]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
dirent-util: Expose dirent_ensure_type()
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 24 Nov 2022 12:13:05 +0000 (13:13 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 24 Nov 2022 12:18:00 +0000 (13:18 +0100)
src/basic/dirent-util.c
src/basic/dirent-util.h

index 2eea228c20a01e3c5790b69e29d1f6b74ef7bbdb..17df6a24c907683dba9480f0251c9adf5bb1704d 100644 (file)
@@ -8,11 +8,11 @@
 #include "stat-util.h"
 #include "string-util.h"
 
-static int dirent_ensure_type(DIR *d, struct dirent *de) {
+int dirent_ensure_type(int dir_fd, struct dirent *de) {
         STRUCT_STATX_DEFINE(sx);
         int r;
 
-        assert(d);
+        assert(dir_fd >= 0);
         assert(de);
 
         if (de->d_type != DT_UNKNOWN)
@@ -24,7 +24,7 @@ static int dirent_ensure_type(DIR *d, struct dirent *de) {
         }
 
         /* Let's ask only for the type, nothing else. */
-        r = statx_fallback(dirfd(d), de->d_name, AT_SYMLINK_NOFOLLOW|AT_NO_AUTOMOUNT, STATX_TYPE, &sx);
+        r = statx_fallback(dir_fd, de->d_name, AT_SYMLINK_NOFOLLOW|AT_NO_AUTOMOUNT, STATX_TYPE, &sx);
         if (r < 0)
                 return r;
 
@@ -80,7 +80,7 @@ struct dirent *readdir_ensure_type(DIR *d) {
                 if (!de)
                         return NULL;
 
-                r = dirent_ensure_type(d, de);
+                r = dirent_ensure_type(dirfd(d), de);
                 if (r >= 0)
                         return de;
                 if (r != -ENOENT) {
index 5fde9043a30abd4478ca25c9ae908f647156578c..0f1fb231190a891a21978f43e4a40f4e0c9d3ee8 100644 (file)
@@ -10,6 +10,7 @@
 
 bool dirent_is_file(const struct dirent *de) _pure_;
 bool dirent_is_file_with_suffix(const struct dirent *de, const char *suffix) _pure_;
+int dirent_ensure_type(int dir_fd, struct dirent *de);
 
 struct dirent *readdir_ensure_type(DIR *d);
 struct dirent *readdir_no_dot(DIR *dirp);