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 * 11 tmpfile(void){ 12 FILE *f; 13 static char name[]="/tmp/tf0000000000000"; 14 char *p; 15 char db[DIRLEN]; 16 int n; 17 for(f=_IO_stream;f!=&_IO_stream[FOPEN_MAX];f++) 18 if(f->state==CLOSED) 19 break; 20 if(f==&_IO_stream[FOPEN_MAX]) 21 return NULL; 22 while(_STAT(name, db) >= 0){ 23 p = name+7; 24 while(*p == '9') 25 *p++ = '0'; 26 if(*p == '\0') 27 return NULL; 28 ++*p; 29 } 30 n = _CREATE(name, 64|2, 0777); /* remove-on-close */ 31 if(n==-1){ 32 _syserrno(); 33 return NULL; 34 } 35 _fdinfo[n].flags = FD_ISOPEN; 36 _fdinfo[n].oflags = 2; 37 f->fd=n; 38 f->flags=0; 39 f->state=OPEN; 40 f->buf=0; 41 f->rp=0; 42 f->wp=0; 43 f->lp=0; 44 return f; 45 } 46