Mercurial > nomad
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);