mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-29 19:41:00 +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
1d4d3f200f
commit
4d3b95dc24
2 changed files with 33 additions and 11 deletions
|
@ -12,6 +12,10 @@
|
||||||
So ... you can now either revert to 8bit charset filesystem support,
|
So ... you can now either revert to 8bit charset filesystem support,
|
||||||
or download a more recent version of the mingw runtime from the
|
or download a more recent version of the mingw runtime from the
|
||||||
mingw site.
|
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>
|
2005-02-16 14:40 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
|
|
|
@ -1073,7 +1073,8 @@ quotedFromString(NSString *aString)
|
||||||
wchar_t *w_args;
|
wchar_t *w_args;
|
||||||
int result;
|
int result;
|
||||||
const wchar_t *wexecutable;
|
const wchar_t *wexecutable;
|
||||||
const LPVOID envp = 0;
|
LPVOID envp = 0;
|
||||||
|
NSDictionary *env;
|
||||||
|
|
||||||
if (_hasLaunched)
|
if (_hasLaunched)
|
||||||
{
|
{
|
||||||
|
@ -1097,25 +1098,42 @@ quotedFromString(NSString *aString)
|
||||||
sizeof(wchar_t) * ([args length] + 1));
|
sizeof(wchar_t) * ([args length] + 1));
|
||||||
[args getCharacters: (unichar*)w_args];
|
[args getCharacters: (unichar*)w_args];
|
||||||
|
|
||||||
if ([_environment count] > 0)
|
env = [self environment];
|
||||||
|
if ([env count] > 0)
|
||||||
{
|
{
|
||||||
NSMutableData *data = [NSMutableData dataWithCapacity: 10240];
|
NSMutableData *data = [NSMutableData dataWithCapacity: 10240];
|
||||||
NSEnumerator *enumerator;
|
NSEnumerator *enumerator;
|
||||||
NSString *key;
|
NSString *key;
|
||||||
unichar terminator= (unichar)'\0';
|
unichar terminator = 0;
|
||||||
unichar separator = (unichar)'=';
|
|
||||||
CREATE_AUTORELEASE_POOL(pool);
|
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]))
|
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]];
|
setting = [NSString stringWithFormat: @"%@=%@", key, value];
|
||||||
[data appendBytes: &separator length: 2];
|
l = [setting length];
|
||||||
value = [_environment objectForKey: key];
|
while (r.location < l)
|
||||||
[data appendData: [value dataUsingEncoding: NSUnicodeStringEncoding]];
|
{
|
||||||
[data appendBytes: &terminator length: 2]; // end key-value pair
|
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
|
[data appendBytes: &terminator length: 2]; // end of environment
|
||||||
RELEASE(pool);
|
RELEASE(pool);
|
||||||
|
|
Loading…
Reference in a new issue