summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2009-06-24 18:22:37 +0100
committerRichard W.M. Jones <rjones@redhat.com>2009-06-24 18:22:37 +0100
commit8228eec99045ae720d8ef35851aa8c278f6b4e5c (patch)
treed3a6f405b526bc5865ca86fc81e8cf3c135a17f5
parentaf0cfda7e4942c14c9db7304962f8471ccad170f (diff)
downloadlibguestfs-8228eec99045ae720d8ef35851aa8c278f6b4e5c.tar.gz
libguestfs-8228eec99045ae720d8ef35851aa8c278f6b4e5c.tar.xz
libguestfs-8228eec99045ae720d8ef35851aa8c278f6b4e5c.zip
Add mkdtemp command.
-rw-r--r--daemon/dir.c30
-rwxr-xr-xsrc/generator.ml22
2 files changed, 52 insertions, 0 deletions
diff --git a/daemon/dir.c b/daemon/dir.c
index 83536ef5..753323d1 100644
--- a/daemon/dir.c
+++ b/daemon/dir.c
@@ -201,3 +201,33 @@ do_is_dir (char *path)
return S_ISDIR (buf.st_mode);
}
+
+char *
+do_mkdtemp (char *template)
+{
+ char *r;
+
+ NEED_ROOT (NULL);
+ ABS_PATH (template, NULL);
+
+ CHROOT_IN;
+ r = mkdtemp (template);
+ CHROOT_OUT;
+
+ if (r == NULL) {
+ reply_with_perror ("mkdtemp: %s", template);
+ return NULL;
+ }
+
+ /* The caller will free template AND try to free the return value,
+ * so we must make a copy here.
+ */
+ if (r == template) {
+ r = strdup (template);
+ if (r == NULL) {
+ reply_with_perror ("strdup");
+ return NULL;
+ }
+ }
+ return r;
+}
diff --git a/src/generator.ml b/src/generator.ml
index 51d32357..e378395a 100755
--- a/src/generator.ml
+++ b/src/generator.ml
@@ -2442,6 +2442,28 @@ containing C<dir>.
It is an interface to the L<scrub(1)> program. See that
manual page for more details.");
+ ("mkdtemp", (RString "dir", [String "template"]), 117, [],
+ [InitBasicFS, Always, TestRun (
+ [["mkdir"; "/tmp"];
+ ["mkdtemp"; "/tmp/tmpXXXXXX"]])],
+ "create a temporary directory",
+ "\
+This command creates a temporary directory. The
+C<template> parameter should be a full pathname for the
+temporary directory with the six characters being
+\"XXXXXX\".
+
+For example: \"/tmp/tmpXXXXXX\" or \"/Temp/tmpXXXXXX\",
+the second one being suitable for Windows.
+
+The name of the temporary directory that was created
+is returned.
+
+The caller is responsible for deleting the temporary
+directory and its contents after use.
+
+See also: L<mkdtemp(3)>");
+
]
let all_functions = non_daemon_functions @ daemon_functions