Merge branch 'master' of https://github.com/jzck/42sh
"tk_bang && brace_clause"
This commit is contained in:
commit
2229354793
5 changed files with 44 additions and 7 deletions
|
|
@ -33,6 +33,7 @@ typedef struct s_glob
|
|||
unsigned char *esc;
|
||||
unsigned char *esc2;
|
||||
t_ld *match;
|
||||
t_ld *match_tmp;
|
||||
t_ld *m_pat;
|
||||
} t_glob;
|
||||
|
||||
|
|
|
|||
|
|
@ -216,7 +216,7 @@ void ft_ld_reverse(t_ld **lst);
|
|||
t_ld *ft_ld_back(t_ld *ld);
|
||||
t_ld *ft_ld_swap(t_ld *l_cur);
|
||||
char **ft_ld_to_tab(t_ld *ld);
|
||||
t_ld *ft_ld_order(t_ld *ld, int (*f)(), void (*del)());
|
||||
t_ld *ft_ld_order(t_ld *ld, int (*f)());
|
||||
t_ld *ft_ld_copy(t_ld *src, void *(*f)(void *elem));
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ static void dir_list_content(t_glob *gl, char **str, char *pat,
|
|||
if (match_pattern(gl, str[1], path_tmp))
|
||||
{
|
||||
gl->found = 1;
|
||||
ft_ld_pushfront(&gl->match, ft_strdup(path_tmp + gl->cur_dir * 2 *
|
||||
ft_ld_pushfront(&gl->match_tmp, ft_strdup(path_tmp + gl->cur_dir * 2 *
|
||||
(path_tmp[0] == '.' && path_tmp[1] == '/')));
|
||||
}
|
||||
gl->pat = pat;
|
||||
|
|
@ -54,7 +54,7 @@ int dir_research(t_glob *gl, char *p,
|
|||
if (!pat)
|
||||
{
|
||||
gl->found = 1;
|
||||
ft_ld_pushfront(&gl->match, ft_strjoin(p, "/"));
|
||||
ft_ld_pushfront(&gl->match_tmp, ft_strjoin(p, "/"));
|
||||
return (0);
|
||||
}
|
||||
if ((ft_strlen(p) <= 1 || p[ft_strlen(p) - 1] != '.') && is_directory(p))
|
||||
|
|
|
|||
|
|
@ -22,6 +22,40 @@
|
|||
** to just expanse in local directory and not in path dir
|
||||
*/
|
||||
|
||||
static int order_glob(const char *s1, const char *s2)
|
||||
{
|
||||
char c1;
|
||||
char c2;
|
||||
|
||||
if (!s1 || !s2)
|
||||
return (1);
|
||||
c1 = ft_tolower(*s1++);
|
||||
c2 = ft_tolower(*s2++);
|
||||
if (!c1)
|
||||
return (-(c1 - c2));
|
||||
while (c1 == c2)
|
||||
{
|
||||
c1 = ft_tolower(*s1++);
|
||||
c2 = ft_tolower(*s2++);
|
||||
if (!c1)
|
||||
return (-(c1 - c2));
|
||||
}
|
||||
return (-(c1 - c2));
|
||||
}
|
||||
|
||||
static void merge_ld_glob(t_ld **match, t_ld **tmp)
|
||||
{
|
||||
t_ld *ultimate;
|
||||
|
||||
*tmp = ft_ld_order(*tmp, &order_glob);
|
||||
ultimate = ft_ld_back(*tmp);
|
||||
ultimate->next = *match;
|
||||
if (*match)
|
||||
(*match)->prev = ultimate;
|
||||
*match = *tmp;
|
||||
*tmp = NULL;
|
||||
}
|
||||
|
||||
static char **treat_glob(t_glob *gl)
|
||||
{
|
||||
char **ret;
|
||||
|
|
@ -54,7 +88,7 @@ char **glob(char *pat, unsigned char *esc,
|
|||
|
||||
len = ft_strlen(pat);
|
||||
gl = (t_glob){0, 0, ft_strdup(pat), dup_char_esc(esc, (len >> 3) + 1),
|
||||
dup_char_esc(esc2, (len >> 3) + 1), NULL, NULL};
|
||||
dup_char_esc(esc2, (len >> 3) + 1), NULL, NULL, NULL};
|
||||
normal_expand_before_match(&gl, do_match);
|
||||
if (do_match)
|
||||
while (gl.m_pat && !(gl.found = 0))
|
||||
|
|
@ -67,6 +101,8 @@ char **glob(char *pat, unsigned char *esc,
|
|||
dir_research(&gl, "/", gl.pat + 1, 0);
|
||||
if (!gl.found)
|
||||
ft_ld_pushfront(&gl.match, ft_strdup(CH(gl.m_pat)[0]));
|
||||
else
|
||||
merge_ld_glob(&gl.match, &gl.match_tmp);
|
||||
if (!gl.m_pat->next)
|
||||
break ;
|
||||
gl.m_pat = gl.m_pat->next;
|
||||
|
|
|
|||
|
|
@ -12,12 +12,14 @@
|
|||
|
||||
#include "minishell.h"
|
||||
|
||||
t_ld *ft_ld_order(t_ld *ld, int (*f)(), void (*del)())
|
||||
t_ld *ft_ld_order(t_ld *ld, int (*f)())
|
||||
{
|
||||
int swap;
|
||||
|
||||
swap = 1;
|
||||
ld = ft_ld_front(ld);
|
||||
if (!f)
|
||||
return (ld);
|
||||
while (swap)
|
||||
{
|
||||
swap = 0;
|
||||
|
|
@ -25,8 +27,6 @@ t_ld *ft_ld_order(t_ld *ld, int (*f)(), void (*del)())
|
|||
{
|
||||
if (f(ld->content, ld->next->content) > 0 && (swap = 1))
|
||||
ld = ft_ld_swap(ld);
|
||||
else if (!f(ld->content, ld->next->content))
|
||||
ft_ld_del(&ld, del);
|
||||
ld = ld->next;
|
||||
}
|
||||
ld = ft_ld_front(ld);
|
||||
|
|
|
|||
Loading…
Reference in a new issue