X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibc.so_src%2FfileIO.c;h=776a2def924e3bd6b900796c9c284000ac4693cd;hb=8c3572edcb27522e626c2629871857323169998d;hp=d807a938c880d09bba48959d3201fb4107ef5ab9;hpb=1744f539d08e6f95e5a4b10ec1fcb6a217dfb4a7;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libc.so_src/fileIO.c b/Usermode/Libraries/libc.so_src/fileIO.c index d807a938..776a2def 100644 --- a/Usermode/Libraries/libc.so_src/fileIO.c +++ b/Usermode/Libraries/libc.so_src/fileIO.c @@ -82,7 +82,7 @@ EXPORT FILE *freopen(const char *file, const char *mode, FILE *fp) case 'x': openFlags = OPENFLAG_EXEC; break; } - + //Open File if(fp->FD != -1) fp->FD = reopen(fp->FD, file, openFlags); @@ -154,27 +154,14 @@ EXPORT int vfprintf(FILE *fp, const char *format, va_list args) { va_list tmpList; int size; - char sbuf[1024]; - char *buf = sbuf; if(!fp || !format) return -1; va_copy(tmpList, args); - size = vsnprintf(sbuf, sizeof(sbuf), (char*)format, tmpList); - - if( size >= sizeof(sbuf) ) - { - buf = (char*)malloc(size+1); - if(!buf) { - WRITE_STR(_stdout, "vfprintf ERROR: malloc() failed"); - return 0; - } - buf[size] = '\0'; - - // Print - vsnprintf(buf, size+1, (char*)format, args); - } + size = vsnprintf(NULL, 0, (char*)format, tmpList); + char buf[size+1]; + vsnprintf(buf, size+1, (char*)format, args); // Write to stream write(fp->FD, buf, size); @@ -225,7 +212,8 @@ EXPORT size_t fread(void *ptr, size_t size, size_t num, FILE *fp) { int ret; if(!fp || !fp->FD) return -1; - + + // TODO: Fit the spec better with the return value ret = read(fp->FD, ptr, size*num); return ret; @@ -542,29 +530,17 @@ EXPORT int printf(const char *format, ...) { #if 1 int size; - char sbuf[1024]; - char *buf = sbuf; va_list args; // Get final size va_start(args, format); - size = vsnprintf(sbuf, 1024, (char*)format, args); + size = vsnprintf(NULL, 0, (char*)format, args); + va_end(args); + char buf[size+1]; + // Fill Buffer + va_start(args, format); + vsnprintf(buf, size+1, (char*)format, args); va_end(args); - - if( size >= 1024 ) { - // Allocate buffer - buf = (char*)malloc(size+1); - if(buf) { - WRITE_STR(_stdout, "PRINTF ERROR: malloc() failed\n"); - return 0; - } - buf[size] = '\0'; - - // Fill Buffer - va_start(args, format); - vsnprintf(buf, size+1, (char*)format, args); - va_end(args); - } // Send to stdout write(_stdout, buf, size+1);