From 54f46448cc56b8ccfb2521dd0fa6f0035e2dc265 Mon Sep 17 00:00:00 2001 From: CaS Date: Mon, 5 Dec 2005 08:37:16 +0000 Subject: [PATCH] Not sure this is a good idea ... but allow the real environment to be overridden when NSProcessInfo is initialised. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@22142 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 6 ++++ Source/NSProcessInfo.m | 71 ++++++++++++++++++++++-------------------- 2 files changed, 44 insertions(+), 33 deletions(-) diff --git a/ChangeLog b/ChangeLog index c9de47bf7..ff07e7581 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-12-05 Richard Frith-Macdonald + + * Source/NSProcessInfo.m: Allow + ([+initializeWithArguments:count:environment:]) to override the real + environment on mingw32. + 2005-12-02 Richard Frith-Macdonald * configure.ac: Fix bug configuring whether GNUstep.conf can be diff --git a/Source/NSProcessInfo.m b/Source/NSProcessInfo.m index 53e5fbb34..e68c3e2bb 100644 --- a/Source/NSProcessInfo.m +++ b/Source/NSProcessInfo.m @@ -290,47 +290,50 @@ _gnu_process_args(int argc, char *argv[], char *env[]) NSMutableArray *values = [NSMutableArray new]; #if defined(__MINGW32__) - unichar *base; - - base = GetEnvironmentStringsW(); - if (base != 0) + if (fallbackInitialisation == NO) { - const unichar *wenvp = base; + unichar *base; - while (*wenvp != 0) + base = GetEnvironmentStringsW(); + if (base != 0) { - const unichar *start = wenvp; - NSString *key; - NSString *val; + const unichar *wenvp = base; - start = wenvp; - while (*wenvp != '=' && *wenvp != 0) - { - wenvp++; - } - if (*wenvp == '=') - { - key = [NSString stringWithCharacters: start - length: wenvp - start]; - wenvp++; - start = wenvp; - } - else - { - break; // Bad format ... expected '=' - } while (*wenvp != 0) { - wenvp++; + const unichar *start = wenvp; + NSString *key; + NSString *val; + + start = wenvp; + while (*wenvp != '=' && *wenvp != 0) + { + wenvp++; + } + if (*wenvp == '=') + { + key = [NSString stringWithCharacters: start + length: wenvp - start]; + wenvp++; + start = wenvp; + } + else + { + break; // Bad format ... expected '=' + } + while (*wenvp != 0) + { + wenvp++; + } + val = [NSString stringWithCharacters: start + length: wenvp - start]; + wenvp++; // Skip past variable terminator + [keys addObject: key]; + [values addObject: val]; } - val = [NSString stringWithCharacters: start - length: wenvp - start]; - wenvp++; // Skip past variable terminator - [keys addObject: key]; - [values addObject: val]; + FreeEnvironmentStringsW(base); + env = 0; // Suppress standard code. } - FreeEnvironmentStringsW(base); - env = 0; // Suppress standard code. } #endif if (env != 0) @@ -1055,6 +1058,7 @@ int main(int argc, char *argv[], char *env[]) @implementation NSProcessInfo (GNUstep) static BOOL debugTemporarilyDisabled = NO; +static BOOL fallbackInitialisation = NO; /** * Fallback method. The developer must call this method to initialize @@ -1068,6 +1072,7 @@ static BOOL debugTemporarilyDisabled = NO; environment: (char**)env { [gnustep_global_lock lock]; + fallbackInitialisation = YES; _gnu_process_args(argc, argv, env); [gnustep_global_lock unlock]; }