X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2Flibadacl.c;h=36812e8af3dd18a4dbfd96f7c7b769865d90298d;hb=ee4b602d26225bb5a548eaeb7bd570adaa48721a;hp=22f5d7b3ad900dbcc5f8bb9c01d90e62bb897a96;hpb=2968629aa21aa275e09e19128bf2e36fe82096ad;p=apply-default-acl.git diff --git a/src/libadacl.c b/src/libadacl.c index 22f5d7b..36812e8 100644 --- a/src/libadacl.c +++ b/src/libadacl.c @@ -170,25 +170,24 @@ int safe_open(const char* pathname, int flags) { return OPEN_ERROR; } - int fd = 0; - if (strcmp(abspath, "/") == 0) { - fd = open("/", flags | O_DIRECTORY); - } - else { + bool abspath_is_root = (strcmp(abspath, "/") == 0); + int rootflags = flags | O_DIRECTORY; + if (!abspath_is_root) { /* Use O_PATH for some added safety if "/" is not our target */ - fd = open("/", flags | O_DIRECTORY | O_PATH); + rootflags |= O_PATH; } - if (fd == OPEN_ERROR) { + int rootfd = open("/", rootflags); + if (rootfd == OPEN_ERROR) { perror("safe_open (open)"); return OPEN_ERROR; } - if (strcmp(abspath, "/") == 0) { - return fd; + if (abspath_is_root) { + return rootfd; } - int result = safe_open_ex(fd, abspath+1, flags); - if (close(fd) == CLOSE_ERROR) { + int result = safe_open_ex(rootfd, abspath+1, flags); + if (close(rootfd) == CLOSE_ERROR) { perror("safe_open (close)"); return OPEN_ERROR; } @@ -567,7 +566,7 @@ int acl_copy_xattr(int src_fd, return ACL_ERROR; } - size_t src_size_guess = fgetxattr(src_fd, src_name, NULL, 0); + ssize_t src_size_guess = fgetxattr(src_fd, src_name, NULL, 0); if (src_size_guess == XATTR_ERROR) { if (errno == ENODATA) { /* A missing ACL isn't really an error. ENOATTR and ENODATA are @@ -580,7 +579,7 @@ int acl_copy_xattr(int src_fd, } char* src_acl_p = alloca(src_size_guess); /* The actual size may be smaller than our guess? I don't know. */ - size_t src_size = fgetxattr(src_fd, src_name, src_acl_p, (int)src_size_guess); + ssize_t src_size = fgetxattr(src_fd, src_name, src_acl_p, src_size_guess); if (src_size == XATTR_ERROR) { if (errno == ENODATA) { /* A missing ACL isn't an error. */