diff options
| author | Dominik Kaiser | 2024-05-02 16:47:43 +0200 |
|---|---|---|
| committer | Dominik Kaiser | 2024-05-02 16:47:43 +0200 |
| commit | babfb66a69e285c007699481dcba3661f8ac06f6 (patch) | |
| tree | b1d36ba55fdad878fad476dd26b0077cbfbe3a10 /src | |
| parent | d2a8f6c36047428a0cc5eafdada9ec9d6b1e912b (diff) | |
| download | pipex-input_handling.tar.gz pipex-input_handling.zip | |
Put env util functions in separate fileinput_handling
Diffstat (limited to 'src')
| -rw-r--r-- | src/env_utils.c | 78 | ||||
| -rw-r--r-- | src/input_handling.c | 63 |
2 files changed, 79 insertions, 62 deletions
diff --git a/src/env_utils.c b/src/env_utils.c new file mode 100644 index 0000000..6ad5ffc --- /dev/null +++ b/src/env_utils.c @@ -0,0 +1,78 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* env_utils.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/02 16:19:31 by dkaiser #+# #+# */ +/* Updated: 2024/05/02 16:22:34 by dkaiser ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "pipex.h" + +char **get_split_path(char *envp[]) +{ + char *path; + + while (!ft_strnstr(*envp, "PATH=", 5)) + envp++; + if (!*envp) + return (NULL); + path = *envp + 5; + return (ft_split(path, ':')); +} + +char *get_pwd(char *envp[]) +{ + while (!ft_strnstr(*envp, "PWD=", 4)) + envp++; + if (!*envp) + return (NULL); + return (*envp + 4); +} + +char *find_in_path(char *cmd, char **path) +{ + char *cur_path; + char *cmd_path; + + cmd_path = NULL; + while (*path) + { + if (cmd_path) + free(cmd_path); + cur_path = ft_strjoin(*path, "/"); + if (!cur_path) + return (NULL); + cmd_path = ft_strjoin(cur_path, cmd); + free(cur_path); + if (!cmd_path) + return (NULL); + if (access(cmd_path, X_OK) != -1) + return (cur_path); + path++; + } + return (NULL); +} + +char *get_cmd_path(char *cmd, char **path, char *pwd) +{ + char *cur_dir; + + if (cmd[0] == '/') + return (cmd); // TODO: Maybe use duplicate instead, + so there will be no problem on free() + else if (strchr(cmd, '/')) + { + cur_dir = ft_strjoin(pwd, "/"); + // TODO: Free on fail + // TODO: Maybe check if executable, else there might be a problem... + return (ft_strjoin(cur_dir, cmd)); + } + else + { + return (find_in_path(cmd, path)); + } +} diff --git a/src/input_handling.c b/src/input_handling.c index f6fa7f8..27b418e 100644 --- a/src/input_handling.c +++ b/src/input_handling.c @@ -6,7 +6,7 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/02 12:13:23 by dkaiser #+# #+# */ -/* Updated: 2024/05/02 15:36:43 by dkaiser ### ########.fr */ +/* Updated: 2024/05/02 16:42:01 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,67 +16,6 @@ #include <stdlib.h> #include <unistd.h> -static char **get_split_path(char *envp[]) -{ - char *path; - - while (!ft_strnstr(*envp, "PATH=", 5)) - envp++; - if (!*envp) - return (NULL); - path = *envp + 5; - return (ft_split(path, ':')); -} - -static char *get_pwd(char *envp[]) -{ - while (!ft_strnstr(*envp, "PWD=", 4)) - envp++; - if (!*envp) - return (NULL); - return (*envp + 4); -} - -static char *find_in_path(char *cmd, char **path) -{ - char *cur_path; - char *cmd_path; - - cmd_path = NULL; - while (*path) - { - if (cmd_path) - free(cmd_path); - cur_path = ft_strjoin(*path, "/"); - // TODO: Free on fail - cmd_path = ft_strjoin(cur_path, cmd); - free(cur_path); - if (access(cmd_path, X_OK) != -1) - return (cur_path); - path++; - } - return (NULL); -} - -static char *get_cmd_path(char *cmd, char **path, char *pwd) -{ - char *cur_dir; - - if (cmd[0] == '/') - return (cmd); // TODO: Maybe use duplicate instead, so there will be no problem on free() - else if (strchr(cmd, '/')) - { - cur_dir = ft_strjoin(pwd, "/"); - // TODO: Free on fail - // TODO: Maybe check if executable, else there might be a problem... - return (ft_strjoin(cur_dir, cmd)); - } - else - { - return (find_in_path(cmd, path)); - } -} - static char **get_cmds(int argc, char *argv[], char *envp[]) { char **cmds; |
