Various Changes
[tpg/acess2.git] / Usermode / Libraries / libc.so_src / fileIO.c
index 23a760d..1645cde 100644 (file)
@@ -41,8 +41,8 @@ EXPORT FILE *freopen(FILE *fp, char *file, char *mode)
        \r
        if(fp->Flags) {\r
                fflush(fp);\r
-               close(fp->FD);\r
-       }\r
+       } else\r
+               fp->FD = -1;\r
        \r
        // Get main mode\r
        switch(mode[0])\r
@@ -82,7 +82,10 @@ EXPORT FILE *freopen(FILE *fp, char *file, char *mode)
        }\r
        \r
        //Open File\r
-       fp->FD = reopen(fp->FD, file, openFlags);\r
+       if(fp->FD != -1)\r
+               fp->FD = reopen(fp->FD, file, openFlags);\r
+       else\r
+               fp->FD = open(file, openFlags);\r
        if(fp->FD == -1) {\r
                fp->Flags = 0;\r
                return NULL;\r
@@ -124,6 +127,21 @@ EXPORT void fflush(FILE *fp)
        ///\todo Implement\r
 }\r
 \r
+EXPORT long int ftell(FILE *fp)\r
+{\r
+       if(!fp || !fp->FD)      return -1;\r
+       \r
+       return tell(fp->FD);\r
+}\r
+\r
+EXPORT int fseek(FILE *fp, long int amt, int whence)\r
+{\r
+       if(!fp || !fp->FD)      return -1;\r
+       \r
+       return seek(fp->FD, amt, whence);\r
+}\r
+\r
+\r
 /**\r
  * \fn EXPORT int vfprintf(FILE *fp, const char *format, va_list args)\r
  * \brief Print to a file from a variable argument list\r
@@ -172,6 +190,8 @@ EXPORT int fprintf(FILE *fp, const char *format, ...)
 }\r
 \r
 /**\r
+ * \fn EXPORT size_t fwrite(void *ptr, size_t size, size_t num, FILE *fp)\r
+ * \brief Write to a stream\r
  */\r
 EXPORT size_t fwrite(void *ptr, size_t size, size_t num, FILE *fp)\r
 {\r
@@ -183,6 +203,20 @@ EXPORT size_t fwrite(void *ptr, size_t size, size_t num, FILE *fp)
        return ret;\r
 }\r
 \r
+/**\r
+ * \fn EXPORT size_t fread(void *ptr, size_t size, size_t num, FILE *fp)\r
+ * \brief Read from a stream\r
+ */\r
+EXPORT size_t fread(void *ptr, size_t size, size_t num, FILE *fp)\r
+{\r
+        int    ret;\r
+       if(!fp || !fp->FD)      return -1;\r
+       \r
+       ret = read(fp->FD, size*num, ptr);\r
+       \r
+       return ret;\r
+}\r
+\r
 /**\r
  * \fn EXPORT int fputc(int c, FILE *fp)\r
  * \brief Write a single character to the stream\r

UCC git Repository :: git.ucc.asn.au