From 0475dcbf969271f02e193f36f1d5620909621219 Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 17 Jun 2020 14:44:21 +0200 Subject: Fixing (mostly) glob with absolute path --- minishell_test | 2 +- print_argv_env_main.c | 18 ++++++++++++------ src/ms_glob.c | 27 +++++++++++++++++++++++++-- src/utils.c | 2 +- 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/minishell_test b/minishell_test index b636afa..d845a68 160000 --- a/minishell_test +++ b/minishell_test @@ -1 +1 @@ -Subproject commit b636afa67abd97c61259071922d2f4f6f34a60b7 +Subproject commit d845a683e67a89c699109dab660f6ec0eb74a2c4 diff --git a/print_argv_env_main.c b/print_argv_env_main.c index dcc6e0e..4011275 100644 --- a/print_argv_env_main.c +++ b/print_argv_env_main.c @@ -1,12 +1,18 @@ #include +#include +#include int main(int argc, char **argv, char **envp) { - printf("ARGV:\n"); - for (int i = 0; i < argc; i++) - printf("[%d] %s\n", i, argv[i]); - printf("\nENV:\n"); - for (int i = 0; envp[i] != NULL && i < 10; i++) - printf("[%d] %s\n", i, envp[i]); + char buf[PATH_MAX]; + + getcwd(buf, PATH_MAX); + printf("%s\n", buf); + /* printf("ARGV:\n"); */ + /* for (int i = 0; i < argc; i++) */ + /* printf("[%d] %s\n", i, argv[i]); */ + /* printf("\nENV:\n"); */ + /* for (int i = 0; envp[i] != NULL && i < 10; i++) */ + /* printf("[%d] %s\n", i, envp[i]); */ return 0; } diff --git a/src/ms_glob.c b/src/ms_glob.c index 39c537c..dae2bd8 100644 --- a/src/ms_glob.c +++ b/src/ms_glob.c @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/05 11:44:07 by charles #+# #+# */ -/* Updated: 2020/06/12 11:51:41 by charles ### ########.fr */ +/* Updated: 2020/06/17 14:39:52 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -111,23 +111,46 @@ t_ftvec *glob_matches(char *pattern) { char dirname[PATH_MAX]; struct s_glob_param param; + bool absolute; + size_t i; if (getcwd(dirname, PATH_MAX) == NULL) return (NULL); + absolute = *pattern == '/'; + if (*pattern == '/') + pattern++; if ((param.pattern = ft_strdup(pattern)) == NULL || (param.matches = ft_vecnew(MATCHES_VEC_START_SIZE)) == NULL) { free(param.pattern); return (NULL); } - if (utils_directory_iter(dirname, ¶m, + if (absolute) + chdir("/"); + if (utils_directory_iter(absolute ? "/" : dirname, ¶m, (t_directory_iter_func)glob_iter) == -1) { + chdir(dirname); free(param.pattern); ft_vecdestroy(param.matches, free); return (NULL); } + chdir(dirname); free(param.pattern); + if (absolute) + { + i = 0; + while (i < param.matches->size) + { + param.matches->data[i] = ft_strjoinf("/", param.matches->data[i], FT_STRJOINF_SND); + if (param.matches->data[i] == NULL) + { + ft_vecdestroy(param.matches, free); + return (NULL); + } + i++; + } + } return (param.matches); } diff --git a/src/utils.c b/src/utils.c index 3449c25..6de97c0 100644 --- a/src/utils.c +++ b/src/utils.c @@ -6,7 +6,7 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/28 11:56:31 by cacharle #+# #+# */ -/* Updated: 2020/06/09 15:49:39 by charles ### ########.fr */ +/* Updated: 2020/06/17 14:43:07 by charles ### ########.fr */ /* */ /* ************************************************************************** */ -- cgit