diff options
| author | nass1pro <nass1pro@gmail.com> | 2020-06-18 14:05:42 +0200 |
|---|---|---|
| committer | nass1pro <nass1pro@gmail.com> | 2020-06-18 14:05:42 +0200 |
| commit | 1e53dcdbd4f94a11a6d23687bc518fdd8aee0bd9 (patch) | |
| tree | 64c9fdfb2f9d055404d72160e9d0f679809e7426 /src/ms_glob.c | |
| parent | 70459a3ab97b13df9bf829e29ed91becfba1ea03 (diff) | |
| parent | 52bc3c1a6035dae4e45015c48a8c65681a31512a (diff) | |
| download | minishell-1e53dcdbd4f94a11a6d23687bc518fdd8aee0bd9.tar.gz minishell-1e53dcdbd4f94a11a6d23687bc518fdd8aee0bd9.tar.bz2 minishell-1e53dcdbd4f94a11a6d23687bc518fdd8aee0bd9.zip | |
Merge branch 'master' into parse_cmd
Diffstat (limited to 'src/ms_glob.c')
| -rw-r--r-- | src/ms_glob.c | 27 |
1 files changed, 25 insertions, 2 deletions
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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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); } |
