static ssize_t xattr_fremovexattr(int fd, const char *name, int options) { if (!(options == 0 || options == XATTR_XATTR_NOFOLLOW)) { return -1; } if (options & XATTR_XATTR_NOFOLLOW) { return -1; } else { return extattr_delete_fd(fd, EXTATTR_NAMESPACE_USER, name); } }
int ceph_os_fremovexattr(int fd, const char *name) { int error = -1; #if defined(__FreeBSD__) error = extattr_delete_fd(fd, EXTATTR_NAMESPACE_USER, name); #elif defined(__linux__) error = fremovexattr(fd, name); #elif defined(DARWIN) error = fremovexattr(fd, name, 0); #endif return (error); }
int ceph_os_fremovexattr(int fd, const char *name) { int error = -1; #if defined(__FreeBSD__) error = extattr_delete_fd(fd, EXTATTR_NAMESPACE_USER, name); #elif defined(__linux__) error = fremovexattr(fd, name); #elif defined(DARWIN) error = fremovexattr(fd, name, 0); /* ENOATTR and ENODATA have different values */ if (error < 0 && errno == ENOATTR) errno = ENODATA; #endif return (error); }
int rep_fremovexattr (int filedes, const char *name) { #if defined(HAVE_FREMOVEXATTR) #ifndef XATTR_ADDITIONAL_OPTIONS return fremovexattr(filedes, name); #else /* So that we do not recursivly call this function */ #undef fremovexattr int options = 0; return fremovexattr(filedes, name, options); #endif #elif defined(HAVE_FREMOVEEA) return fremoveea(filedes, name); #elif defined(HAVE_EXTATTR_DELETE_FD) char *s; int attrnamespace = (strncmp(name, "system", 6) == 0) ? EXTATTR_NAMESPACE_SYSTEM : EXTATTR_NAMESPACE_USER; const char *attrname = ((s=strchr(name, '.')) == NULL) ? name : s + 1; return extattr_delete_fd(filedes, attrnamespace, attrname); #elif defined(HAVE_ATTR_REMOVEF) int flags = 0; char *attrname = strchr(name,'.') + 1; if (strncmp(name, "system", 6) == 0) flags |= ATTR_ROOT; return attr_removef(filedes, attrname, flags); #elif defined(HAVE_ATTROPEN) int ret = -1; int attrdirfd = solaris_openat(filedes, ".", O_RDONLY|O_XATTR, 0); if (attrdirfd >= 0) { ret = solaris_unlinkat(attrdirfd, name); close(attrdirfd); } return ret; #else errno = ENOSYS; return -1; #endif }