Usermode/libc - Fixes and additions from curl
authorJohn Hodge <[email protected]>
Sun, 11 May 2014 07:00:05 +0000 (15:00 +0800)
committerJohn Hodge <[email protected]>
Sun, 11 May 2014 07:00:05 +0000 (15:00 +0800)
NOTE - The GCC cross-compiler applies fixincludes to stdio.h

Usermode/Libraries/libc.so_src/ctype.c
Usermode/Libraries/libc.so_src/errno.c
Usermode/Libraries/libc.so_src/include_exp/ctype.h
Usermode/Libraries/libc.so_src/include_exp/errno.enum.h
Usermode/Libraries/libc.so_src/include_exp/stdio.h
Usermode/Libraries/libc.so_src/include_exp/string.h
Usermode/Libraries/libc.so_src/stdio.c
Usermode/Libraries/libc.so_src/string.c

index d5a5e97..18a199c 100644 (file)
@@ -22,23 +22,40 @@ int isalnum(int ch) {
        return isalpha(ch) || isdigit(ch);
 }
 
-int toupper(int ch) {
-       if('a'<=ch && ch <='z')
-               return ch - 'a' + 'A';
-       return ch;
+int isxdigit(int ch) {
+       if('0'<=ch&&ch<='9')    return 1;
+       if('a'<=ch&&ch<='f')    return 1;
+       if('F'<=ch&&ch<='F')    return 1;
+       return 0;
 }
-int tolower(int ch) {
-       if('A'<=ch && ch <='Z')
-               return ch - 'A' + 'a';
-       return ch;
+
+int isupper(int ch) {
+       if('A'<=ch && ch <='Z') return 1;
+       return 0;
+}
+
+int islower(int ch) {
+       if('a'<=ch && ch <='z') return 1;
+       return 0;
+}
+
+int ispunct(int ch) {
+       if( isprint(ch) && !isspace(ch) && !isalnum(ch) )
+               return 1;
+       return 0;
 }
 
 int isprint(int ch ) {
-       if( ch < ' ' )  return 0;
-       if( ch > 'z' )  return 0;
+       if( ' ' <= ch && ch <= 'z' )    return 1;
        return 1;
 }
 
+int isgraph(int ch) {
+       // Anything but space
+       if( ' ' < ch && ch <= 'z' )     return 1;
+       return 0;
+}
+
 int isspace(int ch) {
        if(ch == ' ')   return 1;
        if(ch == '\t')  return 1;
@@ -47,12 +64,17 @@ int isspace(int ch) {
        return 0;
 }
 
-int isxdigit(int ch) {
-       if('0'<=ch&&ch<='9')    return 1;
-       if('a'<=ch&&ch<='f')    return 1;
-       if('F'<=ch&&ch<='F')    return 1;
-       return 0;
+int toupper(int ch) {
+       if('a'<=ch && ch <='z')
+               return ch - 'a' + 'A';
+       return ch;
 }
+int tolower(int ch) {
+       if('A'<=ch && ch <='Z')
+               return ch - 'A' + 'a';
+       return ch;
+}
+
 
 // C99
 int isblank(int ch) {
index d651ccc..f5a142a 100644 (file)
@@ -51,7 +51,12 @@ EXPORT char *strerror(int errnum)
        case EFBIG:     return "File too big";
        case E2BIG:     return "Value too big";
        case EALREADY:  return "Operation was no-op";
+       case ENOSPC:    return "No space left on the device";
+
        case EAFNOSUPPORT:      return "Address family not supported";
+       case EADDRINUSE:        return "Address already in use";
+       case ETIMEDOUT: return "Operation timed out";
+
        case EINTERNAL: return "Internal error";
        }
        _SysDebug("strerror: errnum=%i unk", errnum);
index 75e4ce8..69067e8 100644 (file)
@@ -14,21 +14,27 @@ extern "C" {
 
 extern int isalpha(int ch);
 extern int isdigit(int ch);
-
 extern int isalnum(int ch);
+extern int isxdigit(int ch);
 
-extern int toupper(int ch);
-extern int tolower(int ch);
+extern int islower(int ch);
+extern int isupper(int ch);
+extern int ispunct(int ch);
 
 extern int isprint(int ch);
+extern int isgraph(int ch);
 
 extern int isspace(int ch);
 
-extern int isxdigit(int ch);
+extern int iscntrl(int ch);
 
 // C99
 extern int isblank(int ch);
 
+// Conversions
+extern int toupper(int ch);
+extern int tolower(int ch);
+
 #ifdef __cplusplus
 }
 #endif
index 5813cc5..be8c882 100755 (executable)
@@ -30,12 +30,15 @@ enum libc_eErrorNumbers {
 
        EAGAIN, // Try again
        EALREADY,       // Operation was a NOP
+       ENOSPC, // (POSIX) No space left on device
        
        EFBIG,  // File too large
        E2BIG,  // Argument list too large
 
        // psockets
        EAFNOSUPPORT,   
+       EADDRINUSE,     // Specified addres is already in use
+       ETIMEDOUT,
        
        EINTERNAL       // Internal Error
 };
index ed1fce5..b2cb857 100644 (file)
@@ -94,7 +94,7 @@ extern FILE   *open_memstream(char **bufferptr, size_t *lengthptr);
 extern FILE    *fdopen(int fd, const char *modes);
 extern FILE    *tmpfile(void);
 extern int     fclose(FILE *fp);
-extern void    fflush(FILE *fp);
+extern int     fflush(FILE *fp);
 extern off_t   ftell(FILE *fp);
 extern off_t   ftello(FILE *fp);
 extern int     fseek(FILE *fp, long int amt, int whence);
index 7ef1bc7..028ed27 100644 (file)
@@ -29,6 +29,7 @@ extern char   *strrchr(const char *str, int character);
 extern char    *strstr(const char *str1, const char *str2);
 extern size_t  strcspn(const char *haystack, const char *reject);
 extern size_t  strspn(const char *haystack, const char *accept);
+extern char    *strpbrk(const char *haystack, const char *accept);
 
 extern char    *strtok(char *str, const char *delim);
 extern char    *strtok_r(char *str, const char *delim, char **saveptr);
index 1bb90cd..7969f4c 100644 (file)
@@ -374,22 +374,23 @@ int _fflush_int(FILE *fp)
        return ret;\r
 }\r
 \r
-EXPORT void fflush(FILE *fp)\r
+EXPORT int fflush(FILE *fp)\r
 {\r
        if( !fp || fp->FD == FD_NOTOPEN )\r
-               return ;\r
+               return EBADF;\r
        \r
        // Nothing to do for memory files\r
        if( fp->FD == FD_MEMFILE )\r
-               return ;\r
+               return 0;\r
        // Memory streams, update pointers\r
        if( fp->FD == FD_MEMSTREAM ) {\r
                *fp->BufPtr = fp->Buffer;\r
                *fp->LenPtr = fp->BufferPos;\r
-               return ;\r
+               return 0;\r
        }\r
        \r
        _fflush_int(fp);\r
+       return 0;\r
 }\r
 \r
 EXPORT void clearerr(FILE *fp)\r
index aa79ec9..0757c24 100644 (file)
@@ -369,6 +369,19 @@ EXPORT size_t strspn(const char *haystack, const char *accept)
        return ret;
 }
 
+EXPORT char *strpbrk(const char *haystack, const char *accept)
+{
+       while( *haystack )
+       {
+               for( int i = 0; accept[i]; i ++ )
+               {
+                       if( accept[i] == *haystack )
+                               return (char*)haystack;
+               }
+       }
+       return NULL;
+}
+
 char *strtok(char *str, const char *delim)
 {
        static char *__saveptr;

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