Changeset 2048 for Whitix/trunk
- Timestamp:
- 04/03/09 19:08:21 (3 years ago)
- Files:
-
- 1 modified
-
Whitix/trunk/fs/vfs/load.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
Whitix/trunk/fs/vfs/load.c
r1903 r2048 46 46 int* fds; 47 47 char** argv; 48 int argc ;48 int argc, argCount; /* FIXME: difference? */ 49 49 DWORD entryPoint,stackPos; 50 50 DWORD* stackP; … … 182 182 DWORD currVirtPage=0; 183 183 int err=0; 184 args->argc +=count;184 args->argc += count; 185 185 186 186 PreemptDisable(); … … 268 268 static int ExecCopyArgs(struct ExecArgs* args) 269 269 { 270 int argCount;271 272 270 /* FIXME: Should be less than PAGE_SIZE*NUM_ARG_PAGES? */ 273 argCount=ExecCountArgs(args->argv, PAGE_SIZE*NUM_ARG_PAGES); 274 if (argCount < 0) 275 return argCount; 271 args->argCount=ExecCountArgs(args->argv, PAGE_SIZE*NUM_ARG_PAGES); 272 273 if (args->argCount < 0) 274 return args->argCount; 276 275 277 276 if (args->argv) 278 ExecCopyStrings(args, args->argv, arg Count);277 ExecCopyStrings(args, args->argv, args->argCount); 279 278 280 279 ExecCopyStrings(args, &args->process->name, 1); 281 280 282 281 return ExecSetupArgs(args); 282 } 283 284 static int ExecCopyCmdLine(struct ExecArgs* args) 285 { 286 int i; 287 int len = 1 + strlen(args->process->name); 288 char* p; 289 290 for (i = 0; i < args->argCount; i++) 291 { 292 len += strlen(args->argv[i]) + 1; 293 } 294 295 p = args->process->cmdLine = (char*)MemAlloc(len); 296 297 p = stpcpy(p, args->process->name); 298 299 for (i = 0; i < args->argCount; i++) 300 { 301 *p = ' '; 302 p++; 303 304 p = stpcpy(p, args->argv[i]); 305 } 306 307 return 0; 283 308 } 284 309 … … 373 398 struct Process* process; 374 399 375 ExecSetupContext(&execArgs,pathName,fds, argv);400 ExecSetupContext(&execArgs,pathName,fds, argv); 376 401 377 402 /* Open executable */ … … 391 416 err=ExecCopyArgs(&execArgs); 392 417 418 if (err) 419 return err; 420 421 /* Save off the command line so we can retrieve it later. */ 422 err = ExecCopyCmdLine(&execArgs); 423 393 424 if (err) 394 425 return err; … … 569 600 VirtSetCurrent(args->process->memManager); 570 601 602 VirtMemMapPage(ARCH_STACK_TOP - PAGE_SIZE, PageAlloc()->physAddr, 7); 603 ZeroMemory(ARCH_STACK_TOP - PAGE_SIZE, PAGE_SIZE); 604 571 605 /* The dynamic linker need this information to find out the base of the linker etc. */ 572 606 573 PUSH_AUX_ENT(args->stackP, AT_NULL, 0); /* Marker. */574 PUSH_AUX_ENT(args->stackP, AT_PAGESZ, PAGE_SIZE);575 PUSH_AUX_ENT(args->stackP, AT_BASE, loadAddr);576 PUSH_AUX_ENT(args->stackP, AT_ENTRY, header->entryPoint);577 PUSH_AUX_ENT(args->stackP, AT_PHDR, args->process->memManager->start+header->phOffset);578 PUSH_AUX_ENT(args->stackP, AT_PHENT, header->phEntrySize);579 PUSH_AUX_ENT(args->stackP, AT_PHNUM, header->phEntries);580 PUSH_AUX_ENT(args->stackP, AT_FLAGS, 0);607 PUSH_AUX_ENT(args->stackP, AT_NULL, 0); /* Marker. */ 608 PUSH_AUX_ENT(args->stackP, AT_PAGESZ, PAGE_SIZE); 609 PUSH_AUX_ENT(args->stackP, AT_BASE, loadAddr); 610 PUSH_AUX_ENT(args->stackP, AT_ENTRY, header->entryPoint); 611 PUSH_AUX_ENT(args->stackP, AT_PHDR, args->process->memManager->start+header->phOffset); 612 PUSH_AUX_ENT(args->stackP, AT_PHENT, header->phEntrySize); 613 PUSH_AUX_ENT(args->stackP, AT_PHNUM, header->phEntries); 614 PUSH_AUX_ENT(args->stackP, AT_FLAGS, 0); 581 615 582 616 /* Seperate argv and the auxillary entries table */
