#include "exec.h" #include "../sys/execve.h" #include "../env/env.h" #include "../cstr/cstr.h" #include "../malloc/malloc.h" int exec(const char **argv) { const char *path = getenv("PATH"); const char *end; char *filename; while (*path) { end = path; while (*end && *end != ':') ++end; filename = malloc((end - path) + cstr_length(argv[0]) + 2); for (int i = 0; i < end - path; ++i) filename[i] = path[i]; filename[end - path] = '/'; for (int i = 0; i < cstr_length(argv[0]) + 1; ++i) filename[(end - path) + i + 1] = argv[0][i]; execve(filename, argv, getenvp()); free(filename); path = end; if (*path == ':') ++path; } return execve(argv[0], argv, getenvp()); }