Lines Matching refs:f

105 Void_t* sfsetbuf(Sfio_t* f, Void_t* buf, size_t size)  in sfsetbuf()  argument
107 Void_t* sfsetbuf(f,buf,size) in sfsetbuf()
108 Sfio_t* f; /* stream to be buffered */ in sfsetbuf()
119 SFMTXDECL(f);
123 SFMTXENTER(f,NIL(Void_t*));
125 GETLOCAL(f,local);
129 _Sfi = f->val = (f->bits&SF_MMAP) ? (f->endb-f->data) : f->size;
130 SFMTXRETURN(f, (Void_t*)f->data);
134 if(_Sfexiting && !(f->flags&SF_STRING) && (f->mode&SF_WRITE))
139 if((init = f->mode&SF_INIT) )
140 { if(!f->pool && _sfsetpool(f) < 0)
141 SFMTXRETURN(f, NIL(Void_t*));
143 else if((f->mode&SF_RDWR) != SFMODE(f,local) && _sfmode(f,0,local) < 0)
144 SFMTXRETURN(f, NIL(Void_t*));
147 f->mode = (f->mode&SF_RDWR)|SF_LOCK;
152 if(f->proc && (f->flags&SF_READ) && (f->mode&SF_WRITE) &&
153 _sfmode(f,SF_READ,local) < 0)
154 SFMTXRETURN(f, NIL(Void_t*));
157 SFLOCK(f,local); rv = SFSYNC(f); SFOPEN(f,local);
159 SFMTXRETURN(f, NIL(Void_t*));
162 f->mode &= ~SF_SYNCED;
165 SFLOCK(f,local);
167 if((Sfio_t*)buf != f)
173 { obuf = f->data;
174 osize = f->size;
184 oflags = f->flags;
187 okmmap = (buf || (f->flags&SF_STRING) || (f->flags&SF_RDWR) == SF_RDWR) ? 0 : 1;
191 if(f->bits&SF_MMAP)
192 { if(f->data)
193 { SFMUNMAP(f,f->data,f->endb-f->data);
194 f->data = NIL(uchar*);
198 if(f->data == f->tiny)
199 { f->data = NIL(uchar*);
200 f->size = 0;
202 obuf = f->data;
203 osize = f->size;
205 f->flags &= ~SF_MALLOC;
206 f->bits &= ~SF_MMAP;
209 if((f->flags&(SF_RDWR|SF_STRING)) == SF_RDSTR &&
214 for(disc = f->disc; disc; disc = disc->disc)
218 if((init || local) && !(f->flags&SF_STRING))
224 { if((f->here = SFSK(f,(Sfoff_t)0,SEEK_CUR,disc)) < 0)
228 if((e = SFSK(f,(Sfoff_t)0,SEEK_END,disc)) >= 0)
229 f->extent = e > f->here ? e : f->here;
230 (void)SFSK(f,f->here,SEEK_SET,disc);
236 if(sysfstatf((int)f->file,&st) < 0)
237 f->here = -1;
241 f->blksz = (size_t)st.st_blksize;
247 f->here = SFSK(f,(Sfoff_t)0,SEEK_CUR,f->disc);
248 else f->here = -1;
251 if(okmmap && f->here >= 0 &&
252 (sysfcntlf((int)f->file,F_GETFL,0) & O_TEXT) )
259 f->flags |= sfsetlinemode();
262 if(f->here >= 0)
263 { f->extent = (Sfoff_t)st.st_size;
266 if(f == sfstdin || f == sfstdout || f == sfstderr)
267 f->flags |= SF_SHARE|SF_PUBLIC;
272 f->extent = -1;
273 f->here = 0;
282 if(!(f->flags&(SF_LINE|SF_WCWIDTH)) && isatty(f->file))
283 f->flags |= SF_LINE|SF_WCWIDTH;
300 SFSETNULL(f);
307 if(!f->proc && (f->bits&SF_BOTH) )
308 (void)_sfpopen(f,-1,-1,1);
323 if(okmmap && size && (f->mode&SF_READ) && f->extent >= 0 )
326 for(disc = f->disc; disc; disc = disc->disc)
330 { f->bits |= SF_MMAP;
348 else if(f == sfstderr && (f->mode&SF_WRITE))
350 else if(f->flags&SF_STRING )
352 else if((f->flags&SF_READ) && !(f->bits&SF_BOTH) &&
353 f->extent > 0 && f->extent < (Sfoff_t)_Sfpage )
354 size = (((size_t)f->extent + SF_GRAIN-1)/SF_GRAIN)*SF_GRAIN;
362 if(size > 0 && !buf && !(f->bits&SF_MMAP))
381 if(size == 0 && !(f->flags&SF_STRING) && !(f->bits&SF_MMAP) && (f->mode&SF_READ))
383 size = sizeof(f->tiny);
384 buf = (Void_t*)f->tiny;
388 f->size = size;
389 f->next = f->data = f->endr = f->endw = (uchar*)buf;
390 f->endb = (f->mode&SF_READ) ? f->data : f->data+size;
391 if(f->flags&SF_STRING)
393 f->extent = (!sf_malloc &&
394 ((f->flags&SF_READ) || (f->bits&SF_BOTH)) ) ? size : 0;
395 f->here = 0;
398 if((f->mode&SF_READ) && !sf_malloc)
399 f->endb = f->data+size;
402 f->flags = (f->flags & ~SF_MALLOC)|sf_malloc;
404 if(obuf && obuf != f->data && osize > 0 && (oflags&SF_MALLOC))
410 _Sfi = f->val = obuf ? osize : 0;
419 while(blksz > f->size/2)
421 f->blksz = blksz;
423 SFOPEN(f,local);
425 SFMTXRETURN(f, (Void_t*)obuf);