- CHECK_STR_NONULL(Regs->Arg1);
- //Log(" Regs = {Arg2: %x, Arg3: %x}", Regs->Arg2, Regs->Arg3);
- {
- int i;
- char **tmp = (char**)Regs->Arg2;
- // Check ArgV (traverse array checking all string pointers)
- CHECK_NUM_NONULL( tmp, sizeof(char**) );
- //Log("tmp = %p", tmp);
- for(i=0;tmp[i];i++) {
- CHECK_NUM_NONULL( &tmp[i], sizeof(char*) );
- CHECK_STR_NONULL( tmp[i] );
- }
- // Check EnvP also
- // - EnvP can be NULL
- if( Regs->Arg3 )
- {
- tmp = (char**)Regs->Arg3;
- //Log("tmp = %p", tmp);
- for(i=0;tmp[i];i++) {
- CHECK_NUM_NULLOK( &tmp[i], sizeof(char*) );
- CHECK_STR_NONULL( tmp[i] );
- }
- }
- }
- // Path, **Argv, **Envp
- ret = Proc_Execve((char*)Regs->Arg1, (char**)Regs->Arg2, (char**)Regs->Arg3);
+ CHECK_STR_NONULL((char*)Regs->Arg1);
+ CHECK_STR_ARRAY( (char**)Regs->Arg2 );
+ if( Regs->Arg3 )
+ CHECK_STR_ARRAY( (char**)Regs->Arg3 );
+ LEAVE('s', "Assuming 0");
+ // Path, **Argv, **Envp, DataSize (=0 to tell it to create a copy)
+ ret = Proc_Execve(
+ (const char*)Regs->Arg1, (const char**)Regs->Arg2, (const char**)Regs->Arg3,
+ 0
+ );