13e12c5d1SDavid du Colombier #include <stdlib.h> 23e12c5d1SDavid du Colombier #include <unistd.h> 33e12c5d1SDavid du Colombier #include <string.h> 43e12c5d1SDavid du Colombier #include "sys9.h" 53e12c5d1SDavid du Colombier #undef OPEN 63e12c5d1SDavid du Colombier #include "../stdio/iolib.h" 73e12c5d1SDavid du Colombier #include "lib.h" 8219b2ee8SDavid du Colombier #include "dir.h" 93e12c5d1SDavid du Colombier 103e12c5d1SDavid du Colombier FILE * tmpfile(void)113e12c5d1SDavid du Colombiertmpfile(void){ 123e12c5d1SDavid du Colombier FILE *f; 133e12c5d1SDavid du Colombier static char name[]="/tmp/tf0000000000000"; 143e12c5d1SDavid du Colombier char *p; 153e12c5d1SDavid du Colombier int n; 163e12c5d1SDavid du Colombier for(f=_IO_stream;f!=&_IO_stream[FOPEN_MAX];f++) 173e12c5d1SDavid du Colombier if(f->state==CLOSED) 183e12c5d1SDavid du Colombier break; 193e12c5d1SDavid du Colombier if(f==&_IO_stream[FOPEN_MAX]) 203e12c5d1SDavid du Colombier return NULL; 21*9a747e4fSDavid du Colombier while(access(name, 0) >= 0){ 223e12c5d1SDavid du Colombier p = name+7; 233e12c5d1SDavid du Colombier while(*p == '9') 243e12c5d1SDavid du Colombier *p++ = '0'; 253e12c5d1SDavid du Colombier if(*p == '\0') 263e12c5d1SDavid du Colombier return NULL; 273e12c5d1SDavid du Colombier ++*p; 283e12c5d1SDavid du Colombier } 293e12c5d1SDavid du Colombier n = _CREATE(name, 64|2, 0777); /* remove-on-close */ 303e12c5d1SDavid du Colombier if(n==-1){ 313e12c5d1SDavid du Colombier _syserrno(); 323e12c5d1SDavid du Colombier return NULL; 333e12c5d1SDavid du Colombier } 343e12c5d1SDavid du Colombier _fdinfo[n].flags = FD_ISOPEN; 353e12c5d1SDavid du Colombier _fdinfo[n].oflags = 2; 363e12c5d1SDavid du Colombier f->fd=n; 373e12c5d1SDavid du Colombier f->flags=0; 383e12c5d1SDavid du Colombier f->state=OPEN; 393e12c5d1SDavid du Colombier f->buf=0; 403e12c5d1SDavid du Colombier f->rp=0; 413e12c5d1SDavid du Colombier f->wp=0; 423e12c5d1SDavid du Colombier f->lp=0; 433e12c5d1SDavid du Colombier return f; 443e12c5d1SDavid du Colombier } 45