From c1f0f7a89e019bfb3c0dc908820118e10b83790b Mon Sep 17 00:00:00 2001 From: John Hodge Date: Thu, 3 Nov 2011 22:12:14 +0800 Subject: [PATCH] Usermode/libc - Fixing some bugs in environment handling --- Usermode/Libraries/libc.so_src/env.c | 12 ++++++------ Usermode/Libraries/libc.so_src/string.c | 10 +++++++--- Usermode/Libraries/libc.so_src/stub.c | 12 ++++++++++++ 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/Usermode/Libraries/libc.so_src/env.c b/Usermode/Libraries/libc.so_src/env.c index 3dca4df7..b38e279f 100644 --- a/Usermode/Libraries/libc.so_src/env.c +++ b/Usermode/Libraries/libc.so_src/env.c @@ -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 ++; } diff --git a/Usermode/Libraries/libc.so_src/string.c b/Usermode/Libraries/libc.so_src/string.c index 86ecb6f9..ceafd99b 100644 --- a/Usermode/Libraries/libc.so_src/string.c +++ b/Usermode/Libraries/libc.so_src/string.c @@ -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) diff --git a/Usermode/Libraries/libc.so_src/stub.c b/Usermode/Libraries/libc.so_src/stub.c index 3cab984d..2494fc28 100644 --- a/Usermode/Libraries/libc.so_src/stub.c +++ b/Usermode/Libraries/libc.so_src/stub.c @@ -48,6 +48,18 @@ int SoMain(unsigned int BaseAddress, int argc, char **argv, char **envp) { // Init for env.c _envp = envp; + + #if 0 + { + int i = 0; + char **tmp; + _SysDebug("envp = %p", envp); + for(tmp = envp; *tmp; tmp++,i++) + { + _SysDebug("envp[%i] = '%s'", i, *tmp); + } + } + #endif // Init FileIO Pointers stdin = &_iob[0]; -- 2.20.1