aboutsummaryrefslogtreecommitdiff
path: root/src/ms_glob.c
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-06-17 14:44:21 +0200
committerCharles <sircharlesaze@gmail.com>2020-06-17 14:44:21 +0200
commit0475dcbf969271f02e193f36f1d5620909621219 (patch)
treefe9b59880fa55620406ae1e6bb9fa25b08bd016b /src/ms_glob.c
parenta1704494c323177d4c4d8cf822aa80297181c4fe (diff)
downloadminishell-0475dcbf969271f02e193f36f1d5620909621219.tar.gz
minishell-0475dcbf969271f02e193f36f1d5620909621219.tar.bz2
minishell-0475dcbf969271f02e193f36f1d5620909621219.zip
Fixing (mostly) glob with absolute path
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);
}