Differences From Artifact [08732d57f8]:
- File
src/OFProcess.m
— part of check-in
[4af49a13c3]
at
2017-05-07 20:10:13
on branch trunk
— Small code style change
Casts are now written like types in variable declarations. (user: js, size: 14360) [annotate] [blame] [check-ins using]
To Artifact [8cc38c1f3c]:
- File src/OFProcess.m — part of check-in [37d2a81754] at 2017-05-07 21:25:56 on branch trunk — Use char{16,32}_t instead of of_char{16,32}_t (user: js, size: 14339) [annotate] [blame] [check-ins using]
| ︙ | ︙ | |||
59 60 61 62 63 64 65 |
@interface OFProcess ()
#ifndef OF_WINDOWS
- (void)OF_getArgV: (char ***)argv
forProgramName: (OFString *)programName
andArguments: (OFArray *)arguments;
- (char **)OF_environmentForDictionary: (OFDictionary *)dictionary;
#else
| | | 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
@interface OFProcess ()
#ifndef OF_WINDOWS
- (void)OF_getArgV: (char ***)argv
forProgramName: (OFString *)programName
andArguments: (OFArray *)arguments;
- (char **)OF_environmentForDictionary: (OFDictionary *)dictionary;
#else
- (char16_t *)OF_environmentForDictionary: (OFDictionary *)dictionary;
#endif
@end
@implementation OFProcess
+ (instancetype)processWithProgram: (OFString *)program
{
return [[[self alloc] initWithProgram: program] autorelease];
|
| ︙ | ︙ | |||
225 226 227 228 229 230 231 | objc_autoreleasePoolPop(pool); #else SECURITY_ATTRIBUTES sa; PROCESS_INFORMATION pi; STARTUPINFOW si; void *pool; OFMutableString *argumentsString; | | | 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 | objc_autoreleasePoolPop(pool); #else SECURITY_ATTRIBUTES sa; PROCESS_INFORMATION pi; STARTUPINFOW si; void *pool; OFMutableString *argumentsString; char16_t *argumentsCopy; size_t length; sa.nLength = sizeof(sa); sa.bInheritHandle = TRUE; sa.lpSecurityDescriptor = NULL; if (!CreatePipe(&_readPipe[0], &_readPipe[1], &sa, 0)) |
| ︙ | ︙ | |||
294 295 296 297 298 299 300 | [argumentsString appendString: tmp]; if (containsSpaces) [argumentsString appendString: @"\""]; } length = [argumentsString UTF16StringLength]; | | | 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 |
[argumentsString appendString: tmp];
if (containsSpaces)
[argumentsString appendString: @"\""];
}
length = [argumentsString UTF16StringLength];
argumentsCopy = [self allocMemoryWithSize: sizeof(char16_t)
count: length + 1];
memcpy(argumentsCopy, [argumentsString UTF16String],
([argumentsString UTF16StringLength] + 1) * 2);
@try {
if (!CreateProcessW([program UTF16String],
argumentsCopy, NULL, NULL, TRUE,
CREATE_UNICODE_ENVIRONMENT,
|
| ︙ | ︙ | |||
400 401 402 403 404 405 406 | } envp[i] = NULL; return envp; } #else | | | | | | 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 |
}
envp[i] = NULL;
return envp;
}
#else
- (char16_t *)OF_environmentForDictionary: (OFDictionary *)environment
{
OFDataArray *env;
OFEnumerator *keyEnumerator, *objectEnumerator;
OFString *key, *object;
const char16_t equal = '=';
const char16_t zero[2] = { 0, 0 };
if (environment == nil)
return NULL;
env = [OFDataArray dataArrayWithItemSize: sizeof(char16_t)];
keyEnumerator = [environment keyEnumerator];
objectEnumerator = [environment objectEnumerator];
while ((key = [keyEnumerator nextObject]) != nil &&
(object = [objectEnumerator nextObject]) != nil) {
[env addItems: [key UTF16String]
count: [key UTF16StringLength]];
|
| ︙ | ︙ |