Lines Matching defs:fa

116 	struct fattr *fa;
120 fa = fattr_new(i, -1);
122 fa->mode = 0777;
124 fa->mode = 0666;
125 fa->mask |= FA_MODE;
126 defaults[i] = fa;
178 struct fattr *fa;
180 fa = fattr_new(FT_UNKNOWN, -1);
182 fa->type = FT_FILE;
184 fa->type = FT_DIRECTORY;
186 fa->type = FT_CDEV;
188 fa->type = FT_BDEV;
190 fa->type = FT_SYMLINK;
192 fa->type = FT_UNKNOWN;
194 fa->mask = FA_FILETYPE | fattr_supported(fa->type);
195 if (fa->mask & FA_MODTIME)
196 fa->modtime = sb->st_mtime;
197 if (fa->mask & FA_SIZE)
198 fa->size = sb->st_size;
199 if (fa->mask & FA_RDEV)
200 fa->rdev = sb->st_rdev;
201 if (fa->mask & FA_OWNER)
202 fa->uid = sb->st_uid;
203 if (fa->mask & FA_GROUP)
204 fa->gid = sb->st_gid;
205 if (fa->mask & FA_MODE)
206 fa->mode = sb->st_mode & (FA_SETIDMASK | FA_PERMMASK);
208 if (fa->mask & FA_FLAGS)
209 fa->flags = sb->st_flags;
211 if (fa->mask & FA_LINKCOUNT)
212 fa->linkcount = sb->st_nlink;
213 if (fa->mask & FA_DEV)
214 fa->dev = sb->st_dev;
215 if (fa->mask & FA_INODE)
216 fa->inode = sb->st_ino;
217 return (fa);
223 struct fattr *fa;
233 fa = fattr_fromstat(&sb);
234 if (fa->mask & FA_LINKTARGET) {
239 fattr_free(fa);
243 fattr_free(fa);
248 fa->linktarget = xstrdup(buf);
250 return (fa);
256 struct fattr *fa;
263 fa = fattr_fromstat(&sb);
264 return (fa);
268 fattr_type(const struct fattr *fa)
271 return (fa->type);
278 struct fattr *fa;
281 fa = fattr_new(FT_UNKNOWN, -1);
282 next = fattr_scanattr(fa, FA_MASK, attr);
283 if (next == NULL || (fa->mask & ~FA_MASK) > 0)
285 if (fa->mask & FA_FILETYPE) {
286 next = fattr_scanattr(fa, FA_FILETYPE, next);
289 if (fa->type < 0 || fa->type > FT_MAX)
290 fa->type = FT_UNKNOWN;
293 fa->mask |= FA_FILETYPE;
294 fa->type = FT_UNKNOWN;
296 fa->mask = fa->mask & fattr_supported(fa->type);
297 if (fa->mask & FA_MODTIME)
298 next = fattr_scanattr(fa, FA_MODTIME, next);
299 if (fa->mask & FA_SIZE)
300 next = fattr_scanattr(fa, FA_SIZE, next);
301 if (fa->mask & FA_LINKTARGET)
302 next = fattr_scanattr(fa, FA_LINKTARGET, next);
303 if (fa->mask & FA_RDEV)
304 next = fattr_scanattr(fa, FA_RDEV, next);
305 if (fa->mask & FA_OWNER)
306 next = fattr_scanattr(fa, FA_OWNER, next);
307 if (fa->mask & FA_GROUP)
308 next = fattr_scanattr(fa, FA_GROUP, next);
309 if (fa->mask & FA_MODE)
310 next = fattr_scanattr(fa, FA_MODE, next);
311 if (fa->mask & FA_FLAGS)
312 next = fattr_scanattr(fa, FA_FLAGS, next);
313 if (fa->mask & FA_LINKCOUNT) {
314 next = fattr_scanattr(fa, FA_LINKCOUNT, next);
315 } else if (fattr_supported(fa->type) & FA_LINKCOUNT) {
317 fa->mask |= FA_LINKCOUNT;
318 fa->linkcount = 1;
320 if (fa->mask & FA_DEV)
321 next = fattr_scanattr(fa, FA_DEV, next);
322 if (fa->mask & FA_INODE)
323 next = fattr_scanattr(fa, FA_INODE, next);
326 return (fa);
328 fattr_free(fa);
333 fattr_encode(const struct fattr *fa, fattr_support_t support, int ignore)
349 mask = fa->mask;
351 mask = fa->mask & support[fa->type];
353 if (fa->mask & FA_OWNER) {
354 username = getuserbyid(fa->uid);
358 if (fa->mask & FA_GROUP) {
359 groupname = getgroupbyid(fa->gid);
363 if (fa->mask & FA_LINKCOUNT && fa->linkcount == 1)
375 "%d", fa->type);
382 "%lld", (long long)fa->modtime);
389 "%lld", (long long)fa->size);
395 vallen = strlen(fa->linktarget);
397 piece->ext = fa->linktarget;
404 "%lld", (long long)fa->rdev);
430 mode = fa->mode & modemask;
439 (long long)fa->flags);
446 (long long)fa->linkcount);
453 (long long)fa->dev);
460 (long long)fa->inode);
485 struct fattr *fa;
487 fa = fattr_new(FT_UNKNOWN, -1);
488 fattr_override(fa, from, FA_MASK);
489 return (fa);
493 fattr_free(struct fattr *fa)
496 if (fa == NULL)
498 if (fa->linktarget != NULL)
499 free(fa->linktarget);
500 free(fa);
504 fattr_umask(struct fattr *fa, mode_t newumask)
507 if (fa->mask & FA_MODE)
508 fa->mode = fa->mode & ~newumask;
512 fattr_maskout(struct fattr *fa, int mask)
516 if (mask & FA_LINKTARGET && fa->mask & FA_LINKTARGET) {
517 free(fa->linktarget);
518 fa->linktarget = NULL;
520 fa->mask &= ~mask;
524 fattr_getmask(const struct fattr *fa)
527 return (fa->mask);
531 fattr_getlinkcount(const struct fattr *fa)
534 return (fa->linkcount);
538 fattr_getlinktarget(const struct fattr *fa)
541 return (fa->linktarget);
558 fattr_scanattr(struct fattr *fa, int type, const char *attr)
582 fa->mask = (int)strtol(attrstart, &end, FA_MASKRADIX);
588 fa->type = (int)strtol(attrstart, &end, FA_FILETYPERADIX);
594 fa->modtime = (time_t)strtoll(attrstart, &end, FA_MODTIMERADIX);
600 fa->size = (off_t)strtoll(attrstart, &end, FA_SIZERADIX);
605 fa->linktarget = xstrdup(attrstart);
609 fa->rdev = (dev_t)strtoll(attrstart, &end, FA_RDEVRADIX);
614 error = getuidbyname(attrstart, &fa->uid);
616 fa->mask &= ~FA_OWNER;
619 error = getgidbyname(attrstart, &fa->gid);
621 fa->mask &= ~FA_GROUP;
625 fa->mode = (mode_t)strtol(attrstart, &end, FA_MODERADIX);
628 if (fa->mask & FA_OWNER && fa->mask & FA_GROUP)
632 fa->mode &= modemask;
636 fa->flags = (fflags_t)strtoul(attrstart, &end, FA_FLAGSRADIX);
642 fa->linkcount = (nlink_t)strtol(attrstart, &end, FA_FLAGSRADIX);
648 fa->dev = (dev_t)strtoll(attrstart, &end, FA_DEVRADIX);
654 fa->inode = (ino_t)strtoll(attrstart, &end, FA_INODERADIX);
670 struct fattr *fa;
672 fa = fattr_new(FT_FILE, -1);
675 fa->mode = 0777;
677 fa->mode = 0666;
678 fa->mode &= ~mask;
679 fa->mask |= FA_MODE;
681 return (fa);
684 /* Merge attributes from "from" that aren't present in "fa". */
686 fattr_merge(struct fattr *fa, const struct fattr *from)
689 fattr_override(fa, from, from->mask & ~fa->mask);
694 fattr_mergedefault(struct fattr *fa)
697 fattr_merge(fa, defaults[fa->type]);
700 /* Override selected attributes of "fa" with values from "from". */
702 fattr_override(struct fattr *fa, const struct fattr *from, int mask)
706 if (fa->mask & FA_LINKTARGET && mask & FA_LINKTARGET)
707 free(fa->linktarget);
708 fa->mask |= mask;
710 fa->type = from->type;
712 fa->modtime = from->modtime;
714 fa->size = from->size;
716 fa->linktarget = xstrdup(from->linktarget);
718 fa->rdev = from->rdev;
720 fa->uid = from->uid;
722 fa->gid = from->gid;
724 fa->mode = from->mode;
726 fa->flags = from->flags;
728 fa->linkcount = from->linkcount;
730 fa->dev = from->dev;
732 fa->inode = from->inode;
737 fattr_makenode(const struct fattr *fa, const char *path)
744 if (fa->mask & FA_OWNER && fa->mask & FA_GROUP)
750 if (fa->mask & FA_MODE)
751 mode = fa->mode & modemask;
755 if (fa->type == FT_DIRECTORY)
757 else if (fa->type == FT_SYMLINK) {
758 error = symlink(fa->linktarget, path);
759 } else if (fa->type == FT_CDEV) {
761 } else if (fa->type == FT_BDEV) {
770 struct fattr *fa;
773 fa = fattr_frompath(path, FATTR_NOFOLLOW);
774 if (fa == NULL) {
782 if (fa->mask & FA_FLAGS && fa->flags != 0) {
783 fa->flags = 0;
784 (void)chflags(path, fa->flags);
788 if (fa->type == FT_DIRECTORY)
792 fattr_free(fa);
802 fattr_install(struct fattr *fa, const char *topath, const char *frompath)
811 mask = fa->mask & fattr_supported(fa->type);
825 if (inplace && fattr_equal(fa, old)) {
847 if (inplace && (fa->type == FT_SYMLINK) &&
852 error = symlink(fa->linktarget, topath);
857 if (!inplace && (fa->type == FT_DIRECTORY) !=
872 tv[1].tv_sec = fa->modtime; /* Modification time. */
882 uid = fa->uid;
884 gid = fa->gid;
891 newmode = fa->mode & modemask;
911 (void)chflags(topath, fa->flags);
978 fattr_filesize(const struct fattr *fa)
980 return (fa->size);