- for (size_t i = 0; i < 2 && argv_extra[i]; i++, argv_len++) {
- const char* extra_arg = argv_extra[i];
- size_t str_len = strlen(extra_arg);
-
- ustack = (void*)((ptr_t)ustack - str_len);
- memcpy(ustack, (const void*)extra_arg, str_len);
+ if (argv) {
+ argv_len = args_ptr_size(argv);
+ ustack -= argv_len;
+
+ memcpy((void*)ustack, (const void**)argv, argv_len);
+ for (size_t i = 0; i < 2 && argv_extra[i]; i++) {
+ ustack -= sizeof(ptr_t);
+ *((ptr_t*)ustack) = (ptr_t)argv_extra[i];
+ argv_len += sizeof(ptr_t);
+ }
+
+ argv_ptr = ustack;
+ ustack = copy_to_ustack(ustack, (ptr_t*)ustack);