Lines Matching refs:fa
61 fileargs_get_lstat_cache(fileargs_t *fa, const char *name, struct stat *sb) in fileargs_get_lstat_cache() argument
67 assert(fa != NULL); in fileargs_get_lstat_cache()
68 assert(fa->fa_magic == FILEARGS_MAGIC); in fileargs_get_lstat_cache()
71 if (fa->fa_cache == NULL) in fileargs_get_lstat_cache()
74 nvl = dnvlist_get_nvlist(fa->fa_cache, name, NULL); in fileargs_get_lstat_cache()
90 fileargs_get_fd_cache(fileargs_t *fa, const char *name) in fileargs_get_fd_cache() argument
96 assert(fa != NULL); in fileargs_get_fd_cache()
97 assert(fa->fa_magic == FILEARGS_MAGIC); in fileargs_get_fd_cache()
100 if (fa->fa_cache == NULL) in fileargs_get_fd_cache()
103 if ((fa->fa_fdflags & O_CREAT) != 0) in fileargs_get_fd_cache()
106 nvl = dnvlist_get_nvlist(fa->fa_cache, name, NULL); in fileargs_get_fd_cache()
110 tnvl = nvlist_take_nvlist(fa->fa_cache, name); in fileargs_get_fd_cache()
120 if ((fa->fa_fdflags & O_CLOEXEC) != O_CLOEXEC) { in fileargs_get_fd_cache()
121 if (fcntl(fd, F_SETFD, fa->fa_fdflags) == -1) { in fileargs_get_fd_cache()
131 fileargs_set_cache(fileargs_t *fa, nvlist_t *nvl) in fileargs_set_cache() argument
134 nvlist_destroy(fa->fa_cache); in fileargs_set_cache()
135 fa->fa_cache = nvl; in fileargs_set_cache()
139 fileargs_fetch(fileargs_t *fa, const char *name, const char *cmd) in fileargs_fetch() argument
144 assert(fa != NULL); in fileargs_fetch()
151 nvl = cap_xfer_nvlist(fa->fa_chann, nvl); in fileargs_fetch()
200 fileargs_t *fa; in fileargs_create() local
202 fa = malloc(sizeof(*fa)); in fileargs_create()
203 if (fa != NULL) { in fileargs_create()
204 fa->fa_cache = NULL; in fileargs_create()
205 fa->fa_chann = chan; in fileargs_create()
206 fa->fa_fdflags = fdflags; in fileargs_create()
207 fa->fa_magic = FILEARGS_MAGIC; in fileargs_create()
210 return (fa); in fileargs_create()
253 fileargs_t *fa; in fileargs_initnv() local
265 fa = fileargs_cinitnv(cas, limits); in fileargs_initnv()
268 return (fa); in fileargs_initnv()
275 fileargs_t *fa; in fileargs_cinitnv() local
285 fa = NULL; in fileargs_cinitnv()
301 fa = fileargs_create(chann, flags); in fileargs_cinitnv()
302 if (fa == NULL) in fileargs_cinitnv()
305 return (fa); in fileargs_cinitnv()
315 fileargs_open(fileargs_t *fa, const char *name) in fileargs_open() argument
321 assert(fa != NULL); in fileargs_open()
322 assert(fa->fa_magic == FILEARGS_MAGIC); in fileargs_open()
329 if (fa->fa_chann == NULL) { in fileargs_open()
334 fd = fileargs_get_fd_cache(fa, name); in fileargs_open()
338 nvl = fileargs_fetch(fa, name, "open"); in fileargs_open()
345 fileargs_set_cache(fa, nvl); in fileargs_open()
354 fileargs_fopen(fileargs_t *fa, const char *name, const char *mode) in fileargs_fopen() argument
358 if ((fd = fileargs_open(fa, name)) < 0) { in fileargs_fopen()
366 fileargs_lstat(fileargs_t *fa, const char *name, struct stat *sb) in fileargs_lstat() argument
373 assert(fa != NULL); in fileargs_lstat()
374 assert(fa->fa_magic == FILEARGS_MAGIC); in fileargs_lstat()
386 if (fa->fa_chann == NULL) { in fileargs_lstat()
391 if (fileargs_get_lstat_cache(fa, name, sb) != -1) in fileargs_lstat()
394 nvl = fileargs_fetch(fa, name, "lstat"); in fileargs_lstat()
404 fileargs_set_cache(fa, nvl); in fileargs_lstat()
413 fileargs_realpath(fileargs_t *fa, const char *pathname, char *reserved_path) in fileargs_realpath() argument
418 assert(fa != NULL); in fileargs_realpath()
419 assert(fa->fa_magic == FILEARGS_MAGIC); in fileargs_realpath()
426 if (fa->fa_chann == NULL) { in fileargs_realpath()
431 nvl = fileargs_fetch(fa, pathname, "realpath"); in fileargs_realpath()
448 fileargs_free(fileargs_t *fa) in fileargs_free() argument
451 if (fa == NULL) in fileargs_free()
454 assert(fa->fa_magic == FILEARGS_MAGIC); in fileargs_free()
456 nvlist_destroy(fa->fa_cache); in fileargs_free()
457 if (fa->fa_chann != NULL) { in fileargs_free()
458 cap_close(fa->fa_chann); in fileargs_free()
460 explicit_bzero(&fa->fa_magic, sizeof(fa->fa_magic)); in fileargs_free()
461 free(fa); in fileargs_free()
465 fileargs_unwrap(fileargs_t *fa, int *flags) in fileargs_unwrap() argument
469 if (fa == NULL) in fileargs_unwrap()
472 assert(fa->fa_magic == FILEARGS_MAGIC); in fileargs_unwrap()
474 chan = fa->fa_chann; in fileargs_unwrap()
476 *flags = fa->fa_fdflags; in fileargs_unwrap()
479 nvlist_destroy(fa->fa_cache); in fileargs_unwrap()
480 explicit_bzero(&fa->fa_magic, sizeof(fa->fa_magic)); in fileargs_unwrap()
481 free(fa); in fileargs_unwrap()