#define _stdout 1\r
\r
// === PROTOTYPES ===\r
-EXPORT void itoa(char *buf, uint64_t num, uint base, int minLength, char pad, int bSigned);\r
+EXPORT void itoa(char *buf, uint64_t num, size_t base, int minLength, char pad, int bSigned);\r
struct sFILE *get_file_struct();\r
\r
// === GLOBALS ===\r
case 'x': openFlags = OPENFLAG_EXEC;\r
break;\r
}\r
- \r
+\r
//Open File\r
if(fp->FD != -1)\r
fp->FD = reopen(fp->FD, file, openFlags);\r
///\todo Implement\r
}\r
\r
-EXPORT long int ftell(FILE *fp)\r
+EXPORT off_t ftell(FILE *fp)\r
{\r
if(!fp || !fp->FD) return -1;\r
\r
{\r
va_list tmpList;\r
int size;\r
- char sbuf[1024];\r
- char *buf = sbuf;\r
\r
if(!fp || !format) return -1;\r
\r
va_copy(tmpList, args);\r
\r
- size = vsnprintf(sbuf, sizeof(sbuf), (char*)format, tmpList);\r
- \r
- if( size >= sizeof(sbuf) )\r
- {\r
- buf = (char*)malloc(size+1);\r
- if(!buf) {\r
- WRITE_STR(_stdout, "vfprintf ERROR: malloc() failed");\r
- return 0;\r
- }\r
- buf[size] = '\0';\r
- \r
- // Print\r
- vsnprintf(buf, size+1, (char*)format, args);\r
- }\r
+ size = vsnprintf(NULL, 0, (char*)format, tmpList);\r
+ char buf[size+1];\r
+ vsnprintf(buf, size+1, (char*)format, args);\r
\r
// Write to stream\r
write(fp->FD, buf, size);\r
{\r
int ret;\r
if(!fp || !fp->FD) return -1;\r
- \r
+\r
+ // TODO: Fit the spec better with the return value \r
ret = read(fp->FD, ptr, size*num);\r
\r
return ret;\r
_addchar('*');\r
_addchar('0');\r
_addchar('x');\r
- arg = va_arg(args, uint32_t);\r
+ arg = va_arg(args, intptr_t);\r
itoa(tmp, arg, 16, minSize, pad, 0);\r
precision = -1;\r
goto sprintf_puts;\r
\r
// String\r
case 's':\r
- arg = va_arg(args, uint32_t);\r
- p = (void*)(intptr_t)arg;\r
+ p = va_arg(args, char*);\r
sprintf_puts:\r
if(!p) p = "(null)";\r
//_SysDebug("vsnprintf: p = '%s'", p);\r
{\r
#if 1\r
int size;\r
- char sbuf[1024];\r
- char *buf = sbuf;\r
va_list args;\r
\r
// Get final size\r
va_start(args, format);\r
- size = vsnprintf(sbuf, 1024, (char*)format, args);\r
+ size = vsnprintf(NULL, 0, (char*)format, args);\r
+ va_end(args);\r
+ char buf[size+1];\r
+ // Fill Buffer\r
+ va_start(args, format);\r
+ vsnprintf(buf, size+1, (char*)format, args);\r
va_end(args);\r
- \r
- if( size >= 1024 ) {\r
- // Allocate buffer\r
- buf = (char*)malloc(size+1);\r
- if(buf) {\r
- WRITE_STR(_stdout, "PRINTF ERROR: malloc() failed\n");\r
- return 0;\r
- }\r
- buf[size] = '\0';\r
- \r
- // Fill Buffer\r
- va_start(args, format);\r
- vsnprintf(buf, size+1, (char*)format, args);\r
- va_end(args);\r
- }\r
\r
// Send to stdout\r
write(_stdout, buf, size+1);\r