Merge branch 'master' of git://git.ucc.asn.au/tpg/acess2
[tpg/acess2.git] / Usermode / Libraries / libc.so_src / stdio.c
index 840e24d..39d37a4 100644 (file)
@@ -348,6 +348,12 @@ EXPORT size_t fread(void *ptr, size_t size, size_t num, FILE *fp)
        }\r
        else {\r
                ret = _SysRead(fp->FD, ptr, size*num);\r
+               if( ret == (size_t)-1)\r
+                       return -1;\r
+               if( ret == 0 && size*num > 0 ) {\r
+                       fp->Flags |= FILE_FLAG_EOF;\r
+                       return 0;\r
+               }\r
                ret /= size;\r
        }\r
                \r
@@ -403,7 +409,7 @@ EXPORT int putchar(int c)
 EXPORT int fgetc(FILE *fp)\r
 {\r
        char    ret = 0;\r
-       if( fread(&ret, 1, 1, fp) == (size_t)-1 )\r
+       if( fread(&ret, 1, 1, fp) != 1 )\r
                return -1;\r
        return ret;\r
 }\r
@@ -452,7 +458,7 @@ EXPORT int vsprintf(char * __s, const char *__format, va_list __args)
        return vsnprintf(__s, 0x7FFFFFFF, __format, __args);\r
 }\r
 \r
-//sprintfv\r
+\r
 /**\r
  * \fn EXPORT void vsnprintf(char *buf, const char *format, va_list args)\r
  * \brief Prints a formatted string to a buffer\r
@@ -470,11 +476,11 @@ EXPORT int vsnprintf(char *buf, size_t __maxlen, const char *format, va_list arg
        uint64_t        arg;\r
         int    bLongLong, bPadLeft;\r
 \r
-       void _addchar(char ch)\r
-       {\r
-               if(buf && pos < __maxlen)       buf[pos] = ch;\r
-               pos ++;\r
-       }\r
+       #define _addchar(ch) do { \\r
+               if(buf && pos < __maxlen)       buf[pos] = (ch); \\r
+               else (void)(ch); \\r
+               pos ++; \\r
+       } while(0)\r
 \r
        tmp[32] = '\0';\r
        \r
@@ -637,6 +643,7 @@ EXPORT int vsnprintf(char *buf, size_t __maxlen, const char *format, va_list arg
        }\r
        _addchar('\0');\r
        pos --;\r
+       #undef _addchar\r
        \r
        //_SysDebug("vsnprintf: buf = '%s'", buf);\r
        \r
@@ -708,7 +715,7 @@ EXPORT int printf(const char *format, ...)
        va_end(args);\r
        \r
        // Send to stdout\r
-       _SysWrite(_stdout, buf, size+1);\r
+       _SysWrite(_stdout, buf, size);\r
        \r
        // Free buffer\r
        free(buf);\r

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