Lines Matching refs:f
29 Sfoff_t sfsize(Sfio_t* f) in sfsize() argument
31 Sfoff_t sfsize(f) in sfsize()
32 Sfio_t* f; in sfsize()
38 SFMTXDECL(f);
40 SFMTXENTER(f, (Sfoff_t)(-1));
42 if((mode = f->mode&SF_RDWR) != (int)f->mode && _sfmode(f,mode,0) < 0)
43 SFMTXRETURN(f, (Sfoff_t)(-1));
45 if(f->flags&SF_STRING)
46 { SFSTRSIZE(f);
47 SFMTXRETURN(f, f->extent);
50 SFLOCK(f,0);
52 s = f->here;
54 if(f->extent >= 0)
55 { if(f->flags&(SF_SHARE|SF_APPENDWR))
56 { for(disc = f->disc; disc; disc = disc->disc)
61 if((e = SFSK(f,0,SEEK_END,disc)) >= 0)
62 f->extent = e;
63 if(SFSK(f,f->here,SEEK_SET,disc) != f->here)
64 f->here = SFSK(f,(Sfoff_t)0,SEEK_CUR,disc);
69 if(sysfstatf(f->file,&st) < 0)
70 f->extent = -1;
71 else if((f->extent = st.st_size) < f->here)
72 f->here = SFSK(f,(Sfoff_t)0,SEEK_CUR,disc);
77 if((f->flags&(SF_SHARE|SF_PUBLIC)) == (SF_SHARE|SF_PUBLIC))
78 f->here = SFSK(f,(Sfoff_t)0,SEEK_CUR,f->disc);
81 if(f->here != s && (f->mode&SF_READ) )
84 if((f->bits&SF_MMAP) && f->data)
85 { SFMUNMAP(f,f->data,f->endb-f->data);
86 f->data = NIL(uchar*);
89 f->next = f->endb = f->endr = f->endw = f->data;
92 if(f->here < 0)
93 f->extent = -1;
94 else if(f->extent < f->here)
95 f->extent = f->here;
97 if((s = f->extent) >= 0)
98 { if(f->flags&SF_APPENDWR)
99 s += (f->next - f->data);
100 else if(f->mode&SF_WRITE)
101 { s = f->here + (f->next - f->data);
102 if(s < f->extent)
103 s = f->extent;
107 SFOPEN(f,0);
108 SFMTXRETURN(f, s);