X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=Usermode%2FLibraries%2Flibc.so_src%2FfileIO.c;h=1645cde2552954c3d9cfa24ecf0fcf7038eece4f;hb=466eda7c917791866a29c253c6c22197faf41bf7;hp=23a760d61e559df9ac2039d332c38bd0bd06b723;hpb=a2210987109ab5a6337c72b45f7e52cfc9092f8f;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libc.so_src/fileIO.c b/Usermode/Libraries/libc.so_src/fileIO.c index 23a760d6..1645cde2 100644 --- a/Usermode/Libraries/libc.so_src/fileIO.c +++ b/Usermode/Libraries/libc.so_src/fileIO.c @@ -41,8 +41,8 @@ EXPORT FILE *freopen(FILE *fp, char *file, char *mode) if(fp->Flags) { fflush(fp); - close(fp->FD); - } + } else + fp->FD = -1; // Get main mode switch(mode[0]) @@ -82,7 +82,10 @@ EXPORT FILE *freopen(FILE *fp, char *file, char *mode) } //Open File - fp->FD = reopen(fp->FD, file, openFlags); + if(fp->FD != -1) + fp->FD = reopen(fp->FD, file, openFlags); + else + fp->FD = open(file, openFlags); if(fp->FD == -1) { fp->Flags = 0; return NULL; @@ -124,6 +127,21 @@ EXPORT void fflush(FILE *fp) ///\todo Implement } +EXPORT long int ftell(FILE *fp) +{ + if(!fp || !fp->FD) return -1; + + return tell(fp->FD); +} + +EXPORT int fseek(FILE *fp, long int amt, int whence) +{ + if(!fp || !fp->FD) return -1; + + return seek(fp->FD, amt, whence); +} + + /** * \fn EXPORT int vfprintf(FILE *fp, const char *format, va_list args) * \brief Print to a file from a variable argument list @@ -172,6 +190,8 @@ EXPORT int fprintf(FILE *fp, const char *format, ...) } /** + * \fn EXPORT size_t fwrite(void *ptr, size_t size, size_t num, FILE *fp) + * \brief Write to a stream */ EXPORT size_t fwrite(void *ptr, size_t size, size_t num, FILE *fp) { @@ -183,6 +203,20 @@ EXPORT size_t fwrite(void *ptr, size_t size, size_t num, FILE *fp) return ret; } +/** + * \fn EXPORT size_t fread(void *ptr, size_t size, size_t num, FILE *fp) + * \brief Read from a stream + */ +EXPORT size_t fread(void *ptr, size_t size, size_t num, FILE *fp) +{ + int ret; + if(!fp || !fp->FD) return -1; + + ret = read(fp->FD, size*num, ptr); + + return ret; +} + /** * \fn EXPORT int fputc(int c, FILE *fp) * \brief Write a single character to the stream