Lines Matching refs:f

93 Void_t* sfsetbuf(Sfio_t* f, Void_t* buf, size_t size)  in sfsetbuf()  argument
95 Void_t* sfsetbuf(f,buf,size) in sfsetbuf()
96 Sfio_t* f; /* stream to be buffered */ in sfsetbuf()
107 SFMTXDECL(f);
111 SFMTXENTER(f,NIL(Void_t*));
113 GETLOCAL(f,local);
117 _Sfi = f->val = (f->bits&SF_MMAP) ? (f->endb-f->data) : f->size;
118 SFMTXRETURN(f, (Void_t*)f->data);
122 if(_Sfexiting && !(f->flags&SF_STRING) && (f->mode&SF_WRITE))
127 if((init = f->mode&SF_INIT) )
128 { if(!f->pool && _sfsetpool(f) < 0)
129 SFMTXRETURN(f, NIL(Void_t*));
131 else if((f->mode&SF_RDWR) != SFMODE(f,local) && _sfmode(f,0,local) < 0)
132 SFMTXRETURN(f, NIL(Void_t*));
135 f->mode = (f->mode&SF_RDWR)|SF_LOCK;
140 if(f->proc && (f->flags&SF_READ) && (f->mode&SF_WRITE) &&
141 _sfmode(f,SF_READ,local) < 0)
142 SFMTXRETURN(f, NIL(Void_t*));
145 SFLOCK(f,local); rv = SFSYNC(f); SFOPEN(f,local);
147 SFMTXRETURN(f, NIL(Void_t*));
150 f->mode &= ~SF_SYNCED;
153 SFLOCK(f,local);
155 if((Sfio_t*)buf != f)
161 { obuf = f->data;
162 osize = f->size;
172 oflags = f->flags;
175 okmmap = (buf || (f->flags&SF_STRING) || (f->flags&SF_RDWR) == SF_RDWR) ? 0 : 1;
179 if(f->bits&SF_MMAP)
180 { if(f->data)
181 { SFMUNMAP(f,f->data,f->endb-f->data);
182 f->data = NIL(uchar*);
186 if(f->data == f->tiny)
187 { f->data = NIL(uchar*);
188 f->size = 0;
190 obuf = f->data;
191 osize = f->size;
193 f->flags &= ~SF_MALLOC;
194 f->bits &= ~SF_MMAP;
197 if((f->flags&(SF_RDWR|SF_STRING)) == SF_RDSTR &&
202 for(disc = f->disc; disc; disc = disc->disc)
206 if((init || local) && !(f->flags&SF_STRING))
212 { if((f->here = SFSK(f,(Sfoff_t)0,SEEK_CUR,disc)) < 0)
216 if((e = SFSK(f,(Sfoff_t)0,SEEK_END,disc)) >= 0)
217 f->extent = e > f->here ? e : f->here;
218 (void)SFSK(f,f->here,SEEK_SET,disc);
224 if(sysfstatf((int)f->file,&st) < 0)
225 f->here = -1;
229 f->blksz = (size_t)st.st_blksize;
235 f->here = SFSK(f,(Sfoff_t)0,SEEK_CUR,f->disc);
236 else f->here = -1;
239 if(okmmap && f->here >= 0 &&
240 (sysfcntlf((int)f->file,F_GETFL,0) & O_TEXT) )
246 f->flags |= setlinemode();
248 if(f->here >= 0)
249 { f->extent = (Sfoff_t)st.st_size;
252 if(f == sfstdin || f == sfstdout || f == sfstderr)
253 f->flags |= SF_SHARE|SF_PUBLIC;
258 f->extent = -1;
259 f->here = 0;
268 if(!(f->flags&(SF_LINE|SF_WCWIDTH)) && isatty(f->file))
269 f->flags |= SF_LINE|SF_WCWIDTH;
278 SFSETNULL(f);
285 if(!f->proc && (f->bits&SF_BOTH) )
286 (void)_sfpopen(f,-1,-1,1);
301 if(okmmap && size && (f->mode&SF_READ) && f->extent >= 0 )
304 for(disc = f->disc; disc; disc = disc->disc)
308 { f->bits |= SF_MMAP;
326 else if(f == sfstderr && (f->mode&SF_WRITE))
328 else if(f->flags&SF_STRING )
330 else if((f->flags&SF_READ) && !(f->bits&SF_BOTH) &&
331 f->extent > 0 && f->extent < (Sfoff_t)_Sfpage )
332 size = (((size_t)f->extent + SF_GRAIN-1)/SF_GRAIN)*SF_GRAIN;
340 if(size > 0 && !buf && !(f->bits&SF_MMAP))
359 if(size == 0 && !(f->flags&SF_STRING) && !(f->bits&SF_MMAP) && (f->mode&SF_READ))
361 size = sizeof(f->tiny);
362 buf = (Void_t*)f->tiny;
366 f->size = size;
367 f->next = f->data = f->endr = f->endw = (uchar*)buf;
368 f->endb = (f->mode&SF_READ) ? f->data : f->data+size;
369 if(f->flags&SF_STRING)
371 f->extent = (!sf_malloc &&
372 ((f->flags&SF_READ) || (f->bits&SF_BOTH)) ) ? size : 0;
373 f->here = 0;
376 if((f->mode&SF_READ) && !sf_malloc)
377 f->endb = f->data+size;
380 f->flags = (f->flags & ~SF_MALLOC)|sf_malloc;
382 if(obuf && obuf != f->data && osize > 0 && (oflags&SF_MALLOC))
388 _Sfi = f->val = obuf ? osize : 0;
397 while(blksz > f->size/2)
399 f->blksz = blksz;
401 SFOPEN(f,local);
403 SFMTXRETURN(f, (Void_t*)obuf);