diff --git a/include/nfsc/libnfs.h b/include/nfsc/libnfs.h index dd71c192..2d14113f 100644 --- a/include/nfsc/libnfs.h +++ b/include/nfsc/libnfs.h @@ -386,7 +386,14 @@ EXTERN int nfs_fstat64_async(struct nfs_context *nfs, struct nfsfh *nfsfh, nfs_c */ EXTERN int nfs_fstat64(struct nfs_context *nfs, struct nfsfh *nfsfh, struct nfs_stat_64 *st); - +/* + * UMASK() never blocks, so no special aync/async versions are available + */ +/* + * Sync umask() + * Function returns the old mask. + */ +EXTERN uint16_t nfs_umask(struct nfs_context *nfs, uint16_t mask); /* * OPEN() diff --git a/lib/libnfs.c b/lib/libnfs.c index da5ff64e..8dffe008 100644 --- a/lib/libnfs.c +++ b/lib/libnfs.c @@ -125,6 +125,7 @@ struct nfs_context { uint64_t writemax; char *cwd; struct nfsdir *dircache; + uint16_t mask; }; void nfs_free_nfsdir(struct nfsdir *nfsdir) @@ -412,7 +413,7 @@ struct nfs_context *nfs_init_context(void) } nfs->cwd = strdup("/"); - + nfs->mask = 022; return nfs; } @@ -5095,3 +5096,9 @@ const struct nfs_fh3 *nfs_get_rootfh(struct nfs_context *nfs) { struct nfs_fh3 *nfs_get_fh(struct nfsfh *nfsfh) { return &nfsfh->fh; } + +uint16_t nfs_umask(struct nfs_context *nfs, uint16_t mask) { + uint16_t tmp = nfs->mask; + nfs->mask = mask; + return tmp; +}