diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2017-04-08 07:47:37 -0600 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2017-04-08 07:47:37 -0600 |
commit | 5b343f3e2515eb1077792564735f7e7c9e4c65e7 (patch) | |
tree | 11579021c4e5eeb6f35e1c02206abd070cf2cb9b /util.c | |
parent | 998ba6f6d119608b0844c0ca735044746ea1fd0f (diff) | |
download | bfs-5b343f3e2515eb1077792564735f7e7c9e4c65e7.tar.xz |
Move bftw_typeflag converters to util.c
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 99 |
1 files changed, 98 insertions, 1 deletions
@@ -134,7 +134,7 @@ int xlocaltime(const time_t *timep, struct tm *result) { void format_mode(mode_t mode, char str[11]) { strcpy(str, "----------"); - switch (bftw_mode_to_typeflag(mode)) { + switch (mode_to_typeflag(mode)) { case BFTW_BLK: str[0] = 'b'; break; @@ -217,3 +217,100 @@ const char *xbasename(const char *path) { return i; } + +enum bftw_typeflag mode_to_typeflag(mode_t mode) { + switch (mode & S_IFMT) { +#ifdef S_IFBLK + case S_IFBLK: + return BFTW_BLK; +#endif +#ifdef S_IFCHR + case S_IFCHR: + return BFTW_CHR; +#endif +#ifdef S_IFDIR + case S_IFDIR: + return BFTW_DIR; +#endif +#ifdef S_IFDOOR + case S_IFDOOR: + return BFTW_DOOR; +#endif +#ifdef S_IFIFO + case S_IFIFO: + return BFTW_FIFO; +#endif +#ifdef S_IFLNK + case S_IFLNK: + return BFTW_LNK; +#endif +#ifdef S_IFPORT + case S_IFPORT: + return BFTW_PORT; +#endif +#ifdef S_IFREG + case S_IFREG: + return BFTW_REG; +#endif +#ifdef S_IFSOCK + case S_IFSOCK: + return BFTW_SOCK; +#endif +#ifdef S_IFWHT + case S_IFWHT: + return BFTW_WHT; +#endif + + default: + return BFTW_UNKNOWN; + } +} + +enum bftw_typeflag dirent_to_typeflag(const struct dirent *de) { +#if defined(_DIRENT_HAVE_D_TYPE) || defined(DT_UNKNOWN) + switch (de->d_type) { +#ifdef DT_BLK + case DT_BLK: + return BFTW_BLK; +#endif +#ifdef DT_CHR + case DT_CHR: + return BFTW_CHR; +#endif +#ifdef DT_DIR + case DT_DIR: + return BFTW_DIR; +#endif +#ifdef DT_DOOR + case DT_DOOR: + return BFTW_DOOR; +#endif +#ifdef DT_FIFO + case DT_FIFO: + return BFTW_FIFO; +#endif +#ifdef DT_LNK + case DT_LNK: + return BFTW_LNK; +#endif +#ifdef DT_PORT + case DT_PORT: + return BFTW_PORT; +#endif +#ifdef DT_REG + case DT_REG: + return BFTW_REG; +#endif +#ifdef DT_SOCK + case DT_SOCK: + return BFTW_SOCK; +#endif +#ifdef DT_WHT + case DT_WHT: + return BFTW_WHT; +#endif + } +#endif + + return BFTW_UNKNOWN; +} |