blob: 42fd2c18db523348d640deb673c9222455c986dc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#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());
}
|