tree-wide: Use helpers for unlinkat()
authorColin Walters <walters@verbum.org>
Wed, 6 Sep 2017 15:37:02 +0000 (11:37 -0400)
committerAtomic Bot <atomic-devel@projectatomic.io>
Thu, 7 Sep 2017 16:45:48 +0000 (16:45 +0000)
We have `ot_ensure_unlinked_at()` for the "ignore ENOENT" case, and
`glnx_unlinkat()` otherwise. Port all in-tree callers to one or the other as
appropriate.

Just noticed an unprefixed error in the refs case and decided to do a tree-wide
check.

Closes: #1142
Approved by: jlebon

src/libostree/ostree-repo-checkout.c
src/libostree/ostree-repo-prune.c
src/libostree/ostree-repo-pull.c
src/libostree/ostree-repo-refs.c
src/libostree/ostree-repo.c
src/libotutil/ot-fs-utils.c

index 4fbbee7dc0e0a08ee6ad495f892cd67893129d82..dbdbf058bf9c8750e5829923a62157f52bbcbaba 100644 (file)
@@ -1121,11 +1121,8 @@ ostree_repo_checkout_gc (OstreeRepo        *self,
 
           if (stbuf.st_nlink == 1)
             {
-              if (unlinkat (dfd_iter.fd, dent->d_name, 0) != 0)
-                {
-                  glnx_set_error_from_errno (error);
-                  return FALSE;
-                }
+              if (!glnx_unlinkat (dfd_iter.fd, dent->d_name, 0, error))
+                return FALSE;
             }
         }
     }
index 2b596ecb365a2a76e6568ac890335420bb72e312..6ea899bc9173fe0f6cf45a2354ba831b474583dd 100644 (file)
@@ -43,13 +43,7 @@ prune_commitpartial_file (OstreeRepo    *repo,
                           GError       **error)
 {
   g_autofree char *path = _ostree_get_commitpartial_path (checksum);
-  if (unlinkat (repo->repo_dir_fd, path, 0) != 0)
-    {
-      if (errno != ENOENT)
-        return glnx_throw_errno_prefix (error, "unlinkat");
-    }
-
-  return TRUE;
+  return ot_ensure_unlinked_at (repo->repo_dir_fd, path, error);
 }
 
 static gboolean
@@ -147,8 +141,8 @@ _ostree_repo_prune_tmp (OstreeRepo *self,
           if (has_sig_suffix)
             dent->d_name[len - 4] = '.';
 
-          if (unlinkat (dfd_iter.fd, dent->d_name, 0) < 0)
-            return glnx_throw_errno_prefix (error, "unlinkat");
+          if (!glnx_unlinkat (dfd_iter.fd, dent->d_name, 0, error))
+            return FALSE;
         }
     }
 
index 98fb96b483d61c198a711e9d0d65decaac40fbaf..d233b384a37b3a063494747abc5de1e29c753d88 100644 (file)
@@ -1357,11 +1357,8 @@ static_deltapart_fetch_on_complete (GObject           *object,
     goto out;
 
   /* From here on, if we fail to apply the delta, we'll re-fetch it */
-  if (unlinkat (_ostree_fetcher_get_dfd (fetcher), temp_path, 0) < 0)
-    {
-      glnx_set_error_from_errno (error);
-      goto out;
-    }
+  if (!glnx_unlinkat (_ostree_fetcher_get_dfd (fetcher), temp_path, 0, error))
+    goto out;
 
   in = g_unix_input_stream_new (fd, FALSE);
 
index f8af3c43f999b0801a680ecddb4703ce2e934e3e..b9b008966cc40ca835017ad72ebc13560ac1f002 100644 (file)
@@ -1007,11 +1007,8 @@ _ostree_repo_write_ref (OstreeRepo                 *self,
     {
       if (dfd >= 0)
         {
-          if (unlinkat (dfd, ref->ref_name, 0) != 0)
-            {
-              if (errno != ENOENT)
-                return glnx_throw_errno (error);
-            }
+          if (!ot_ensure_unlinked_at (dfd, ref->ref_name, error))
+            return FALSE;
         }
     }
   else if (rev != NULL)
index 2226e8a54bb5195897738ca43f5d351f5c741ebe..e7807d119d67719bcb2d384e63ffe915fa0be76a 100644 (file)
@@ -3256,15 +3256,12 @@ ostree_repo_delete_object (OstreeRepo           *self,
 
       _ostree_loose_path (meta_loose, sha256, OSTREE_OBJECT_TYPE_COMMIT_META, self->mode);
 
-      if (TEMP_FAILURE_RETRY (unlinkat (self->objects_dir_fd, meta_loose, 0)) < 0)
-        {
-          if (G_UNLIKELY (errno != ENOENT))
-            return glnx_throw_errno_prefix (error, "unlinkat(%s)", meta_loose);
-        }
+      if (!ot_ensure_unlinked_at (self->objects_dir_fd, meta_loose, error))
+        return FALSE;
     }
 
-  if (TEMP_FAILURE_RETRY (unlinkat (self->objects_dir_fd, loose_path, 0)) < 0)
-    return glnx_throw_errno_prefix (error, "Deleting object %s.%s", sha256, ostree_object_type_to_string (objtype));
+  if (!glnx_unlinkat (self->objects_dir_fd, loose_path, 0, error))
+    return glnx_prefix_error (error, "Deleting object %s.%s", sha256, ostree_object_type_to_string (objtype));
 
   /* If the repository is configured to use tombstone commits, create one when deleting a commit.  */
   if (objtype == OSTREE_OBJECT_TYPE_COMMIT)
@@ -5036,11 +5033,8 @@ ostree_repo_regenerate_summary (OstreeRepo     *self,
                                            error))
     return FALSE;
 
-  if (unlinkat (self->repo_dir_fd, "summary.sig", 0) < 0)
-    {
-      if (errno != ENOENT)
-        return glnx_throw_errno_prefix (error, "unlinkat");
-    }
+  if (!ot_ensure_unlinked_at (self->repo_dir_fd, "summary.sig", error))
+    return FALSE;
 
   return TRUE;
 }
index 2f0ae19cbcfcc755f77c3f8f0b5cc076ceed5b22..9100b85b193659b68f8538ad1aeaf31d93c7d427 100644 (file)
@@ -90,6 +90,7 @@ ot_openat_read_stream (int             dfd,
   return TRUE;
 }
 
+/* Like unlinkat() but ignore ENOENT */
 gboolean
 ot_ensure_unlinked_at (int dfd,
                        const char *path,