git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@20705 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-Macdonald 2005-02-14 11:03:53 +00:00
parent bd52d362a2
commit 04e4baccf7
2 changed files with 77 additions and 5 deletions

View file

@ -1,3 +1,8 @@
2005-02-14 08:00 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSTask.m: Pass environment settings for mingw based on
anonymous bug submission (bug #11360)
2005-02-10 01:05 Alexander Malmberg <alexander@malmberg.org>
* Tools/gdnc.m (main): Remove the program name from the arguments

View file

@ -1061,6 +1061,43 @@ quotedFromString(NSString *aString)
return resultString;
}
static NSData*
createUnicodeEnvBlockFromDict(NSDictionary *env)
{
NSMutableData *data = nil;
if ([env count] > 0)
{
// arbitrary value
NSMutableData *data = [NSMutableData dataWithCapacity:10*1024];
NSEnumerator *enumerator;
NSString *key;
unichar terminator= (unichar)'\0';
unichar separator = (unichar)'=';
CREATE_AUTORELEASE_POOL(pool);
enumerator = [env keyEnumerator];
while ((key = [enumerator nextObject]))
{
NSString *value;
NSString *expression;
unsigned l;
NSRange r = NSMakeRange(0,0);
unichar buffer[1024];
[data appendData: [key dataUsingEncoding: NSUnicodeStringEncoding];
[data appendBytes: separator length: 2];
value = [env objectForKey: key];
[data appendData: [value dataUsingEncoding: NSUnicodeStringEncoding];
[data appendBytes: terminator length: 2]; // end key-value pair
}
[data appendBytes: terminator length: 2]; // end of environment
RELEASE(pool);
}
return data;
}
- (void) launch
{
DWORD tid;
@ -1072,6 +1109,7 @@ quotedFromString(NSString *aString)
wchar_t *w_args;
int result;
const wchar_t *wexecutable;
LPVOID envp = 0;
if (_hasLaunched)
{
@ -1095,6 +1133,35 @@ quotedFromString(NSString *aString)
sizeof(wchar_t) * ([args length] + 1));
[args getCharacters: (unichar*)w_args];
if ([_environment count] > 0)
{
NSMutableData *data = [NSMutableData dataWithCapacity: 10240];
NSEnumerator *enumerator;
NSString *key;
unichar terminator= (unichar)'\0';
unichar separator = (unichar)'=';
CREATE_AUTORELEASE_POOL(pool);
enumerator = [_environment keyEnumerator];
while ((key = [enumerator nextObject]))
{
NSString *value;
NSString *expression;
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
}
[data appendBytes: terminator length: 2]; // end of environment
RELEASE(pool);
envp = [data bytes];
}
memset (&start_info, 0, sizeof(start_info));
start_info.cb = sizeof(start_info);
start_info.dwFlags |= STARTF_USESTDHANDLES;
@ -1104,11 +1171,11 @@ quotedFromString(NSString *aString)
result = CreateProcessW(wexecutable,
w_args,
NULL, /* proc attrs */
NULL, /* thread attrs */
1, /* inherit handles */
0, /* creation flags */
NULL, /* env block */
NULL, /* proc attrs */
NULL, /* thread attrs */
1, /* inherit handles */
CREATE_UNICODE_ENVIRONMENT, /* creation flags */
envp, /* env block */
[[[self currentDirectoryPath] localFromOpenStepPath] unicharString],
&start_info,
&procInfo);