version 1.1.1.1, 2008/06/03 10:38:51 |
version 1.1.1.1.2.1, 2008/08/13 17:12:43 |
|
|
return ENOMEM; |
return ENOMEM; |
memset((void *)mapped, 0, USTACK_SIZE); |
memset((void *)mapped, 0, USTACK_SIZE); |
|
|
sp = mapped + USTACK_SIZE - sizeof(int); |
sp = mapped + USTACK_SIZE - sizeof(int) * 3; |
|
|
/* |
/* |
* Copy items |
* Copy items |
|
|
* Build argument list |
* Build argument list |
*/ |
*/ |
argv[0] = (char *)((u_long)stack + (u_long)file - mapped); |
argv[0] = (char *)((u_long)stack + (u_long)file - mapped); |
|
DPRINTF(("exec: argv[0] = %s\n", argv[0])); |
|
|
for (i = 1; i <= argc; i++) { |
for (i = 1; i <= argc; i++) { |
argv[i] = (char *)((u_long)stack + (arg_top - mapped)); |
argv[i] = (char *)((u_long)stack + (arg_top - mapped)); |
while ((*(char *)arg_top)++ != '\0'); |
while ((*(char *)arg_top++) != '\0'); |
|
DPRINTF(("exec: argv[%d] = %s\n", i, argv[i])); |
} |
} |
argv[argc + 1] = NULL; |
argv[argc + 1] = NULL; |
|
|
for (i = 0; i < envc; i++) { |
for (i = 0; i < envc; i++) { |
envp[i] = (char *)((u_long)stack + (arg_top - mapped)); |
envp[i] = (char *)((u_long)stack + (arg_top - mapped)); |
while ((*(char *)arg_top)++ != '\0'); |
while ((*(char *)arg_top++) != '\0'); |
} |
} |
envp[envc] = NULL; |
envp[envc] = NULL; |
|
|
*new_sp = (void *)((u_long)stack + (sp - mapped)); |
*new_sp = (void *)((u_long)stack + (sp - mapped)); |
|
|
vm_free(task_self(), (void *)mapped); |
vm_free(task_self(), (void *)mapped); |
|
|
return 0; |
return 0; |