Lines Matching refs:f
59 int sfsetfd(Sfio_t* f, int newfd) in sfsetfd() argument
61 int sfsetfd(f,newfd) in sfsetfd()
62 Sfio_t *f; in sfsetfd()
67 SFMTXDECL(f);
69 SFMTXENTER(f, -1);
71 if(f->flags&SF_STRING)
72 SFMTXRETURN(f, -1);
74 if((f->mode&SF_INIT) && f->file < 0)
77 SFMTXRETURN(f, -1);
81 if((f->mode&SF_RDWR) != f->mode && _sfmode(f,0,0) < 0)
82 SFMTXRETURN(f, -1);
83 SFLOCK(f,0);
85 oldfd = f->file;
89 { SFOPEN(f,0);
90 SFMTXRETURN(f, -1);
96 if(((f->mode&SF_WRITE) && f->next > f->data) ||
97 (f->mode&SF_READ) || f->disc == _Sfudisc)
98 { if(SFSYNC(f) < 0)
99 { SFOPEN(f,0);
100 SFMTXRETURN(f, -1);
104 if(((f->mode&SF_WRITE) && f->next > f->data) ||
105 ((f->mode&SF_READ) && f->extent < 0 &&
106 f->next < f->endb) )
107 { SFOPEN(f,0);
108 SFMTXRETURN(f, -1);
112 if((f->bits&SF_MMAP) && f->data)
113 { SFMUNMAP(f,f->data,f->endb-f->data);
114 f->data = NIL(uchar*);
119 f->endb = f->endr = f->endw = f->data;
120 f->extent = f->here = 0;
121 f->mode = (f->mode&SF_RDWR)|SF_INIT;
122 f->bits &= ~SF_NULL; /* off /dev/null handling */
126 SFOPEN(f,0);
131 (*_Sfnotify)(f, SF_SETFD, (void*)((long)newfd));
133 f->file = newfd;
135 SFMTXRETURN(f,newfd);