summaryrefslogtreecommitdiff
path: root/src/lib9/tempdir_unix.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2013-03-06 15:48:28 -0500
committerRuss Cox <rsc@golang.org>2013-03-06 15:48:28 -0500
commit7610a0552fcd5ef3ed75c0e931275d2e7cdb9eaf (patch)
tree9e714b05326eb50aedc8ecaeb58b8edc8c35ffed /src/lib9/tempdir_unix.c
parentc76379954f57399b2e84528ac369f5cb07698acf (diff)
downloadgo-git-7610a0552fcd5ef3ed75c0e931275d2e7cdb9eaf.tar.gz
lib9: add mktempdir, removeall, runprog
R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/7523043
Diffstat (limited to 'src/lib9/tempdir_unix.c')
-rw-r--r--src/lib9/tempdir_unix.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/lib9/tempdir_unix.c b/src/lib9/tempdir_unix.c
new file mode 100644
index 0000000000..7b7e58b4d0
--- /dev/null
+++ b/src/lib9/tempdir_unix.c
@@ -0,0 +1,52 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build darwin freebsd linux netbsd openbsd
+
+#include <u.h>
+#include <dirent.h>
+#include <sys/stat.h>
+#define NOPLAN9DEFINES
+#include <libc.h>
+
+char*
+mktempdir(void)
+{
+ char *tmp, *p;
+
+ tmp = getenv("TMPDIR");
+ if(tmp == nil)
+ tmp = "/var/tmp";
+ p = smprint("%s/go-link-XXXXXX", tmp);
+ if(mkdtemp(p) == nil)
+ return nil;
+ return p;
+}
+
+void
+removeall(char *p)
+{
+ DIR *d;
+ struct dirent *dp;
+ char *q;
+ struct stat st;
+
+ if(stat(p, &st) < 0)
+ return;
+ if(!S_ISDIR(st.st_mode)) {
+ unlink(p);
+ return;
+ }
+
+ d = opendir(p);
+ while((dp = readdir(d)) != nil) {
+ if(strcmp(dp->d_name, ".") == 0 || strcmp(dp->d_name, "..") == 0)
+ continue;
+ q = smprint("%s/%s", p, dp->d_name);
+ removeall(q);
+ free(q);
+ }
+ closedir(d);
+ rmdir(p);
+}