mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-23 09:04:13 +00:00
Fix environment setting on NSTask
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@20743 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
886163406a
commit
bf1209d931
2 changed files with 33 additions and 11 deletions
|
@ -12,6 +12,10 @@
|
|||
So ... you can now either revert to 8bit charset filesystem support,
|
||||
or download a more recent version of the mingw runtime from the
|
||||
mingw site.
|
||||
* Source/NSTask.m: Fix setting environment for mingw ... use own
|
||||
method to get environment rather than examining instance variable,
|
||||
as the variable may not be set. Sort variables because windows needs
|
||||
them in alphabetical order. Fix conversion to unicode.
|
||||
|
||||
2005-02-16 14:40 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
|
|
|
@ -1073,7 +1073,8 @@ quotedFromString(NSString *aString)
|
|||
wchar_t *w_args;
|
||||
int result;
|
||||
const wchar_t *wexecutable;
|
||||
const LPVOID envp = 0;
|
||||
LPVOID envp = 0;
|
||||
NSDictionary *env;
|
||||
|
||||
if (_hasLaunched)
|
||||
{
|
||||
|
@ -1097,25 +1098,42 @@ quotedFromString(NSString *aString)
|
|||
sizeof(wchar_t) * ([args length] + 1));
|
||||
[args getCharacters: (unichar*)w_args];
|
||||
|
||||
if ([_environment count] > 0)
|
||||
env = [self environment];
|
||||
if ([env count] > 0)
|
||||
{
|
||||
NSMutableData *data = [NSMutableData dataWithCapacity: 10240];
|
||||
NSEnumerator *enumerator;
|
||||
NSString *key;
|
||||
unichar terminator= (unichar)'\0';
|
||||
unichar separator = (unichar)'=';
|
||||
unichar terminator = 0;
|
||||
CREATE_AUTORELEASE_POOL(pool);
|
||||
|
||||
enumerator = [_environment keyEnumerator];
|
||||
// Win32 environment variables must be sorted by name
|
||||
enumerator = [[[env allKeys]
|
||||
sortedArrayUsingSelector: @selector(compare:)] objectEnumerator];
|
||||
while ((key = [enumerator nextObject]))
|
||||
{
|
||||
NSString *value;
|
||||
NSString *value = [env objectForKey:key];
|
||||
NSString *setting;
|
||||
unsigned l;
|
||||
NSRange r = NSMakeRange(0,0);
|
||||
unichar buffer[1024];
|
||||
|
||||
[data appendData: [key dataUsingEncoding: NSUnicodeStringEncoding]];
|
||||
[data appendBytes: &separator length: 2];
|
||||
value = [_environment objectForKey: key];
|
||||
[data appendData: [value dataUsingEncoding: NSUnicodeStringEncoding]];
|
||||
[data appendBytes: &terminator length: 2]; // end key-value pair
|
||||
setting = [NSString stringWithFormat: @"%@=%@", key, value];
|
||||
l = [setting length];
|
||||
while (r.location < l)
|
||||
{
|
||||
r.length = l - r.location;
|
||||
if (r.length > 1024)
|
||||
{
|
||||
r.length = 1024;
|
||||
}
|
||||
|
||||
[setting getCharacters: buffer range: r];
|
||||
[data appendBytes: buffer length: (r.length)*sizeof(unichar)];
|
||||
|
||||
r.location += r.length;
|
||||
}
|
||||
[data appendBytes: &terminator length: 2]; // end of setting
|
||||
}
|
||||
[data appendBytes: &terminator length: 2]; // end of environment
|
||||
RELEASE(pool);
|
||||
|
|
Loading…
Reference in a new issue