mirror of
https://github.com/golang/go
synced 2024-11-19 23:14:47 -07:00
dc7daa550a
Before, an empty TMPDIR would lead to: cannot create <nil>/go.o: No such file or directory R=golang-dev, iant, dave, bradfitz CC=golang-dev https://golang.org/cl/8355045
53 lines
920 B
C
53 lines
920 B
C
// 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 || strlen(tmp) == 0)
|
|
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);
|
|
}
|