From c6a11fcd6ba58f0f6766ca7e9764c8d8124bd53f Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Tue, 28 Mar 2023 13:46:17 -0700 Subject: [PATCH] Add userspace version of our mode to type Signed-off-by: Zach Brown --- utils/src/mode_types.c | 24 ++++++++++++++++++++++++ utils/src/mode_types.h | 6 ++++++ 2 files changed, 30 insertions(+) create mode 100644 utils/src/mode_types.c create mode 100644 utils/src/mode_types.h diff --git a/utils/src/mode_types.c b/utils/src/mode_types.c new file mode 100644 index 00000000..2382dd41 --- /dev/null +++ b/utils/src/mode_types.c @@ -0,0 +1,24 @@ +#include +#include + +#include "sparse.h" +#include "util.h" +#include "format.h" +#include "mode_types.h" + +unsigned int mode_to_type(mode_t mode) +{ +#define S_SHIFT 12 + static unsigned char mode_types[S_IFMT >> S_SHIFT] = { + [S_IFIFO >> S_SHIFT] = SCOUTFS_DT_FIFO, + [S_IFCHR >> S_SHIFT] = SCOUTFS_DT_CHR, + [S_IFDIR >> S_SHIFT] = SCOUTFS_DT_DIR, + [S_IFBLK >> S_SHIFT] = SCOUTFS_DT_BLK, + [S_IFREG >> S_SHIFT] = SCOUTFS_DT_REG, + [S_IFLNK >> S_SHIFT] = SCOUTFS_DT_LNK, + [S_IFSOCK >> S_SHIFT] = SCOUTFS_DT_SOCK, + }; + + return mode_types[(mode & S_IFMT) >> S_SHIFT]; +#undef S_SHIFT +} diff --git a/utils/src/mode_types.h b/utils/src/mode_types.h new file mode 100644 index 00000000..e69cf45b --- /dev/null +++ b/utils/src/mode_types.h @@ -0,0 +1,6 @@ +#ifndef _MODE_TYPES_H_ +#define _MODE_TYPES_H_ + +unsigned int mode_to_type(mode_t mode); + +#endif