Lines Matching defs:pf

25 **	If pf is not nil, f is pooled with pf and f becomes current;
246 Sfio_t* sfpool(reg Sfio_t* f, reg Sfio_t* pf, reg int mode)
248 Sfio_t* sfpool(f,pf,mode)
250 reg Sfio_t* pf;
260 if(!f) /* return head of pool of pf regardless of lock states */
261 { if(!pf)
263 else if(!pf->pool || pf->pool == &_Sfpool)
264 return pf;
265 else return pf->pool->sf[0];
277 if(pf)
278 { SFMTXLOCK(pf);
279 if((pf->mode&SF_RDWR) != pf->mode && _sfmode(pf,0,0) < 0)
282 SFMTXUNLOCK(pf);
285 if(pf->disc == _Sfudisc)
286 (void)sfclose((*_Sfstack)(pf,NIL(Sfio_t*)));
289 /* f already in the same pool with pf */
290 if(f == pf || (pf && f->pool == pf->pool && f->pool != &_Sfpool) )
293 if(pf)
294 SFMTXUNLOCK(pf);
295 return pf;
301 if(pf)
302 SFLOCK(pf,0);
304 if(!pf) /* deleting f from its current pool */
306 for(k = 0; k < p->n_sf && pf == NIL(Sfio_t*); ++k)
308 pf = p->sf[k];
309 if(!pf) /* already isolated */
317 if(!pf->pool || pf->pool == &_Sfpool || pf->pool->n_sf <= 0 )
318 rv = pf;
319 else rv = pf->pool->sf[0]; /* return head of old pool */
323 if(pf->pool && pf->pool != &_Sfpool) /* always use current mode */
324 mode = pf->pool->mode;
329 if(SFMODE(pf,1) != SF_WRITE && _sfmode(pf,SF_WRITE,1) < 0)
338 if(!(p = pf->pool) || p == &_Sfpool) /* making a new pool */
341 if(_sfpmove(pf,-1) < 0) /* isolate pf from its current pool */
343 pf->pool = p;
344 p->sf[0] = pf;
348 f->pool = p; /* add f to pf's pool */
352 /**/ASSERT(p->sf[0] == pf && p->sf[p->n_sf-1] == f);
353 SFOPEN(pf,0);
357 rv = pf;
364 if(pf)
365 { SFOPEN(pf,0);
366 SFMTXUNLOCK(pf);