]> gitweb.michael.orlitzky.com - apply-default-acl.git/blobdiff - src/libadacl.c
src/libadacl.c: minor code simplification in safe_open().
[apply-default-acl.git] / src / libadacl.c
index 22f5d7b3ad900dbcc5f8bb9c01d90e62bb897a96..36812e8af3dd18a4dbfd96f7c7b769865d90298d 100644 (file)
@@ -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. */