diff options
| author | Dominik Kaiser | 2024-05-08 12:03:16 +0200 |
|---|---|---|
| committer | Dominik Kaiser | 2024-05-08 12:03:16 +0200 |
| commit | 334aaa56cd3963f171afec6e852b9c07ad613828 (patch) | |
| tree | 1fa796501488d746f2d22c7bee80e5212dc830cc /src/get_cmd_path.c | |
| parent | e682f9bfb95b28c29665f24d15464cb26abf1127 (diff) | |
| download | pipex-334aaa56cd3963f171afec6e852b9c07ad613828.tar.gz pipex-334aaa56cd3963f171afec6e852b9c07ad613828.zip | |
Add freeing and make norminette happy
Diffstat (limited to 'src/get_cmd_path.c')
| -rw-r--r-- | src/get_cmd_path.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/get_cmd_path.c b/src/get_cmd_path.c new file mode 100644 index 0000000..749be18 --- /dev/null +++ b/src/get_cmd_path.c @@ -0,0 +1,72 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_cmd_path.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/08 11:35:47 by dkaiser #+# #+# */ +/* Updated: 2024/05/08 11:39:44 by dkaiser ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "pipex.h" + +static char *get_absolute_cmd_path(char *cmd, char *pwd) +{ + char *cur_dir; + char *result; + + cur_dir = ft_strjoin(pwd, "/"); + if (!cur_dir) + return (NULL); + result = ft_strjoin(cur_dir, cmd); + free(cur_dir); + if (!result) + return (NULL); + if (access(result, X_OK) == -1) + { + free(result); + return (NULL); + } + return (result); +} + +static char *get_cmd_path_with_args(char *cmd, char **path) +{ + int len; + char *lone_cmd; + char *cmd_path; + char *result; + + len = ft_strchr(cmd, ' ') - cmd + 1; + lone_cmd = malloc(len * sizeof(char)); + if (!lone_cmd) + return (NULL); + ft_strlcpy(lone_cmd, cmd, len); + cmd_path = find_in_path(lone_cmd, path); + free(lone_cmd); + if (!cmd_path) + return (NULL); + result = ft_strjoin(cmd_path, ft_strchr(cmd, ' ')); + free(cmd_path); + return (result); +} + +char *get_cmd_path(char *cmd, char **path, char *pwd) +{ + if (cmd[0] == '/') + return (ft_strdup(cmd)); + else if (ft_strchr(cmd, '/')) + { + return (get_absolute_cmd_path(cmd, pwd)); + } + else if (ft_strchr(cmd, ' ')) + { + return (get_cmd_path_with_args(cmd, path)); + } + else + { + return (find_in_path(cmd, path)); + } +} |
