\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
}\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
///\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
}\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
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