Fixed keyboard bug where keypresses were not being registered, working on libreadline
[tpg/acess2.git] / Usermode / Libraries / libc.so_src / fileIO.c
index 23a760d..5fdac4c 100644 (file)
@@ -29,9 +29,9 @@ struct sFILE  *stderr;        // Standard Error
 \r
 // === CODE ===\r
 /**\r
- * \fn FILE *freopen(FILE *fp, char *file, char *mode)\r
+ * \fn FILE *freopen(char *file, char *mode, FILE *fp)\r
  */\r
-EXPORT FILE *freopen(FILE *fp, char *file, char *mode)\r
+EXPORT FILE *freopen(const char *file, const char *mode, FILE *fp)\r
 {\r
         int    openFlags = 0;\r
         int    i;\r
@@ -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
@@ -95,12 +98,12 @@ EXPORT FILE *freopen(FILE *fp, char *file, char *mode)
        return fp;\r
 }\r
 /**\r
- \fn FILE *fopen(char *file, char *mode)\r
+ \fn FILE *fopen(const char *file, const char *mode)\r
  \brief Opens a file and returns the pointer\r
  \param file   String - Filename to open\r
  \param mode   Mode to open in\r
 */\r
-EXPORT FILE *fopen(char *file, char *mode)\r
+EXPORT FILE *fopen(const char *file, const char *mode)\r
 {\r
        FILE    *retFile;\r
        \r
@@ -110,7 +113,7 @@ EXPORT FILE *fopen(char *file, char *mode)
        // Create Return Structure\r
        retFile = get_file_struct();\r
        \r
-       return freopen(retFile, file, mode);\r
+       return freopen(file, mode, retFile);\r
 }\r
 \r
 EXPORT void fclose(FILE *fp)\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