51FILES TheStdout = { 1 };
52FILES *Ustdout = &TheStdout;
67FILES *Uopen(
char *filename,
char *mode)
69 FILES *f = (FILES *)Malloc1(
sizeof(FILES),
"Uopen");
70 int flags = 0, rights = 0644;
72 if ( *mode ==
'r' ) { flags |= O_RDONLY; }
73 else if ( *mode ==
'w' ) { flags |= O_CREAT | O_TRUNC; }
74 else if ( *mode ==
'a' ) { flags |= O_APPEND; }
75 else if ( *mode ==
'b' ) { }
76 else if ( *mode ==
'+' ) { flags |= O_RDWR; }
79 f->descriptor = open(filename,flags,rights);
80 if ( f->descriptor >= 0 )
return(f);
81 if ( ( flags & O_APPEND ) != 0 ) {
83 f->descriptor = open(filename,flags,rights);
84 if ( f->descriptor >= 0 )
return(f);
99 retval = close(f->descriptor);
112size_t Uread(
char *ptr,
size_t size,
size_t nobj, FILES *f)
123 while( ( (ret=read(f->descriptor,ptr,size*nobj))<1)&&(errno == EINTR) );
129 SETBASEPOSITION(pos,lseek(f->descriptor,0L,SEEK_CUR));
130 MesPrint(
"handle %d: reading %ld bytes from position %p\n",f->descriptor,size*nobj,pos);
134 return(read(f->descriptor,ptr,size*nobj));
146size_t Uwrite(
char *ptr,
size_t size,
size_t nobj, FILES *f)
153size_t thesize=size*nobj;
156 while( ( (ret=write(f->descriptor,ptr,thesize))<1 )&&(errno == EINTR) );
163 SETBASEPOSITION(pos,lseek(f->descriptor,0L,SEEK_CUR));
164 MesPrint(
"handle %d: writing %ld bytes to position %p\n",f->descriptor,size*nobj,pos);
167 return(write(f->descriptor,ptr,size*nobj));
179int Useek(FILES *f, off_t offset,
int origin)
181 if ( f && ( lseek(f->descriptor,offset,origin) >= 0 ) )
return(0);
192 if ( f )
return((off_t)lseek(f->descriptor,0L,SEEK_CUR));
201void Uflush(FILES *f) { DUMMYUSE(f); }
208int Ugetpos(FILES *f, fpos_t *ptr)
210 DUMMYUSE(f); DUMMYUSE(ptr);
219int Usetpos(FILES *f,fpos_t *ptr)
221 DUMMYUSE(f); DUMMYUSE(ptr);
230void Usetbuf(FILES *f,
char *ptr) { DUMMYUSE(f); DUMMYUSE(ptr); }