Lines Matching refs:f

30 Void_t* sfreserve(Sfio_t* f, ssize_t size, int type)  in sfreserve()  argument
32 Void_t* sfreserve(f,size,type) in sfreserve()
33 Sfio_t* f; /* file to peek */ in sfreserve()
42 SFMTXDECL(f);
44 SFMTXENTER(f,NIL(Void_t*));
56 { if((n = f->endb - f->next) > 0 && n == f->val )
57 { data = (Void_t*)f->next;
58 f->next += n;
60 else if((rsrv = f->rsrv) && (n = -rsrv->slen) > 0)
62 _Sfi = f->val = n;
66 { _Sfi = f->val = -1;
70 SFMTXRETURN(f, data);
77 SFMTXRETURN(f, NIL(Void_t*));
81 { if((f->mode&SF_RDWR) != f->mode && _sfmode(f,0,0) < 0)
82 SFMTXRETURN(f, NIL(Void_t*));
84 SFLOCK(f,0);
85 if((n = f->endb - f->next) < 0)
93 { _Sfi = f->val = -1;
95 if(!mode && !(mode = f->flags&SF_READ) )
97 if((int)f->mode != mode && _sfmode(f,mode,local) < 0)
98 { SFOPEN(f,0);
99 SFMTXRETURN(f, NIL(Void_t*));
102 SFLOCK(f,local);
104 if((n = now = f->endb - f->next) < 0)
110 if(size == 0 || (f->mode&SF_WRITE))
112 else if(size < 0 && n == 0 && f->push) /* maybe stack-pop */
113 { if((iosz = f->push->endb - f->push->next) == 0)
114 iosz = f->push->size;
120 if(size < 0 && iosz < (f->size - n) )
121 iosz = f->size - n; /* get as much as possible */
128 if(f->mode&SF_WRITE)
129 (void)SFFLSBUF(f, iosz);
130 else if(type == SF_LOCKR && f->extent < 0 && (f->flags&SF_SHARE) )
132 { f->mode |= SF_RV;
133 (void)SFFILBUF(f, iosz );
135 if((n = f->endb - f->next) < sz)
136 { if(f->mode&SF_PKRD)
137 { f->endb = f->endr = f->next;
138 f->mode &= ~SF_PKRD;
146 f->mode |= SF_RV;
148 (void)SFFILBUF(f, iosz );
151 if((n = f->endb - f->next) <= 0)
157 if(n == now || sferror(f) || sfeof(f)) /* no progress */
169 data = (Void_t*)f->next;
170 else if(type == SF_LOCKR && size == 0 && (rsrv = _sfrsrv(f,0)) )
174 data = (Void_t*)f->next;
175 else if(f->flags&SF_STRING) /* try extending string buffer */
176 { if((f->mode&SF_WRITE) && (f->flags&SF_MALLOC) )
177 { (void)SFWR(f,f->next,sz,f->disc);
178 if((n = f->endb - f->next) >= sz )
179 data = (Void_t*)f->next;
182 else if(f->mode&SF_WRITE) /* allocate side buffer */
183 { if(type == SF_LOCKR && (rsrv = _sfrsrv(f, sz)) )
186 else if(type != SF_LOCKR && sz > f->size && (rsrv = _sfrsrv(f,sz)) )
187 { if((n = SFREAD(f,(Void_t*)rsrv->data,sz)) >= sz) /* read side buffer */
192 SFOPEN(f,0);
196 { f->mode |= SF_PEEK;
197 if((f->mode & SF_READ) && size == 0 && data != f->next)
198 f->mode |= SF_GETR; /* so sfread() will unlock */
199 f->endr = f->endw = f->data;
202 { if(data == (Void_t*)f->next)
203 f->next += (size >= 0 ? size : n);
207 _Sfi = f->val = n; /* return true buffer size */
209 SFMTXRETURN(f, data);