Lines Matching refs:fr

34 Sfoff_t sfmove(Sfio_t* fr, Sfio_t* fw, Sfoff_t n, reg int rc)
36 Sfoff_t sfmove(fr,fw,n,rc)
37 Sfio_t* fr; /* moving data from this stream */
50 SFMTXDECL(fr);
53 SFMTXENTER(fr, (Sfoff_t)0);
60 { if(!(cp = (uchar*)sfgetr(fr,rc,0)) )
63 { r = sfvalue(fr);
65 { if(fr->extent >= 0 )
66 (void)SFSEEK(fr,(Sfoff_t)(-r),SEEK_CUR);
81 if(fr->mode != SF_READ && _sfmode(fr,SF_READ,0) < 0)
84 SFLOCK(fr,0);
92 (fw->next > fw->data && fr->extent < 0 &&
97 else if((cur = SFSEEK(fr, (Sfoff_t)0, SEEK_CUR)) >= 0 )
98 { sk = n > 0 ? SFSEEK(fr, n, SEEK_CUR) : SFSEEK(fr, 0, SEEK_END);
109 if(n < 0 && (fr->bits&SF_MMAP) && !(fr->bits&SF_MVSIZE) )
110 { SFMVSET(fr);
111 fr->bits |= SF_SEQUENTIAL; /* sequentially access data */
116 if((r = fr->endb - (next = fr->next)) <= 0)
119 { if(fr->extent < 0)
120 w = fr->data == fr->tiny ? SF_GRAIN : fr->size;
121 else if((fr->extent-fr->here) > SF_NMAP*SF_PAGE)
123 else w = (ssize_t)(fr->extent-fr->here);
129 if(!(fr->flags&SF_STRING) && !(fr->bits&SF_MMAP) &&
130 (n < 0 || fr->extent >= 0) )
138 else if(w > fr->size && maxw > fr->size)
142 else w = ((w+fr->size-1)/fr->size)*fr->size;
155 if(n > 0 && fr->extent < 0 && (fr->flags&SF_SHARE) )
156 { if((Sfoff_t)(r = fr->size) > n)
160 if((r = SFFILBUF(fr,r)) <= 0)
162 next = fr->next;
169 if((r = SFRD(fr,next,w,fr->disc)) > 0)
170 fr->next = fr->endb = fr->endr = fr->data;
188 fr->next += r;
191 if(w > fr->size)
192 w = fr->size;
193 memcpy((Void_t*)fr->data,(Void_t*)cp,w);
194 fr->endb = fr->data+w;
196 (void)SFSK(fr,(Sfoff_t)(-w),SEEK_CUR,fr->disc);
212 if(fr->extent >= 0)
213 (void)SFSEEK(fr,(Sfoff_t)(-r),SEEK_CUR);
219 SFOPEN(fr,0);
224 if(n < 0 && (fr->bits&SF_MMAP) && (fr->bits&SF_MVSIZE))
226 SFMVUNSET(fr);
227 if((fr->bits&SF_SEQUENTIAL) && (fr->data))
228 SFMMSEQOFF(fr,fr->data,fr->endb-fr->data);
229 fr->bits &= ~SF_SEQUENTIAL;
240 SFOPEN(fr,0);
241 SFMTXRETURN(fr, n_move);