Usermode - Switched to the POSIX read()/write() argument order
[tpg/acess2.git] / Usermode / Libraries / libc.so_src / fileIO.c
index b588f24..60def89 100644 (file)
@@ -10,6 +10,8 @@
 #include "lib.h"\r
 #include "stdio_int.h"\r
 \r
+#define WRITE_STR(_fd, _str)   write(_fd, _str, sizeof(_str))\r
+\r
 #define DEBUG_BUILD    0\r
 \r
 // === CONSTANTS ===\r
@@ -116,10 +118,12 @@ EXPORT FILE *fopen(const char *file, const char *mode)
        return freopen(file, mode, retFile);\r
 }\r
 \r
-EXPORT void fclose(FILE *fp)\r
+EXPORT int fclose(FILE *fp)\r
 {\r
        close(fp->FD);\r
-       free(fp);\r
+       fp->Flags = 0;\r
+       fp->FD = -1;\r
+       return 0;\r
 }\r
 \r
 EXPORT void fflush(FILE *fp)\r
@@ -152,20 +156,18 @@ EXPORT int vfprintf(FILE *fp, const char *format, va_list args)
         int    size;\r
        char    sbuf[1024];\r
        char    *buf = sbuf;\r
\r
-\r
 \r
        if(!fp || !format)      return -1;\r
 \r
        va_copy(tmpList, args);\r
        \r
-       size = vsnprintf(sbuf, 1024, (char*)format, tmpList);\r
+       size = vsnprintf(sbuf, sizeof(sbuf), (char*)format, tmpList);\r
        \r
-       if( size >= 1024 )\r
+       if( size >= sizeof(sbuf) )\r
        {\r
                buf = (char*)malloc(size+1);\r
                if(!buf) {\r
-                       write(_stdout, 31, "vfprintf ERROR: malloc() failed");\r
+                       WRITE_STR(_stdout, "vfprintf ERROR: malloc() failed");\r
                        return 0;\r
                }\r
                buf[size] = '\0';\r
@@ -175,7 +177,7 @@ EXPORT int vfprintf(FILE *fp, const char *format, va_list args)
        }\r
        \r
        // Write to stream\r
-       write(fp->FD, size, buf);\r
+       write(fp->FD, buf, size);\r
        \r
        // Free buffer\r
        free(buf);\r
@@ -210,7 +212,7 @@ EXPORT size_t fwrite(void *ptr, size_t size, size_t num, FILE *fp)
         int    ret;\r
        if(!fp || !fp->FD)      return -1;\r
        \r
-       ret = write(fp->FD, size*num, ptr);\r
+       ret = write(fp->FD, ptr, size*num);\r
        \r
        return ret;\r
 }\r
@@ -224,7 +226,7 @@ EXPORT size_t fread(void *ptr, size_t size, size_t num, FILE *fp)
         int    ret;\r
        if(!fp || !fp->FD)      return -1;\r
        \r
-       ret = read(fp->FD, size*num, ptr);\r
+       ret = read(fp->FD, ptr, size*num);\r
        \r
        return ret;\r
 }\r
@@ -236,7 +238,13 @@ EXPORT size_t fread(void *ptr, size_t size, size_t num, FILE *fp)
 EXPORT int fputc(int c, FILE *fp)\r
 {\r
        if(!fp || !fp->FD)      return -1;\r
-       return write(fp->FD, 1, &c);\r
+       return write(fp->FD, &c, 1);\r
+}\r
+\r
+EXPORT int putchar(int c)\r
+{\r
+       c &= 0xFF;\r
+       return write(_stdout, &c, 1);\r
 }\r
 \r
 /**\r
@@ -247,7 +255,14 @@ EXPORT int fgetc(FILE *fp)
 {\r
        char    ret = 0;\r
        if(!fp) return -1;\r
-       if(read(fp->FD, 1, &ret) == -1) return -1;\r
+       if(read(fp->FD, &ret, 1) == -1) return -1;\r
+       return ret;\r
+}\r
+\r
+EXPORT int getchar(void)\r
+{\r
+       char    ret = 0;\r
+       if(read(_stdin, &ret, 1) != 1)  return -1;\r
        return ret;\r
 }\r
 \r
@@ -266,20 +281,15 @@ FILE *get_file_struct()
        return NULL;\r
 }\r
 \r
-EXPORT int putchar(int ch)\r
-{\r
-       return write(_stdout, 1, (char*)&ch);\r
-}\r
-\r
-EXPORT int     puts(const char *str)\r
+EXPORT int puts(const char *str)\r
 {\r
         int    len;\r
        \r
        if(!str)        return 0;\r
        len = strlen(str);\r
        \r
-       len = write(_stdout, len, (char*)str);\r
-       write(_stdout, 1, "\n");\r
+       len = write(_stdout, str, len);\r
+       write(_stdout, "\n", 1);\r
        return len;\r
 }\r
 \r
@@ -546,7 +556,7 @@ EXPORT int printf(const char *format, ...)
                // Allocate buffer\r
                buf = (char*)malloc(size+1);\r
                if(buf) {\r
-                       write(_stdout, 29, "PRINTF ERROR: malloc() failed");\r
+                       WRITE_STR(_stdout, "PRINTF ERROR: malloc() failed\n");\r
                        return 0;\r
                }\r
                buf[size] = '\0';\r
@@ -558,7 +568,7 @@ EXPORT int printf(const char *format, ...)
        }\r
        \r
        // Send to stdout\r
-       write(_stdout, size+1, buf);\r
+       write(_stdout, buf, size+1);\r
        \r
        // Free buffer\r
        free(buf);\r

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