Compare commits
2 Commits
23b12d2d56
...
6892fd96d0
Author | SHA1 | Date | |
---|---|---|---|
6892fd96d0 | |||
a4e430d35e |
@ -16,6 +16,33 @@ typedef struct
|
|||||||
size_t capacity;
|
size_t capacity;
|
||||||
} command;
|
} command;
|
||||||
|
|
||||||
|
char** split_command_into_argv(const char* cmd)
|
||||||
|
{
|
||||||
|
size_t argc = 1;
|
||||||
|
char* ptr = strdup(cmd);
|
||||||
|
char* endptr;
|
||||||
|
char** arr = calloc(sizeof(char*), argc);
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
endptr = strchr(ptr, ' ');
|
||||||
|
arr[argc - 1] = ptr;
|
||||||
|
if (endptr == NULL) break;
|
||||||
|
*endptr = 0;
|
||||||
|
ptr = endptr + 1;
|
||||||
|
if (*ptr)
|
||||||
|
{
|
||||||
|
argc++;
|
||||||
|
arr = realloc(arr, sizeof(char*) * argc);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
argc++;
|
||||||
|
arr = realloc(arr, sizeof(char*) * argc);
|
||||||
|
arr[argc - 1] = NULL;
|
||||||
|
return arr;
|
||||||
|
}
|
||||||
|
|
||||||
char* shell_concat_path(const char* dirname, const char* basename)
|
char* shell_concat_path(const char* dirname, const char* basename)
|
||||||
{
|
{
|
||||||
char* buf = malloc(strlen(basename) + strlen(dirname) + 6);
|
char* buf = malloc(strlen(basename) + strlen(dirname) + 6);
|
||||||
@ -137,9 +164,9 @@ void command_execute(command* cmd)
|
|||||||
}
|
}
|
||||||
if (child == 0)
|
if (child == 0)
|
||||||
{
|
{
|
||||||
char* argv[] = {cmd->buffer, NULL};
|
char** argv = split_command_into_argv(cmd->buffer);
|
||||||
shell_execvp(argv[0], argv);
|
shell_execvp(argv[0], argv);
|
||||||
perror(cmd->buffer);
|
perror(argv[0]);
|
||||||
exit(127);
|
exit(127);
|
||||||
}
|
}
|
||||||
pid_t result;
|
pid_t result;
|
||||||
|
@ -166,7 +166,10 @@ void sys_execv(Context* context, const char* pathname, char** argv)
|
|||||||
for (uint64_t i = 0; i <= kargc; i++)
|
for (uint64_t i = 0; i <= kargc; i++)
|
||||||
{
|
{
|
||||||
stack_size += sizeof(char*);
|
stack_size += sizeof(char*);
|
||||||
if (kargv[i]) { stack_size += strlen(kargv[i]); }
|
if (kargv[i])
|
||||||
|
{
|
||||||
|
stack_size += strlen(kargv[i]) + 1; // count the null byte
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stack_size >
|
if (stack_size >
|
||||||
|
Loading…
Reference in New Issue
Block a user