aboutsummaryrefslogtreecommitdiff
path: root/src/ms_glob.c
diff options
context:
space:
mode:
authornass1pro <nass1pro@gmail.com>2020-06-18 14:05:42 +0200
committernass1pro <nass1pro@gmail.com>2020-06-18 14:05:42 +0200
commit1e53dcdbd4f94a11a6d23687bc518fdd8aee0bd9 (patch)
tree64c9fdfb2f9d055404d72160e9d0f679809e7426 /src/ms_glob.c
parent70459a3ab97b13df9bf829e29ed91becfba1ea03 (diff)
parent52bc3c1a6035dae4e45015c48a8c65681a31512a (diff)
downloadminishell-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.c27
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, &param,
+ if (absolute)
+ chdir("/");
+ if (utils_directory_iter(absolute ? "/" : dirname, &param,
(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);
}