diff options
Diffstat (limited to 'progs')
-rw-r--r-- | progs/shel/shel.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/progs/shel/shel.c b/progs/shel/shel.c index d0f4dae..a9eeeba 100644 --- a/progs/shel/shel.c +++ b/progs/shel/shel.c @@ -65,24 +65,26 @@ void joinPath(char *result, const char *base, const char *rel) { strcat(result, rel); } -const char *get_env_var(const char *name, char *const *env) { - size_t len = strlen(name); - - for (char *const *e = env; *e; e++) { // loop over every env - if (strncmp(*e, name, len) == 0 && (*e)[len] == '=') { //if starts with name - return *e + len + 1; // return shit after = - } - } - return NULL; -} - int main() { char input[255] = {0}; char command[128] = {0}; char *argv[32] = {0}; - char *env[32] = {"PATH=/bin"}; char path[128] = "/"; + char termpcap[512] = "vt102|smolsh|dec vt102:\ + :do=^J:co#80:li#24:cl=50\\E[;H\\E[2J:\ + :le=^H:bs:cm=5\\E[%i%d;%dH:nd=2\\E[C:up=2\\E[A:\ + :ce=3\\E[K:cd=50\\E[J:so=2\\E[7m:se=2\\E[m:us=2\\E[4m:ue=2\\E[m:\ + :md=2\\E[1m:mr=2\\E[7m:mb=2\\E[5m:me=2\\E[m:is=\\E[1;24r\\E[24;1H:\ + :rs=\\E>\\E[?3l\\E[?4l\\E[?5l\\E[?7h\\E[?8h:ks=\\E[?1h\\E=:ke=\\E[?1l\\E>:\ + :ku=\\EOA:kd=\\EOB:kr=\\EOC:kl=\\EOD:kb=^H:\ + :ho=\\E[H:k1=\\EOP:k2=\\EOQ:k3=\\EOR:k4=\\EOS:pt:sr=5\\EM:vt#3:\ + :sc=\\E7:rc=\\E8:cs=\\E[%i%d;%dr:vs=\\E[?7l:ve=\\E[?7h:\ + :mi:al=\\E[L:dc=\\E[P:dl=\\E[M:ei=\\E[4l:im=\\E[4h:"; + + setenv("TERMCAP", termpcap, 1); + setenv("PATH", "/bin", 0); + while (!false) { memset(input, 0, sizeof(input)); memset(command, 0, sizeof(command)); @@ -119,12 +121,12 @@ int main() { chdir(path); __pid_t forkResult = fork(); if (forkResult == 0) { - // algorithm from old shel since i made it on my own - const char* pathV = get_env_var("PATH", env); + char* pathV = getenv("PATH"); struct stat path_stat; if (stat(command, &path_stat) == 0 && access(command, X_OK)){ execve(command, argv, 0); } else { + // algorithm from old shel since i made it on my own bool found = false; char currPath[32] = {0}; int i = 0; |