X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibc.so_src%2Fstdio.c;h=1bb90cd99221b512ca8d1cf38ff7fd0f2162e538;hb=eff15be7c050cd7c614b52b997161558bfbc7ab9;hp=f252ec47dc8d8f57bc524f03e1b93fc94fcb2bab;hpb=7150110631ddecf52a6456d7d56dd915ffc483e7;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libc.so_src/stdio.c b/Usermode/Libraries/libc.so_src/stdio.c index f252ec47..1bb90cd9 100644 --- a/Usermode/Libraries/libc.so_src/stdio.c +++ b/Usermode/Libraries/libc.so_src/stdio.c @@ -223,6 +223,33 @@ EXPORT FILE *open_memstream(char **bufferptr, size_t *lengthptr) return ret; } +EXPORT FILE *fdopen(int fd, const char *mode) +{ + FILE *ret; + + if( fd < 0 || !mode ) return NULL; + + ret = get_file_struct(); + + ret->FD = fd; + ret->Flags = _fopen_modetoflags(mode); + if(ret->Flags == -1) { + ret->Flags = 0; + return NULL; + } + + ret->Buffer = NULL; + ret->BufferPos = 0; + ret->BufferSpace = 0; + + return ret; +} + +EXPORT FILE *tmpfile(void) +{ + return NULL; +} + EXPORT int fclose(FILE *fp) { if( !(fp->Flags & FILE_FLAG_ALLOC) ) @@ -452,7 +479,7 @@ int _fseek_memstream(FILE *fp, long int amt, int whence) return 0; } -EXPORT int fseek(FILE *fp, long int amt, int whence) +EXPORT int fseeko(FILE *fp, off_t amt, int whence) { if(!fp || fp->FD == FD_NOTOPEN) { errno = EBADF; @@ -473,6 +500,11 @@ EXPORT int fseek(FILE *fp, long int amt, int whence) } } +EXPORT int fseek(FILE *fp, long int amt, int whence) +{ + return fseeko(fp, amt, whence); +} + size_t _fwrite_unbuffered(FILE *fp, size_t size, size_t num, const void *data) { size_t ret = 0, bytes; @@ -612,8 +644,8 @@ size_t _fread_memstream(void *ptr, size_t size, size_t num, FILE *fp) size_t _fread_buffered(void *ptr, size_t size, FILE *fp) { - _SysDebug("%p: %i-%i <= %i", fp, - (int)fp->Pos, (int)fp->BufferOfs, (int)fp->BufferPos); + //_SysDebug("%p: %i-%i <= %i", fp, + // (int)fp->Pos, (int)fp->BufferOfs, (int)fp->BufferPos); if( fp->BufferPos > 0 ) { assert( fp->Pos - fp->BufferOfs <= (int)fp->BufferPos ); } @@ -627,15 +659,15 @@ size_t _fread_buffered(void *ptr, size_t size, FILE *fp) fp->BufferPos = rv; fp->BufferOfs = fp->Pos; - _SysDebug("%p: Buffered %i at %i", fp, rv, fp->Pos); + //_SysDebug("%p: Buffered %i at %i", fp, rv, fp->Pos); } size_t inner_ofs = fp->Pos - fp->BufferOfs; if(size > fp->BufferPos - inner_ofs) size = fp->BufferPos - inner_ofs; - _SysDebug("%p: Read %i from %i+%i", fp, size, - (int)fp->BufferOfs, inner_ofs); + //_SysDebug("%p: Read %i from %i+%i", fp, size, + // (int)fp->BufferOfs, inner_ofs); memcpy(ptr, fp->Buffer + inner_ofs, size); fp->Pos += size; return size; @@ -723,7 +755,7 @@ EXPORT size_t fread(void *ptr, size_t size, size_t num, FILE *fp) EXPORT int fputs(const char *s, FILE *fp) { int len = strlen(s); - return fwrite(s, 1, len, fp); + return fwrite(s, len, 1, fp); } /** @@ -774,6 +806,7 @@ EXPORT int fgetc(FILE *fp) EXPORT int getchar(void) { + fflush(stdout); return fgetc(stdin); }