[Libguestfs] [PATCH 2/3] lib: extract lazy tmpdir creation helper

Pino Toscano ptoscano at redhat.com
Tue Feb 2 14:27:40 UTC 2016


Extract the bit of code for lazy creation of a temporary directory, so
it can be used for more directories as well.

This is just code motion, with no behaviour changes.
---
 src/tmpdirs.c | 28 +++++++++++++++++-----------
 1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/src/tmpdirs.c b/src/tmpdirs.c
index 9154d8b..2ae9c74 100644
--- a/src/tmpdirs.c
+++ b/src/tmpdirs.c
@@ -119,6 +119,22 @@ guestfs_impl_get_cachedir (guestfs_h *g)
   return safe_strdup (g, str);
 }
 
+static int
+lazy_make_tmpdir (guestfs_h *g, char *(*getdir) (guestfs_h *g), char **dest)
+{
+  if (!*dest) {
+    CLEANUP_FREE char *tmpdir = getdir (g);
+    char *tmppath = safe_asprintf (g, "%s/libguestfsXXXXXX", tmpdir);
+    if (mkdtemp (tmppath) == NULL) {
+      perrorf (g, _("%s: cannot create temporary directory"), tmppath);
+      free (tmpdir);
+      return -1;
+    }
+    *dest = tmppath;
+  }
+  return 0;
+}
+
 /* The g->tmpdir (per-handle temporary directory) is not created when
  * the handle is created.  Instead we create it lazily before the
  * first time it is used, or during launch.
@@ -126,17 +142,7 @@ guestfs_impl_get_cachedir (guestfs_h *g)
 int
 guestfs_int_lazy_make_tmpdir (guestfs_h *g)
 {
-  if (!g->tmpdir) {
-    CLEANUP_FREE char *tmpdir = guestfs_get_tmpdir (g);
-    g->tmpdir = safe_asprintf (g, "%s/libguestfsXXXXXX", tmpdir);
-    if (mkdtemp (g->tmpdir) == NULL) {
-      perrorf (g, _("%s: cannot create temporary directory"), g->tmpdir);
-      free (g->tmpdir);
-      g->tmpdir = NULL;
-      return -1;
-    }
-  }
-  return 0;
+  return lazy_make_tmpdir (g, guestfs_get_tmpdir, &g->tmpdir);
 }
 
 /* Recursively remove a temporary directory.  If removal fails, just
-- 
2.5.0




More information about the Libguestfs mailing list