Lines Matching refs:f

71 	reg Sfio_t*	f;  in _sfcleanup()  local
75 f = (Sfio_t*)Version; /* shut compiler warning */ in _sfcleanup()
84 { if(!(f = p->sf[n]) || SFFROZEN(f) ) in _sfcleanup()
87 SFLOCK(f,0); in _sfcleanup()
88 SFMTXLOCK(f); in _sfcleanup()
91 (void)SFRAISE(f, SF_ATEXIT, NIL(Void_t*)); in _sfcleanup()
93 if(f->flags&SF_STRING) in _sfcleanup()
97 pool = f->mode&SF_POOL; in _sfcleanup()
98 f->mode &= ~SF_POOL; in _sfcleanup()
99 if((f->flags&SF_WRITE) && !(f->mode&SF_WRITE)) in _sfcleanup()
100 (void)_sfmode(f,SF_WRITE,1); in _sfcleanup()
101 if(((f->bits&SF_MMAP) && f->data) || in _sfcleanup()
102 ((f->mode&SF_WRITE) && f->next == f->data) ) in _sfcleanup()
103 (void)SFSETBUF(f,NIL(Void_t*),0); in _sfcleanup()
104 f->mode |= pool; in _sfcleanup()
106 SFMTXUNLOCK(f); in _sfcleanup()
107 SFOPEN(f,0); in _sfcleanup()
114 int _sfsetpool(Sfio_t* f) in _sfsetpool() argument
116 int _sfsetpool(f) in _sfsetpool()
117 Sfio_t* f; in _sfsetpool()
129 if(!(p = f->pool) )
130 p = f->pool = &_Sfpool;
159 p->sf[p->n_sf++] = f;
168 Sfrsrv_t* _sfrsrv(reg Sfio_t* f, reg ssize_t size) in _sfrsrv() argument
170 Sfrsrv_t* _sfrsrv(f,size) in _sfrsrv()
171 reg Sfio_t* f; in _sfrsrv()
179 if(!(rsrv = f->rsrv) || size > rsrv->size)
188 f->rsrv = rsrv = rs;
213 int _sfpopen(reg Sfio_t* f, int fd, int pid, int stdio) in _sfpopen() argument
215 int _sfpopen(f, fd, pid, stdio) in _sfpopen()
216 reg Sfio_t* f; in _sfpopen()
224 if(f->proc)
227 if(!(p = f->proc = (Sfproc_t*)malloc(sizeof(Sfproc_t))) )
234 p->sigp = (!stdio && pid >= 0 && (f->flags&SF_WRITE)) ? 1 : 0;
253 int _sfpclose(reg Sfio_t* f) in _sfpclose() argument
255 int _sfpclose(f) in _sfpclose()
256 reg Sfio_t* f; /* stream to close */ in _sfpclose()
262 if(!(p = f->proc))
264 f->proc = NIL(Sfproc_t*);
306 static int _sfpmode(Sfio_t* f, int type) in _sfpmode() argument
308 static int _sfpmode(f,type) in _sfpmode()
309 Sfio_t* f; in _sfpmode()
315 if(!(p = f->proc) )
320 p->ndata = f->endb-f->next;
332 memcpy((Void_t*)p->rdata,(Void_t*)f->next,p->ndata);
333 f->endb = f->data;
337 if(p->ndata > f->size) /* may lose data!!! */
338 p->ndata = f->size;
340 { memcpy((Void_t*)f->data,(Void_t*)p->rdata,p->ndata);
341 f->endb = f->data+p->ndata;
348 { type = f->file;
349 f->file = p->file;
357 int _sfmode(reg Sfio_t* f, reg int wanted, reg int local) in _sfmode() argument
359 int _sfmode(f, wanted, local) in _sfmode()
360 reg Sfio_t* f; /* change r/w mode and sync file pointer for this stream */ in _sfmode()
373 if((f->mode&(SF_SYNCED|SF_READ)) == (SF_SYNCED|SF_READ) )
374 { f->next = f->endb = f->endr = f->data;
375 f->mode &= ~SF_SYNCED;
379 if((!local && SFFROZEN(f)) || (!(f->flags&SF_STRING) && f->file < 0))
380 { if(local || !f->disc || !f->disc->exceptf)
386 { if((rv = (*f->disc->exceptf)(f,SF_LOCKED,0,f->disc)) < 0)
388 if((!local && SFFROZEN(f)) ||
389 (!(f->flags&SF_STRING) && f->file < 0) )
400 if(f->mode&SF_GETR)
401 { f->mode &= ~SF_GETR;
403 if((f->bits&SF_MMAP) && (f->tiny[0] += 1) >= (4*SF_NMAP) )
405 sfsetbuf(f,(Void_t*)f->tiny,(size_t)SF_UNBOUND);
406 f->tiny[0] = 0;
410 if(f->getr)
411 { f->next[-1] = f->getr;
412 f->getr = 0;
416 if(f->mode&SF_STDIO) /* synchronizing with stdio pointers */
417 (*_Sfstdsync)(f);
419 if(f->disc == _Sfudisc && wanted == SF_WRITE &&
420 sfclose((*_Sfstack)(f,NIL(Sfio_t*))) < 0 )
425 if(f->mode&SF_POOL)
427 if(f == f->pool->sf[0] || (*_Sfpmove)(f,0) < 0 )
431 f->mode &= ~SF_POOL;
434 SFLOCK(f,local);
438 if(f->mode&SF_INIT)
440 if(!f->pool && _sfsetpool(f) < 0)
448 if(wanted != (int)(f->mode&SF_RDWR) && !(f->flags&wanted) )
451 if((f->flags&SF_STRING) && f->size >= 0 && f->data)
452 { f->mode &= ~SF_INIT;
453 f->extent = ((f->flags&SF_READ) || (f->bits&SF_BOTH)) ?
454 f->size : 0;
455 f->here = 0;
456 f->endb = f->data + f->size;
457 f->next = f->endr = f->endw = f->data;
458 if(f->mode&SF_READ)
459 f->endr = f->endb;
460 else f->endw = f->endb;
463 { n = f->flags;
464 (void)SFSETBUF(f,f->data,f->size);
465 f->flags |= (n&SF_MALLOC);
469 if(wanted == (int)SFMODE(f,1))
472 switch(SFMODE(f,1))
477 if(!(f->flags&SF_READ) )
479 else if(f->flags&SF_STRING)
480 { SFSTRSIZE(f);
481 f->endb = f->data+f->extent;
482 f->mode = SF_READ;
487 if(f->next > f->data && SFFLSBUF(f,-1) < 0)
490 if(f->size == 0)
492 f->data = f->tiny;
493 f->size = sizeof(f->tiny);
495 f->next = f->endr = f->endw = f->endb = f->data;
496 f->mode = SF_READ|SF_LOCK;
499 if(f->proc && _sfpmode(f,wanted) < 0)
507 f->mode = SF_READ|SF_LOCK;
510 if((f->flags&(SF_SHARE|SF_PUBLIC)) == (SF_SHARE|SF_PUBLIC) &&
511 (addr = SFSK(f,0,SEEK_CUR,f->disc)) != f->here)
514 if((f->bits&SF_MMAP) && f->data)
515 { SFMUNMAP(f,f->data,f->endb-f->data);
516 f->data = NIL(uchar*);
519 f->endb = f->endr = f->endw = f->next = f->data;
520 f->here = addr;
523 { addr = f->here + (f->endb - f->next);
524 if(SFSK(f,addr,SEEK_SET,f->disc) < 0)
526 f->here = addr;
536 else if(!(f->flags&SF_WRITE))
538 else if(f->flags&SF_STRING)
539 { f->endb = f->data+f->size;
540 f->mode = SF_WRITE|SF_LOCK;
545 if(f->proc && _sfpmode(f,wanted) < 0)
549 if(!(f->mode&SF_SYNCED) )
550 { n = f->endb - f->next;
551 if(f->extent >= 0 && (n > 0 || (f->data && (f->bits&SF_MMAP))) )
553 addr = f->here - n;
554 if(SFSK(f,addr,SEEK_SET,f->disc) < 0)
556 f->here = addr;
560 f->mode = SF_WRITE|SF_LOCK;
562 if(f->bits&SF_MMAP)
563 { if(f->data)
564 SFMUNMAP(f,f->data,f->endb-f->data);
565 (void)SFSETBUF(f,(Void_t*)f->tiny,(size_t)SF_UNBOUND);
568 if(f->data == f->tiny)
569 { f->endb = f->data = f->next = NIL(uchar*);
570 f->size = 0;
572 else f->endb = (f->next = f->data) + f->size;
578 if((wanted &= SF_RDWR) == 0 && (wanted = f->flags&SF_RDWR) == SF_RDWR)
582 if(wanted != (f->mode&SF_RDWR) && f->file >= 0)
586 (*_Sfnotify)(f, wanted, (void*)((long)f->file));
593 SFOPEN(f,local);