diff --git a/src/exec/exec.c b/src/exec/exec.c index b2fc733..e4cb18b 100644 --- a/src/exec/exec.c +++ b/src/exec/exec.c @@ -6,6 +6,7 @@ #include "../cmd/cmd.h" #include #include "../env/env.h" +#include "../../lib/bozolib/bozolib.h" int len(void** list) { @@ -94,3 +95,22 @@ int command_list_exec(cmd** cmds, lst** env) } return 0; } + +char* get_executable_path(char* executable, lst** env) +{ + int size_path_str; + char * path_file; + char* path_env = get_env_variable(env, "PATH"); + char** path_env_splited =split(path_env, ":"); + for (int i=0; path_env_splited[i] != NULL; i++) + { + size_path_str = strlen(path_env_splited[i])+strlen(executable); + path_file = malloc(size_path_str*sizeof(char*)); + strcpy(path_file, path_env_splited[i]); + strcat(path_file, executable); + if (access(path_file, X_OK) == 0) + return path_file; + free(path_file); + } + return NULL; +} diff --git a/src/exec/exec.h b/src/exec/exec.h index 6ffe2fd..86f8aac 100644 --- a/src/exec/exec.h +++ b/src/exec/exec.h @@ -1,5 +1,7 @@ #pragma once +int command_list_exec(cmd** cmds, lst** env) int execute(cmd* input, lst** env); int builtin_execute(cmd* input, lst** env); int piper(cmd** cmds, lst** env); +char* get_executable_path(char* executable, lst** env);