int osx_attr_fsetattrlist (int fd, struct attrlist * attrList, void * attrBuf, size_t attrBufSize, unsigned long options) { int r; caml_release_runtime_system(); r = fsetattrlist(fd, attrList, attrBuf, attrBufSize, options); caml_acquire_runtime_system(); return r; }
static void clear_type_and_creator(int fd) { struct attrlist alist; struct { u_int32_t length; char info[32]; } abuf; memset(&alist, 0, sizeof(alist)); alist.bitmapcount = ATTR_BIT_MAP_COUNT; alist.commonattr = ATTR_CMN_FNDRINFO; if (!fgetattrlist(fd, &alist, &abuf, sizeof(abuf), 0) && abuf.length == sizeof(abuf)) { memset(abuf.info, 0, 8); fsetattrlist(fd, &alist, abuf.info, sizeof(abuf.info), 0); } }
static int loopback_fsetattr_x(const char *path, struct setattr_x *attr, struct fuse_file_info *fi) { int res; uid_t uid = -1; gid_t gid = -1; if (SETATTR_WANTS_MODE(attr)) { res = fchmod(fi->fh, attr->mode); if (res == -1) { return -errno; } } if (SETATTR_WANTS_UID(attr)) { uid = attr->uid; } if (SETATTR_WANTS_GID(attr)) { gid = attr->gid; } if ((uid != -1) || (gid != -1)) { res = fchown(fi->fh, uid, gid); if (res == -1) { return -errno; } } if (SETATTR_WANTS_SIZE(attr)) { res = ftruncate(fi->fh, attr->size); if (res == -1) { return -errno; } } if (SETATTR_WANTS_MODTIME(attr)) { struct timeval tv[2]; if (!SETATTR_WANTS_ACCTIME(attr)) { gettimeofday(&tv[0], NULL); } else { tv[0].tv_sec = attr->acctime.tv_sec; tv[0].tv_usec = attr->acctime.tv_nsec / 1000; } tv[1].tv_sec = attr->modtime.tv_sec; tv[1].tv_usec = attr->modtime.tv_nsec / 1000; res = futimes(fi->fh, tv); if (res == -1) { return -errno; } } if (SETATTR_WANTS_CRTIME(attr)) { struct attrlist attributes; attributes.bitmapcount = ATTR_BIT_MAP_COUNT; attributes.reserved = 0; attributes.commonattr = ATTR_CMN_CRTIME; attributes.dirattr = 0; attributes.fileattr = 0; attributes.forkattr = 0; attributes.volattr = 0; res = fsetattrlist(fi->fh, &attributes, &attr->crtime, sizeof(struct timespec), FSOPT_NOFOLLOW); if (res == -1) { return -errno; } } if (SETATTR_WANTS_CHGTIME(attr)) { struct attrlist attributes; attributes.bitmapcount = ATTR_BIT_MAP_COUNT; attributes.reserved = 0; attributes.commonattr = ATTR_CMN_CHGTIME; attributes.dirattr = 0; attributes.fileattr = 0; attributes.forkattr = 0; attributes.volattr = 0; res = fsetattrlist(fi->fh, &attributes, &attr->chgtime, sizeof(struct timespec), FSOPT_NOFOLLOW); if (res == -1) { return -errno; } } if (SETATTR_WANTS_BKUPTIME(attr)) { struct attrlist attributes; attributes.bitmapcount = ATTR_BIT_MAP_COUNT; attributes.reserved = 0; attributes.commonattr = ATTR_CMN_BKUPTIME; attributes.dirattr = 0; attributes.fileattr = 0; attributes.forkattr = 0; attributes.volattr = 0; res = fsetattrlist(fi->fh, &attributes, &attr->bkuptime, sizeof(struct timespec), FSOPT_NOFOLLOW); if (res == -1) { return -errno; } } if (SETATTR_WANTS_FLAGS(attr)) { res = fchflags(fi->fh, attr->flags); if (res == -1) { return -errno; } } return 0; }