diff options
author | Michael Stapelberg <michael@stapelberg.de> | 2013-03-23 11:28:53 +0100 |
---|---|---|
committer | Michael Stapelberg <michael@stapelberg.de> | 2013-03-23 11:28:53 +0100 |
commit | b39e15dde5ec7b96c15da9faf4ab5892501c1aae (patch) | |
tree | 718cede1f6ca97d082c6c40b7dc3f4f6148253c0 /src/lib9/tempdir_unix.c | |
parent | 04b08da9af0c450d645ab7389d1467308cfc2db8 (diff) | |
download | golang-upstream/1.1_hg20130323.tar.gz |
Imported Upstream version 1.1~hg20130323upstream/1.1_hg20130323
Diffstat (limited to 'src/lib9/tempdir_unix.c')
-rw-r--r-- | src/lib9/tempdir_unix.c | 52 |
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 000000000..7b7e58b4d --- /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); +} |