github.com/bgentry/go@v0.0.0-20150121062915-6cf5a733d54d/src/lib9/tempdir_plan9.c (about) 1 // Copyright 2013 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // +build plan9 6 7 #include <u.h> 8 #include <libc.h> 9 10 char* 11 mktempdir(void) 12 { 13 char *p; 14 int fd, i; 15 16 p = smprint("/tmp/go-link-XXXXXX"); 17 for(i=0; i<1000; i++) { 18 sprint(p, "/tmp/go-link-%06x", nrand((1<<24)-1)); 19 fd = create(p, OREAD|OEXCL, 0700|DMDIR); 20 if(fd >= 0) { 21 close(fd); 22 return p; 23 } 24 } 25 free(p); 26 return nil; 27 } 28 29 void 30 removeall(char *p) 31 { 32 int fd, n, i; 33 Dir *d; 34 char *q; 35 36 if(remove(p) >= 0) 37 return; 38 if((d = dirstat(p)) == nil) 39 return; 40 if(!(d->mode & DMDIR)) { 41 free(d); 42 return; 43 } 44 free(d); 45 46 if((fd = open(p, OREAD)) < 0) 47 return; 48 n = dirreadall(fd, &d); 49 close(fd); 50 for(i=0; i<n; i++) { 51 q = smprint("%s/%s", p, d[i].name); 52 removeall(q); 53 free(q); 54 } 55 free(d); 56 }