Lines Matching refs:fa
60 fileargs_get_lstat_cache(fileargs_t *fa, const char *name, struct stat *sb) in fileargs_get_lstat_cache() argument
66 assert(fa != NULL); in fileargs_get_lstat_cache()
67 assert(fa->fa_magic == FILEARGS_MAGIC); in fileargs_get_lstat_cache()
70 if (fa->fa_cache == NULL) in fileargs_get_lstat_cache()
73 nvl = dnvlist_get_nvlist(fa->fa_cache, name, NULL); in fileargs_get_lstat_cache()
89 fileargs_get_fd_cache(fileargs_t *fa, const char *name) in fileargs_get_fd_cache() argument
95 assert(fa != NULL); in fileargs_get_fd_cache()
96 assert(fa->fa_magic == FILEARGS_MAGIC); in fileargs_get_fd_cache()
99 if (fa->fa_cache == NULL) in fileargs_get_fd_cache()
102 if ((fa->fa_fdflags & O_CREAT) != 0) in fileargs_get_fd_cache()
105 nvl = dnvlist_get_nvlist(fa->fa_cache, name, NULL); in fileargs_get_fd_cache()
109 tnvl = nvlist_take_nvlist(fa->fa_cache, name); in fileargs_get_fd_cache()
119 if ((fa->fa_fdflags & O_CLOEXEC) != O_CLOEXEC) { in fileargs_get_fd_cache()
120 if (fcntl(fd, F_SETFD, fa->fa_fdflags) == -1) { in fileargs_get_fd_cache()
130 fileargs_set_cache(fileargs_t *fa, nvlist_t *nvl) in fileargs_set_cache() argument
133 nvlist_destroy(fa->fa_cache); in fileargs_set_cache()
134 fa->fa_cache = nvl; in fileargs_set_cache()
138 fileargs_fetch(fileargs_t *fa, const char *name, const char *cmd) in fileargs_fetch() argument
143 assert(fa != NULL); in fileargs_fetch()
150 nvl = cap_xfer_nvlist(fa->fa_chann, nvl); in fileargs_fetch()
199 fileargs_t *fa; in fileargs_create() local
201 fa = malloc(sizeof(*fa)); in fileargs_create()
202 if (fa != NULL) { in fileargs_create()
203 fa->fa_cache = NULL; in fileargs_create()
204 fa->fa_chann = chan; in fileargs_create()
205 fa->fa_fdflags = fdflags; in fileargs_create()
206 fa->fa_magic = FILEARGS_MAGIC; in fileargs_create()
209 return (fa); in fileargs_create()
252 fileargs_t *fa; in fileargs_initnv() local
264 fa = fileargs_cinitnv(cas, limits); in fileargs_initnv()
267 return (fa); in fileargs_initnv()
274 fileargs_t *fa; in fileargs_cinitnv() local
284 fa = NULL; in fileargs_cinitnv()
300 fa = fileargs_create(chann, flags); in fileargs_cinitnv()
301 if (fa == NULL) in fileargs_cinitnv()
304 return (fa); in fileargs_cinitnv()
314 fileargs_open(fileargs_t *fa, const char *name) in fileargs_open() argument
320 assert(fa != NULL); in fileargs_open()
321 assert(fa->fa_magic == FILEARGS_MAGIC); in fileargs_open()
328 if (fa->fa_chann == NULL) { in fileargs_open()
333 fd = fileargs_get_fd_cache(fa, name); in fileargs_open()
337 nvl = fileargs_fetch(fa, name, "open"); in fileargs_open()
344 fileargs_set_cache(fa, nvl); in fileargs_open()
353 fileargs_fopen(fileargs_t *fa, const char *name, const char *mode) in fileargs_fopen() argument
357 if ((fd = fileargs_open(fa, name)) < 0) { in fileargs_fopen()
365 fileargs_lstat(fileargs_t *fa, const char *name, struct stat *sb) in fileargs_lstat() argument
372 assert(fa != NULL); in fileargs_lstat()
373 assert(fa->fa_magic == FILEARGS_MAGIC); in fileargs_lstat()
385 if (fa->fa_chann == NULL) { in fileargs_lstat()
390 if (fileargs_get_lstat_cache(fa, name, sb) != -1) in fileargs_lstat()
393 nvl = fileargs_fetch(fa, name, "lstat"); in fileargs_lstat()
403 fileargs_set_cache(fa, nvl); in fileargs_lstat()
412 fileargs_realpath(fileargs_t *fa, const char *pathname, char *reserved_path) in fileargs_realpath() argument
417 assert(fa != NULL); in fileargs_realpath()
418 assert(fa->fa_magic == FILEARGS_MAGIC); in fileargs_realpath()
425 if (fa->fa_chann == NULL) { in fileargs_realpath()
430 nvl = fileargs_fetch(fa, pathname, "realpath"); in fileargs_realpath()
447 fileargs_free(fileargs_t *fa) in fileargs_free() argument
450 if (fa == NULL) in fileargs_free()
453 assert(fa->fa_magic == FILEARGS_MAGIC); in fileargs_free()
455 nvlist_destroy(fa->fa_cache); in fileargs_free()
456 if (fa->fa_chann != NULL) { in fileargs_free()
457 cap_close(fa->fa_chann); in fileargs_free()
459 explicit_bzero(&fa->fa_magic, sizeof(fa->fa_magic)); in fileargs_free()
460 free(fa); in fileargs_free()
464 fileargs_unwrap(fileargs_t *fa, int *flags) in fileargs_unwrap() argument
468 if (fa == NULL) in fileargs_unwrap()
471 assert(fa->fa_magic == FILEARGS_MAGIC); in fileargs_unwrap()
473 chan = fa->fa_chann; in fileargs_unwrap()
475 *flags = fa->fa_fdflags; in fileargs_unwrap()
478 nvlist_destroy(fa->fa_cache); in fileargs_unwrap()
479 explicit_bzero(&fa->fa_magic, sizeof(fa->fa_magic)); in fileargs_unwrap()
480 free(fa); in fileargs_unwrap()