1 #include <stdlib.h> 2 #include <unistd.h> 3 #include <string.h> 4 #include "sys9.h" 5 #undef OPEN 6 #include "../stdio/iolib.h" 7 #include "lib.h" 8 #include "dir.h" 9 10 FILE * tmpfile(void)11tmpfile(void){ 12 FILE *f; 13 static char name[]="/tmp/tf0000000000000"; 14 char *p; 15 int n; 16 for(f=_IO_stream;f!=&_IO_stream[FOPEN_MAX];f++) 17 if(f->state==CLOSED) 18 break; 19 if(f==&_IO_stream[FOPEN_MAX]) 20 return NULL; 21 while(access(name, 0) >= 0){ 22 p = name+7; 23 while(*p == '9') 24 *p++ = '0'; 25 if(*p == '\0') 26 return NULL; 27 ++*p; 28 } 29 n = _CREATE(name, 64|2, 0777); /* remove-on-close */ 30 if(n==-1){ 31 _syserrno(); 32 return NULL; 33 } 34 _fdinfo[n].flags = FD_ISOPEN; 35 _fdinfo[n].oflags = 2; 36 f->fd=n; 37 f->flags=0; 38 f->state=OPEN; 39 f->buf=0; 40 f->rp=0; 41 f->wp=0; 42 f->lp=0; 43 return f; 44 } 45