changeset 802:e03d04a2eaa1

common: expose file mode conversion functions They'll be useful in clients using the fscall API. Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
date Sun, 05 Apr 2020 13:07:50 -0400
parents 610dea97626e
children cf539681812d
files src/common/attr.c src/common/include/nomad/attr.h
diffstat 2 files changed, 36 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/src/common/attr.c	Sun Apr 05 11:06:50 2020 -0400
+++ b/src/common/attr.c	Sun Apr 05 13:07:50 2020 -0400
@@ -28,7 +28,7 @@
 
 #define MAP_OR(m, i, o)		case i: m |= o; break
 
-static inline mode_t cvt_nmode(uint16_t nmode)
+mode_t nmode_to_mode(const uint16_t nmode)
 {
 	mode_t mode;
 
@@ -59,38 +59,7 @@
 	return mode;
 }
 
-static inline void cvt_ntime(struct timespec *s, const uint64_t t)
-{
-	s->tv_sec = t / 1000000000;
-	s->tv_nsec = t % 1000000000;
-}
-
-void nattr_to_stat(const struct nattr *nattr, struct stat *stat)
-{
-	stat->st_dev = 0;
-	stat->st_rdev = 0;
-	stat->st_ino = nattr->ino;
-	stat->st_mode = cvt_nmode(nattr->mode);
-	stat->st_nlink = nattr->nlink;
-	stat->st_uid = nattr->owner;
-	stat->st_gid = nattr->group;
-	stat->st_size = nattr->size;
-	cvt_ntime(&stat->st_atim, nattr->atime);
-#ifdef HAVE_STAT_BIRTHTIM
-	cvt_ntime(&stat->st_birthtim, nattr->btime);
-#endif
-	cvt_ntime(&stat->st_ctim, nattr->ctime);
-	cvt_ntime(&stat->st_mtim, nattr->mtime);
-	stat->st_blksize = 4096;
-	stat->st_blocks = (nattr->size + stat->st_blksize - 1) / stat->st_blksize;
-
-	/*
-	 * TODO: Illumos has a stat->st_fstype, should we zero it?  Linux
-	 * does not have this field.
-	 */
-}
-
-static inline uint16_t cvt_mode(mode_t mode)
+uint16_t mode_to_nmode(const mode_t mode)
 {
 	uint16_t nmode;
 
@@ -116,6 +85,37 @@
 	return nmode;
 }
 
+static inline void cvt_ntime(struct timespec *s, const uint64_t t)
+{
+	s->tv_sec = t / 1000000000;
+	s->tv_nsec = t % 1000000000;
+}
+
+void nattr_to_stat(const struct nattr *nattr, struct stat *stat)
+{
+	stat->st_dev = 0;
+	stat->st_rdev = 0;
+	stat->st_ino = nattr->ino;
+	stat->st_mode = nmode_to_mode(nattr->mode);
+	stat->st_nlink = nattr->nlink;
+	stat->st_uid = nattr->owner;
+	stat->st_gid = nattr->group;
+	stat->st_size = nattr->size;
+	cvt_ntime(&stat->st_atim, nattr->atime);
+#ifdef HAVE_STAT_BIRTHTIM
+	cvt_ntime(&stat->st_birthtim, nattr->btime);
+#endif
+	cvt_ntime(&stat->st_ctim, nattr->ctime);
+	cvt_ntime(&stat->st_mtim, nattr->mtime);
+	stat->st_blksize = 4096;
+	stat->st_blocks = (nattr->size + stat->st_blksize - 1) / stat->st_blksize;
+
+	/*
+	 * TODO: Illumos has a stat->st_fstype, should we zero it?  Linux
+	 * does not have this field.
+	 */
+}
+
 static inline uint64_t cvt_time(const struct timespec *s)
 {
 	return ((uint64_t) s->tv_sec) * 1000000000ull + s->tv_nsec;
@@ -124,7 +124,7 @@
 void stat_to_nattr(const struct stat *stat, struct nattr *nattr)
 {
 	nattr->_reserved = 0;
-	nattr->mode = cvt_mode(stat->st_mode);
+	nattr->mode = mode_to_nmode(stat->st_mode);
 	nattr->nlink = stat->st_nlink;
 	nattr->size = stat->st_size;
 	nattr->atime = cvt_time(&stat->st_atim);
--- a/src/common/include/nomad/attr.h	Sun Apr 05 11:06:50 2020 -0400
+++ b/src/common/include/nomad/attr.h	Sun Apr 05 13:07:50 2020 -0400
@@ -91,6 +91,8 @@
 	uint32_t group;
 };
 
+extern mode_t nmode_to_mode(const uint16_t nmode);
+extern uint16_t mode_to_nmode(const mode_t mode);
 extern void nattr_to_stat(const struct nattr *nattr, struct stat *stat);
 extern void stat_to_nattr(const struct stat *stat, struct nattr *nattr);