From: Lennart Poettering Date: Fri, 1 Oct 2021 13:46:42 +0000 (+0200) Subject: dirent-util: split out new function stat_mode_to_dirent_type() X-Git-Tag: v250-rc1~550^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=21d46382e0a9f7d0b371c424de56fbd229c840f6;p=thirdparty%2Fsystemd.git dirent-util: split out new function stat_mode_to_dirent_type() This contains the mapping between mode_t inode type flags and dirent's d_type. Splitting this out allows us to use the mapping elsewhere later. --- diff --git a/src/basic/dirent-util.c b/src/basic/dirent-util.c index aba14481df2..a70871b33da 100644 --- a/src/basic/dirent-util.c +++ b/src/basic/dirent-util.c @@ -7,6 +7,18 @@ #include "path-util.h" #include "string-util.h" +int stat_mode_to_dirent_type(mode_t mode) { + return + S_ISREG(mode) ? DT_REG : + S_ISDIR(mode) ? DT_DIR : + S_ISLNK(mode) ? DT_LNK : + S_ISFIFO(mode) ? DT_FIFO : + S_ISSOCK(mode) ? DT_SOCK : + S_ISCHR(mode) ? DT_CHR : + S_ISBLK(mode) ? DT_BLK : + DT_UNKNOWN; +} + static int dirent_ensure_type(DIR *d, struct dirent *de) { struct stat st; @@ -24,15 +36,7 @@ static int dirent_ensure_type(DIR *d, struct dirent *de) { if (fstatat(dirfd(d), de->d_name, &st, AT_SYMLINK_NOFOLLOW) < 0) return -errno; - de->d_type = - S_ISREG(st.st_mode) ? DT_REG : - S_ISDIR(st.st_mode) ? DT_DIR : - S_ISLNK(st.st_mode) ? DT_LNK : - S_ISFIFO(st.st_mode) ? DT_FIFO : - S_ISSOCK(st.st_mode) ? DT_SOCK : - S_ISCHR(st.st_mode) ? DT_CHR : - S_ISBLK(st.st_mode) ? DT_BLK : - DT_UNKNOWN; + de->d_type = stat_mode_to_dirent_type(st.st_mode); return 0; } diff --git a/src/basic/dirent-util.h b/src/basic/dirent-util.h index c7956e7c1b7..5bbd54df5a8 100644 --- a/src/basic/dirent-util.h +++ b/src/basic/dirent-util.h @@ -8,6 +8,8 @@ #include "macro.h" #include "path-util.h" +int stat_mode_to_dirent_type(mode_t mode); + bool dirent_is_file(const struct dirent *de) _pure_; bool dirent_is_file_with_suffix(const struct dirent *de, const char *suffix) _pure_;