Compare commits
No commits in common. "6892fd96d02424b9c2c136b304146c45327e685f" and "23b12d2d567f26ab71a16ac4b66a77bfcda11c3c" have entirely different histories.
6892fd96d0
...
23b12d2d56
@ -16,33 +16,6 @@ typedef struct
|
||||
size_t capacity;
|
||||
} 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* buf = malloc(strlen(basename) + strlen(dirname) + 6);
|
||||
@ -164,9 +137,9 @@ void command_execute(command* cmd)
|
||||
}
|
||||
if (child == 0)
|
||||
{
|
||||
char** argv = split_command_into_argv(cmd->buffer);
|
||||
char* argv[] = {cmd->buffer, NULL};
|
||||
shell_execvp(argv[0], argv);
|
||||
perror(argv[0]);
|
||||
perror(cmd->buffer);
|
||||
exit(127);
|
||||
}
|
||||
pid_t result;
|
||||
|
@ -166,10 +166,7 @@ void sys_execv(Context* context, const char* pathname, char** argv)
|
||||
for (uint64_t i = 0; i <= kargc; i++)
|
||||
{
|
||||
stack_size += sizeof(char*);
|
||||
if (kargv[i])
|
||||
{
|
||||
stack_size += strlen(kargv[i]) + 1; // count the null byte
|
||||
}
|
||||
if (kargv[i]) { stack_size += strlen(kargv[i]); }
|
||||
}
|
||||
|
||||
if (stack_size >
|
||||
|
Loading…
Reference in New Issue
Block a user