Usermode/libc - Fixing some bugs in environment handling
authorJohn Hodge <[email protected]>
Thu, 3 Nov 2011 14:12:14 +0000 (22:12 +0800)
committerJohn Hodge <[email protected]>
Thu, 3 Nov 2011 14:12:14 +0000 (22:12 +0800)
Usermode/Libraries/libc.so_src/env.c
Usermode/Libraries/libc.so_src/string.c
Usermode/Libraries/libc.so_src/stub.c

index 3dca4df..b38e279 100644 (file)
@@ -12,20 +12,20 @@ char **_envp = NULL;
 char *getenv(const char *name)
 {
        char    **env;
-       char    *str;
+       char    *env_str;
         int    len;
        
        if(!_envp)      return NULL;
        if(!name)       return NULL;
        
-       
        len = strlen((char*)name);
        
        env = _envp;
-       while(*env) {
-               str = *env;
-               if(str[len] == '=' && strncmp((char*)name, str, len) == 0) {
-                       return str+len+1;
+       while(*env)
+       {
+               env_str = *env;
+               if(strncmp(name, env_str, len) == 0 && env_str[len] == '=') {
+                       return env_str+len+1;
                }
                env ++;
        }
index 86ecb6f..ceafd99 100644 (file)
@@ -26,11 +26,15 @@ EXPORT int strcmp(const char *s1, const char *s2)
  */
 EXPORT int strncmp(const char *s1, const char *s2, size_t n)
 {
-       if( n == 0 )    return 0;
-       while(n -- && *s1 == *s2 && *s1 != '\0' && *s2 != '\0') {
+       while(n && *s1 == *s2 && *s1 != '\0' && *s2 != '\0')
+       {
                s1++; s2++;
+               n --;
        }
-       return (int)*s1 - (int)*s2;
+       if( n == 0 )
+               return 0;
+       else
+               return (int)*s1 - (int)*s2;
 }
 
 EXPORT int strcasecmp(const char *s1, const char *s2)
index 3cab984..2494fc2 100644 (file)
@@ -48,6 +48,18 @@ int SoMain(unsigned int BaseAddress, int argc, char **argv, char **envp)
 {\r
        // Init for env.c\r
        _envp = envp;\r
+\r
+       #if 0   \r
+       {\r
+                int    i = 0;\r
+               char    **tmp;\r
+               _SysDebug("envp = %p", envp);\r
+               for(tmp = envp; *tmp; tmp++,i++)\r
+               {\r
+                       _SysDebug("envp[%i] = '%s'", i, *tmp);\r
+               }\r
+       }\r
+       #endif\r
        \r
        // Init FileIO Pointers\r
        stdin = &_iob[0];\r

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