X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibc.so_src%2FfileIO.c;h=5fdac4cc220950f56f8ea34e592ea0461bd9288c;hb=45f9a29e481ce9ea7ca7121541f0e0f90147f5b1;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..5fdac4cc 100644 --- a/Usermode/Libraries/libc.so_src/fileIO.c +++ b/Usermode/Libraries/libc.so_src/fileIO.c @@ -29,9 +29,9 @@ struct sFILE *stderr; // Standard Error // === CODE === /** - * \fn FILE *freopen(FILE *fp, char *file, char *mode) + * \fn FILE *freopen(char *file, char *mode, FILE *fp) */ -EXPORT FILE *freopen(FILE *fp, char *file, char *mode) +EXPORT FILE *freopen(const char *file, const char *mode, FILE *fp) { int openFlags = 0; int i; @@ -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; @@ -95,12 +98,12 @@ EXPORT FILE *freopen(FILE *fp, char *file, char *mode) return fp; } /** - \fn FILE *fopen(char *file, char *mode) + \fn FILE *fopen(const char *file, const char *mode) \brief Opens a file and returns the pointer \param file String - Filename to open \param mode Mode to open in */ -EXPORT FILE *fopen(char *file, char *mode) +EXPORT FILE *fopen(const char *file, const char *mode) { FILE *retFile; @@ -110,7 +113,7 @@ EXPORT FILE *fopen(char *file, char *mode) // Create Return Structure retFile = get_file_struct(); - return freopen(retFile, file, mode); + return freopen(file, mode, retFile); } EXPORT void fclose(FILE *fp) @@ -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