Lines Matching refs:f

37 	reg Sfio_t*	f;  in _sfwrsync()  local
44 f = p->sf[0]; in _sfwrsync()
45 if(!SFFROZEN(f) && f->next > f->data && in _sfwrsync()
46 (f->mode&SF_WRITE) && f->extent < 0 ) in _sfwrsync()
47 (void)_sfflsbuf(f,-1); in _sfwrsync()
52 { f = _Sfpool.sf[n]; in _sfwrsync()
54 if(!SFFROZEN(f) && f->next > f->data && in _sfwrsync()
55 (f->mode&SF_WRITE) && f->extent < 0 ) in _sfwrsync()
56 (void)_sfflsbuf(f,-1); in _sfwrsync()
61 ssize_t sfrd(Sfio_t* f, Void_t* buf, size_t n, Sfdisc_t* disc) in sfrd() argument
63 ssize_t sfrd(f,buf,n,disc) in sfrd()
64 Sfio_t* f; in sfrd()
73 SFMTXDECL(f);
75 SFMTXENTER(f,-1);
77 GETLOCAL(f,local);
78 if((rcrv = f->mode & (SF_RC|SF_RV)) )
79 f->mode &= ~(SF_RC|SF_RV);
80 f->bits &= ~SF_JUSTSEEK;
82 if(f->mode&SF_PKRD)
83 SFMTXRETURN(f, -1);
85 if(!local && !(f->bits&SF_DCDOWN)) /* an external user's call */
86 { if(f->mode != SF_READ && _sfmode(f,SF_READ,0) < 0)
87 SFMTXRETURN(f, -1);
88 if(f->next < f->endb)
89 { if(SFSYNC(f) < 0)
90 SFMTXRETURN(f, -1);
91 if((f->mode&(SF_SYNCED|SF_READ)) == (SF_SYNCED|SF_READ) )
92 { f->endb = f->next = f->endr = f->data;
93 f->mode &= ~SF_SYNCED;
96 if((f->bits&SF_MMAP) && f->data)
97 { SFMUNMAP(f, f->data, f->endb-f->data);
98 f->data = NIL(uchar*);
101 f->next = f->endb = f->endr = f->endw = f->data;
107 if(!(f->flags&SF_STRING) && f->file < 0)
108 SFMTXRETURN(f, 0);
110 f->flags &= ~(SF_EOF|SF_ERROR);
113 if(f->flags&SF_STRING)
114 { if((r = (f->data+f->extent) - f->next) < 0)
118 SFMTXRETURN(f, (ssize_t)r);
122 SFDISC(f,dc,readf);
123 if(dc && dc->exceptf && (f->flags&SF_IOCHECK) )
126 SETLOCAL(f);
127 if((rv = _sfexcept(f,SF_READ,n,dc)) > 0)
130 { f->flags |= SF_ERROR;
131 SFMTXRETURN(f, (ssize_t)rv);
136 if(f->bits&SF_MMAP)
141 if((uchar*)buf >= f->data && (uchar*)buf <= f->endb)
142 { n += f->endb - f->next;
147 if((f->flags&(SF_SHARE|SF_PUBLIC)) == (SF_SHARE|SF_PUBLIC) &&
148 (r = SFSK(f,(Sfoff_t)0,SEEK_CUR,dc)) != f->here)
149 f->here = r;
150 else f->here -= f->endb-f->next;
153 if((f->flags&SF_SHARE) || (size_t)(r = f->extent-f->here) < n)
154 { if((r = sysfstatf(f->file,&st)) < 0)
156 if((r = (f->extent = st.st_size) - f->here) <= 0 )
163 if((a = (size_t)(f->here%_Sfpage)) != 0)
164 { f->here -= a;
169 if(r > (round = (1 + (n+a)/f->size)*f->size) )
172 if(f->data)
173 SFMUNMAP(f, f->data, f->endb-f->data);
176 { f->data = (uchar*) sysmmapf((caddr_t)0, (size_t)r,
179 f->file, (sfoff_t)f->here);
180 if(f->data && (caddr_t)f->data != (caddr_t)(-1))
183 { f->data = NIL(uchar*);
190 if(f->data)
191 { if(f->bits&SF_SEQUENTIAL)
192 SFMMSEQON(f,f->data,r);
193 f->next = f->data+a;
194 f->endr = f->endb = f->data+r;
195 f->endw = f->data;
196 f->here += r;
199 (void)SFSK(f,f->here,SEEK_SET,dc);
204 memcpy(buf,f->next,n);
205 f->next += n;
207 else n = f->endb - f->next;
209 SFMTXRETURN(f, n);
213 f->here += a;
216 (void)SFSK(f,f->here,SEEK_SET,dc);
219 (void)SFSETBUF(f,(Void_t*)f->tiny,(size_t)SF_UNBOUND);
222 { buf = (Void_t*)f->data;
223 n = f->size;
230 if(!dosync && f->extent < 0)
236 if(f->extent >= 0 && (f->flags&SF_SHARE) )
237 { if(!(f->flags&SF_PUBLIC) )
238 f->here = SFSK(f,f->here,SEEK_SET,dc);
239 else f->here = SFSK(f,(Sfoff_t)0,SEEK_CUR,dc);
246 { int share = f->flags&SF_SHARE;
249 f->mode |= rcrv;
251 else f->flags &= ~SF_SHARE;
253 SFDCRD(f,buf,n,dc,r);
257 f->mode &= ~rcrv;
258 else f->flags |= share;
260 else if(SFISNULL(f))
262 else if(f->extent < 0 && (f->flags&SF_SHARE) && rcrv)
264 r = sfpkrd(f->file, (char*)buf, n,
265 (rcrv&SF_RC) ? (int)f->getr : -1,
269 f->mode |= SF_PKRD;
270 else f->mode |= SF_RC;
273 else r = sysreadf(f->file,buf,n);
279 { if(!(f->bits&SF_DCDOWN) ) /* not a continuation call */
280 { if(!(f->mode&SF_PKRD) )
281 { f->here += r;
282 if(f->extent >= 0 && f->extent < f->here)
283 f->extent = f->here;
285 if((uchar*)buf >= f->data &&
286 (uchar*)buf < f->data+f->size)
287 f->endb = f->endr = ((uchar*)buf) + r;
290 SFMTXRETURN(f, (ssize_t)r);
295 SETLOCAL(f);
296 switch(_sfexcept(f,SF_READ,(ssize_t)r,dc))
302 SFMTXRETURN(f,n);
304 if(!local && !(f->flags&SF_STRING))
308 SFMTXRETURN(f, -1);
312 for(dc = f->disc; dc; dc = dc->disc)