mirror of
https://github.com/gnustep/libs-base.git
synced 2025-06-02 09:31:07 +00:00
Fix for bug #11360
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@20705 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
ba7c63bfb1
commit
0688e628c4
2 changed files with 77 additions and 5 deletions
|
@ -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>
|
2005-02-10 01:05 Alexander Malmberg <alexander@malmberg.org>
|
||||||
|
|
||||||
* Tools/gdnc.m (main): Remove the program name from the arguments
|
* Tools/gdnc.m (main): Remove the program name from the arguments
|
||||||
|
|
|
@ -1061,6 +1061,43 @@ quotedFromString(NSString *aString)
|
||||||
return resultString;
|
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
|
- (void) launch
|
||||||
{
|
{
|
||||||
DWORD tid;
|
DWORD tid;
|
||||||
|
@ -1072,6 +1109,7 @@ quotedFromString(NSString *aString)
|
||||||
wchar_t *w_args;
|
wchar_t *w_args;
|
||||||
int result;
|
int result;
|
||||||
const wchar_t *wexecutable;
|
const wchar_t *wexecutable;
|
||||||
|
LPVOID envp = 0;
|
||||||
|
|
||||||
if (_hasLaunched)
|
if (_hasLaunched)
|
||||||
{
|
{
|
||||||
|
@ -1095,6 +1133,35 @@ 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)
|
||||||
|
{
|
||||||
|
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));
|
memset (&start_info, 0, sizeof(start_info));
|
||||||
start_info.cb = sizeof(start_info);
|
start_info.cb = sizeof(start_info);
|
||||||
start_info.dwFlags |= STARTF_USESTDHANDLES;
|
start_info.dwFlags |= STARTF_USESTDHANDLES;
|
||||||
|
@ -1104,11 +1171,11 @@ quotedFromString(NSString *aString)
|
||||||
|
|
||||||
result = CreateProcessW(wexecutable,
|
result = CreateProcessW(wexecutable,
|
||||||
w_args,
|
w_args,
|
||||||
NULL, /* proc attrs */
|
NULL, /* proc attrs */
|
||||||
NULL, /* thread attrs */
|
NULL, /* thread attrs */
|
||||||
1, /* inherit handles */
|
1, /* inherit handles */
|
||||||
0, /* creation flags */
|
CREATE_UNICODE_ENVIRONMENT, /* creation flags */
|
||||||
NULL, /* env block */
|
envp, /* env block */
|
||||||
[[[self currentDirectoryPath] localFromOpenStepPath] unicharString],
|
[[[self currentDirectoryPath] localFromOpenStepPath] unicharString],
|
||||||
&start_info,
|
&start_info,
|
||||||
&procInfo);
|
&procInfo);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue