Lines Matching defs:fa

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