rectif nombreuses issues + ajout de l'expansion des backquote
This commit is contained in:
parent
97b1dc268f
commit
169aa62b7e
11 changed files with 102 additions and 130 deletions
|
|
@ -85,6 +85,7 @@ exec/redirect_lessand.c\
|
||||||
exec/set_exitstatus.c\
|
exec/set_exitstatus.c\
|
||||||
glob/dir_glob.c\
|
glob/dir_glob.c\
|
||||||
glob/esc_print.c\
|
glob/esc_print.c\
|
||||||
|
glob/expand_bquote.c\
|
||||||
glob/expand_brace.c\
|
glob/expand_brace.c\
|
||||||
glob/expand_esc.c\
|
glob/expand_esc.c\
|
||||||
glob/expand_var.c\
|
glob/expand_var.c\
|
||||||
|
|
|
||||||
18
42sh/file
18
42sh/file
|
|
@ -1,18 +0,0 @@
|
||||||
4
|
|
||||||
42sh
|
|
||||||
Makefile
|
|
||||||
Session.vim
|
|
||||||
debug
|
|
||||||
donovan_segaults_06-02
|
|
||||||
file
|
|
||||||
file1
|
|
||||||
file2
|
|
||||||
file3
|
|
||||||
includes
|
|
||||||
libft
|
|
||||||
objs
|
|
||||||
out
|
|
||||||
pdf
|
|
||||||
script.sh
|
|
||||||
src
|
|
||||||
update_makefile.sh
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/01/04 16:31:18 by wescande #+# #+# */
|
/* Created: 2017/01/04 16:31:18 by wescande #+# #+# */
|
||||||
/* Updated: 2017/02/17 15:42:09 by jhalford ### ########.fr */
|
/* Updated: 2017/02/20 14:10:48 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -82,6 +82,7 @@ unsigned char *calc_expand_esc(const unsigned char *esc,
|
||||||
void modify_esc_split(unsigned char *esc_dest,
|
void modify_esc_split(unsigned char *esc_dest,
|
||||||
unsigned char *esc_src, int start, int len);
|
unsigned char *esc_src, int start, int len);
|
||||||
void expand_brace(t_glob *tglob);
|
void expand_brace(t_glob *tglob);
|
||||||
|
void expand_bquote(t_glob *gl);
|
||||||
void expand_var(t_glob *tglob);
|
void expand_var(t_glob *tglob);
|
||||||
int match_pattern(t_glob *tglob, char *str, char *full_word);
|
int match_pattern(t_glob *tglob, char *str, char *full_word);
|
||||||
int dir_research(t_glob *tglob, char *p, char *pat, int rec);
|
int dir_research(t_glob *tglob, char *p, char *pat, int rec);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/17 17:47:53 by wescande #+# #+# */
|
/* Created: 2017/02/17 17:47:53 by wescande #+# #+# */
|
||||||
/* Updated: 2017/02/17 18:18:36 by wescande ### ########.fr */
|
/* Updated: 2017/02/20 15:26:26 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -18,113 +18,94 @@
|
||||||
** -t_glob *gl -> struct of expanding
|
** -t_glob *gl -> struct of expanding
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static char **gen_tab(const char *pat,
|
static void insert_bquote(t_glob *gl, char *pos, char *name, char *content)
|
||||||
const unsigned char *esc, int dup)
|
|
||||||
{
|
{
|
||||||
char **my_tab;
|
char *s1;
|
||||||
|
char *s2;
|
||||||
|
int delta;
|
||||||
|
unsigned char *new_esc;
|
||||||
|
|
||||||
if (!(my_tab = (char **)malloc(sizeof(char *) * 3)))
|
delta = pos - gl->pat;
|
||||||
return (NULL);
|
s1 = ft_strsub(gl->pat, 0, delta);
|
||||||
if (dup)
|
delta += ft_strlen(name) + 1;
|
||||||
{
|
s2 = ft_strsubf(gl->pat, delta, ft_strlen(gl->pat) - delta, 1);
|
||||||
my_tab[0] = ft_strdup(pat);
|
gl->pat = ft_strjoinf(ft_strjoin(s1, content), s2, 1);
|
||||||
my_tab[1] = ft_strdup((const char *)esc);
|
new_esc = calc_expand_esc(gl->esc, ft_strlen(s1),
|
||||||
}
|
(int [2]){ft_strlen(content), 1},
|
||||||
else
|
(int [2]){delta, ft_strlen(s2)});
|
||||||
{
|
ft_memdel((void **)&gl->esc);
|
||||||
my_tab[0] = (char *)pat;
|
gl->esc = new_esc;
|
||||||
my_tab[1] = (char *)esc;
|
new_esc = calc_expand_esc(gl->esc2, ft_strlen(s1),
|
||||||
}
|
(int [2]){ft_strlen(content), 1},
|
||||||
my_tab[2] = NULL;
|
(int [2]){delta, ft_strlen(s2)});
|
||||||
return (my_tab);
|
ft_memdel((void **)&gl->esc2);
|
||||||
|
gl->esc2 = new_esc;
|
||||||
|
ft_strdel(&s1);
|
||||||
|
ft_strdel(&s2);
|
||||||
|
ft_strdel(&content);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void iter_on_each(t_expand *me)
|
static void manage_bquote(int esc, char *str)
|
||||||
{
|
{
|
||||||
int i;
|
int len;
|
||||||
char **my_new;
|
char *ifs;
|
||||||
char *first;
|
char *pos;
|
||||||
unsigned char *second;
|
|
||||||
t_ld *wk_tmp;
|
|
||||||
|
|
||||||
i = ft_tablen(me->split);
|
len = ft_strlen(str) - 1;
|
||||||
wk_tmp = *me->wk;
|
while (str[len] == '\n')
|
||||||
while (i--)
|
|
||||||
{
|
{
|
||||||
first = ft_strjoinf(ft_strjoin(me->s1, me->split[i]), me->str + 1, 1);
|
str[len--] = '\0';
|
||||||
second = calc_expand_esc(me->esc,
|
|
||||||
ft_strlen(me->s1),
|
|
||||||
(int [2]){ft_strlen(me->split[i]), 0},
|
|
||||||
(int [2]){me->str - CH(*me->wk)[0], ft_strlen(me->str + 1)});
|
|
||||||
modify_esc_split(second, me->m_esc[i],
|
|
||||||
ft_strlen(me->s1), ft_strlen(me->split[i]));
|
|
||||||
my_new = gen_tab(first, second, 0);
|
|
||||||
ft_ld_pushfront(&wk_tmp, my_new);
|
|
||||||
}
|
}
|
||||||
me->wk = &wk_tmp;
|
ifs = esc ? NULL : ft_getenv(data_singleton()->env, "IFS");
|
||||||
}
|
if (ifs)
|
||||||
|
|
||||||
static int init_expand(t_expand *me, char *start)
|
|
||||||
{
|
|
||||||
unsigned char *esc;
|
|
||||||
|
|
||||||
me->s1 = ft_strsub(start, 1, me->str - start - 1);
|
|
||||||
esc = ft_sub_esc(me->esc, start - CH(*me->wk)[0] + 1, me->str - start);
|
|
||||||
me->split = ft_strsplit_spe(me->s1, esc, ',');
|
|
||||||
me->m_esc = ft_strsplit_esc(me->s1, esc, ',');
|
|
||||||
ft_strdel(&me->s1);
|
|
||||||
ft_strdel((char **)&esc);
|
|
||||||
me->s1 = ft_strsub(CH(*me->wk)[0], 0, start - CH(*me->wk)[0]);
|
|
||||||
iter_on_each(me);
|
|
||||||
ft_strdel(&me->s1);
|
|
||||||
ft_tabdel(&me->split);
|
|
||||||
ft_tabdel((char ***)&me->m_esc);
|
|
||||||
return (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int search_bquote(t_expand *me)
|
|
||||||
{
|
|
||||||
char *start;
|
|
||||||
|
|
||||||
start = NULL;
|
|
||||||
while (*me->str)
|
|
||||||
{
|
{
|
||||||
start = *me->str == '`' && !is_char_esc(me->esc, CH(*me->wk)[0],
|
while (*ifs)
|
||||||
me->str) && !start ? me->str : start;
|
|
||||||
if (start && start != me->str &&
|
|
||||||
*me->str == '`' && !is_char_esc(me->esc, CH(*me->wk)[0], me->str))
|
|
||||||
{
|
{
|
||||||
return (init_expand(me, start));
|
while ((pos = ft_strchr(str, *ifs)))
|
||||||
// set_char_esc(me->esc, CH(*me->wk)[0], start);
|
*pos = ' ';
|
||||||
// set_char_esc(me->esc, CH(*me->wk)[0], me->str);
|
++ifs;
|
||||||
// return (2);
|
|
||||||
}
|
}
|
||||||
++me->str;
|
|
||||||
}
|
}
|
||||||
return (0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *get_cmd(t_glob *gl, const char *pat)
|
||||||
|
{
|
||||||
|
const char *str;
|
||||||
|
|
||||||
|
str = pat;
|
||||||
|
while (*str)
|
||||||
|
{
|
||||||
|
if (*str == '`' && !is_char_esc(gl->esc2, gl->pat, str))
|
||||||
|
break ;
|
||||||
|
++str;
|
||||||
|
}
|
||||||
|
if (*str)
|
||||||
|
return (ft_strsub(pat, 0, str - pat));
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void expand_bquote(t_glob *gl)
|
void expand_bquote(t_glob *gl)
|
||||||
{
|
{
|
||||||
t_ld *tmp;
|
char *pat;
|
||||||
int do_it;
|
char *var;
|
||||||
t_expand me;
|
char *content;
|
||||||
|
|
||||||
me = (t_expand){NULL, NULL, NULL, NULL, NULL, NULL};
|
pat = gl->pat;
|
||||||
do_it = 1;
|
while (*pat)
|
||||||
while (do_it)
|
|
||||||
{
|
{
|
||||||
do_it = 0;
|
if (*pat == '`' && !is_char_esc(gl->esc2, gl->pat, pat) &&
|
||||||
while (gl->m_pat->next && !do_it)
|
(var = get_cmd(gl, pat + 1)))
|
||||||
{
|
{
|
||||||
me.wk = &gl->m_pat;
|
if (ft_strlen(var))
|
||||||
me.esc = UCH(gl->m_pat)[1];
|
{
|
||||||
me.str = CH(gl->m_pat)[0];
|
if ((content = command_getoutput(var)))
|
||||||
if ((tmp = gl->m_pat) &&
|
manage_bquote(is_char_esc(gl->esc, gl->pat, pat), content);
|
||||||
(do_it = search_bquote(&me)) == 1)
|
insert_bquote(gl, pat, var, content);
|
||||||
ft_ld_del(&tmp, &ft_tabdel);
|
pat = gl->pat;
|
||||||
gl->m_pat = gl->m_pat->next;
|
}
|
||||||
|
ft_strdel(&var);
|
||||||
}
|
}
|
||||||
gl->m_pat = ft_ld_front(gl->m_pat);
|
++pat;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/01/12 19:00:29 by wescande #+# #+# */
|
/* Created: 2017/01/12 19:00:29 by wescande #+# #+# */
|
||||||
/* Updated: 2017/02/07 16:10:20 by wescande ### ########.fr */
|
/* Updated: 2017/02/20 14:05:20 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -61,7 +61,7 @@ static void iter_on_each(t_expand *me)
|
||||||
modify_esc_split(second, me->m_esc[i],
|
modify_esc_split(second, me->m_esc[i],
|
||||||
ft_strlen(me->s1), ft_strlen(me->split[i]));
|
ft_strlen(me->s1), ft_strlen(me->split[i]));
|
||||||
my_new = gen_tab(first, second, 0);
|
my_new = gen_tab(first, second, 0);
|
||||||
ft_ld_pushfront(&wk_tmp, my_new);
|
ft_ld_pushfront(me->wk, my_new);
|
||||||
}
|
}
|
||||||
me->wk = &wk_tmp;
|
me->wk = &wk_tmp;
|
||||||
}
|
}
|
||||||
|
|
@ -87,22 +87,23 @@ static int init_expand(t_expand *me, char *start)
|
||||||
static int search_brace(t_expand *me)
|
static int search_brace(t_expand *me)
|
||||||
{
|
{
|
||||||
char *start;
|
char *start;
|
||||||
int comma;
|
int com;
|
||||||
int nb;
|
int nb;
|
||||||
|
|
||||||
start = NULL;
|
start = NULL;
|
||||||
nb = 0;
|
nb = 0;
|
||||||
comma = 0;
|
com = 0;
|
||||||
while (*me->str)
|
while (*me->str)
|
||||||
{
|
{
|
||||||
start = *me->str == '{' && !is_char_esc(me->esc, CH(*me->wk)[0],
|
start = *me->str == '{' && !is_char_esc(me->esc, CH(*me->wk)[0],
|
||||||
me->str) && nb == 0 ? me->str : start;
|
me->str) && nb == 0 ? me->str : start;
|
||||||
nb += *me->str == '{' && !is_char_esc(me->esc, CH(*me->wk)[0], me->str);
|
nb += *me->str == '{' && !is_char_esc(me->esc, CH(*me->wk)[0], me->str);
|
||||||
nb -= *me->str == '}' && !is_char_esc(me->esc, CH(*me->wk)[0], me->str);
|
nb -= *me->str == '}' && !is_char_esc(me->esc, CH(*me->wk)[0], me->str);
|
||||||
comma += *me->str == ',' && nb == 1;
|
com += *me->str == ',' && !is_char_esc(me->esc, CH(*me->wk)[0], me->str)
|
||||||
|
&& nb == 1;
|
||||||
if (!nb && start)
|
if (!nb && start)
|
||||||
{
|
{
|
||||||
if (comma)
|
if (com)
|
||||||
return (init_expand(me, start));
|
return (init_expand(me, start));
|
||||||
set_char_esc(me->esc, CH(*me->wk)[0], start);
|
set_char_esc(me->esc, CH(*me->wk)[0], start);
|
||||||
set_char_esc(me->esc, CH(*me->wk)[0], me->str);
|
set_char_esc(me->esc, CH(*me->wk)[0], me->str);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/06 16:09:27 by wescande #+# #+# */
|
/* Created: 2017/02/06 16:09:27 by wescande #+# #+# */
|
||||||
/* Updated: 2017/02/07 17:18:33 by wescande ### ########.fr */
|
/* Updated: 2017/02/20 15:24:34 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -29,7 +29,7 @@ static void insert_var(t_glob *gl, char *pos, char *name, char *content)
|
||||||
s1 = ft_strsub(gl->pat, 0, delta);
|
s1 = ft_strsub(gl->pat, 0, delta);
|
||||||
delta += ft_strlen(name) + 1;
|
delta += ft_strlen(name) + 1;
|
||||||
s2 = ft_strsubf(gl->pat, delta, ft_strlen(gl->pat) - delta, 1);
|
s2 = ft_strsubf(gl->pat, delta, ft_strlen(gl->pat) - delta, 1);
|
||||||
gl->pat = ft_strjoinf(ft_strjoinf(s1, content, 1), s2, 3);
|
gl->pat = ft_strjoinf(ft_strjoin(s1, content), s2, 1);
|
||||||
new_esc = calc_expand_esc(gl->esc, ft_strlen(s1),
|
new_esc = calc_expand_esc(gl->esc, ft_strlen(s1),
|
||||||
(int [2]){ft_strlen(content), 1},
|
(int [2]){ft_strlen(content), 1},
|
||||||
(int [2]){delta, ft_strlen(s2)});
|
(int [2]){delta, ft_strlen(s2)});
|
||||||
|
|
@ -40,6 +40,9 @@ static void insert_var(t_glob *gl, char *pos, char *name, char *content)
|
||||||
(int [2]){delta, ft_strlen(s2)});
|
(int [2]){delta, ft_strlen(s2)});
|
||||||
ft_memdel((void **)&gl->esc2);
|
ft_memdel((void **)&gl->esc2);
|
||||||
gl->esc2 = new_esc;
|
gl->esc2 = new_esc;
|
||||||
|
ft_strdel(&s1);
|
||||||
|
ft_strdel(&s2);
|
||||||
|
ft_strdel(&content);
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *get_name(t_glob *gl, const char *pat)
|
static char *get_name(t_glob *gl, const char *pat)
|
||||||
|
|
@ -49,11 +52,11 @@ static char *get_name(t_glob *gl, const char *pat)
|
||||||
str = pat;
|
str = pat;
|
||||||
if (ft_isdigit(*str))
|
if (ft_isdigit(*str))
|
||||||
return (ft_strsub(pat, 0, str - pat + 1));
|
return (ft_strsub(pat, 0, str - pat + 1));
|
||||||
|
if (*str == '?')
|
||||||
|
return (ft_strsub(pat, 0, str - pat + 1));
|
||||||
while ((ft_isalnum(*str) || *str == '_' || *str == '-')
|
while ((ft_isalnum(*str) || *str == '_' || *str == '-')
|
||||||
&& !is_char_esc(gl->esc2, gl->pat, str))
|
&& !is_char_esc(gl->esc2, gl->pat, str))
|
||||||
++str;
|
++str;
|
||||||
if (is_char_esc(gl->esc2, gl->pat, str))
|
|
||||||
return (ft_strsub(pat, 0, str - pat));
|
|
||||||
return (ft_strsub(pat, 0, str - pat));
|
return (ft_strsub(pat, 0, str - pat));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/01/31 20:49:30 by wescande #+# #+# */
|
/* Created: 2017/01/31 20:49:30 by wescande #+# #+# */
|
||||||
/* Updated: 2017/01/31 23:15:41 by wescande ### ########.fr */
|
/* Updated: 2017/02/20 12:37:12 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -76,6 +76,7 @@ char **ft_strsplit_spe(const char *str,
|
||||||
if (!(s1[i] = (char*)malloc(sizeof(**s1) * (len + 1))))
|
if (!(s1[i] = (char*)malloc(sizeof(**s1) * (len + 1))))
|
||||||
return (NULL);
|
return (NULL);
|
||||||
ft_strncpy(s1[i], str, len);
|
ft_strncpy(s1[i], str, len);
|
||||||
|
s1[i][len] = '\0';
|
||||||
str = str + len;
|
str = str + len;
|
||||||
++i;
|
++i;
|
||||||
while (*str && *str == c)
|
while (*str && *str == c)
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/01/04 16:29:54 by wescande #+# #+# */
|
/* Created: 2017/01/04 16:29:54 by wescande #+# #+# */
|
||||||
/* Updated: 2017/02/17 17:47:27 by wescande ### ########.fr */
|
/* Updated: 2017/02/20 14:19:46 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -43,9 +43,9 @@ char **glob(char *pat, unsigned char *esc,
|
||||||
gl = (t_glob){0, 0, ft_strdup(pat), dup_char_esc(esc, (len >> 3) + 1),
|
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};
|
||||||
expand_var(&gl);
|
expand_var(&gl);
|
||||||
|
expand_bquote(&gl);
|
||||||
ft_memdel((void **)&gl.esc2);
|
ft_memdel((void **)&gl.esc2);
|
||||||
expand_brace(&gl);
|
expand_brace(&gl);
|
||||||
expand_bquote(&gl);
|
|
||||||
while (gl.m_pat->next && !(gl.found = 0))
|
while (gl.m_pat->next && !(gl.found = 0))
|
||||||
{
|
{
|
||||||
gl.cur_dir = 1;
|
gl.cur_dir = 1;
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/01/24 17:30:23 by wescande #+# #+# */
|
/* Created: 2017/01/24 17:30:23 by wescande #+# #+# */
|
||||||
/* Updated: 2017/02/07 19:45:54 by wescande ### ########.fr */
|
/* Updated: 2017/02/20 14:00:41 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -73,7 +73,7 @@ static int match_star(t_glob *gl, char *str, char *full_word)
|
||||||
if (gl->pat[1] == '*' &&
|
if (gl->pat[1] == '*' &&
|
||||||
!is_char_esc(gl->esc, ((char **)gl->m_pat->content)[0], gl->pat + 1))
|
!is_char_esc(gl->esc, ((char **)gl->m_pat->content)[0], gl->pat + 1))
|
||||||
dir_research(gl, full_word, gl->pat + 1, 1);
|
dir_research(gl, full_word, gl->pat + 1, 1);
|
||||||
if (!*++gl->pat)
|
if (!*gl->pat || (*gl->pat == '*' && !*++gl->pat))
|
||||||
return (1);
|
return (1);
|
||||||
fix = str + ft_strlen(str);
|
fix = str + ft_strlen(str);
|
||||||
while (fix > str)
|
while (fix > str)
|
||||||
|
|
@ -107,7 +107,7 @@ int match_pattern(t_glob *gl, char *str, char *full_word)
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
else if (*gl->pat == '?')
|
else if (*gl->pat == '?')
|
||||||
str++;
|
;
|
||||||
else if (*gl->pat == '[')
|
else if (*gl->pat == '[')
|
||||||
{
|
{
|
||||||
if (!match_bracket(gl, *str))
|
if (!match_bracket(gl, *str))
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/01/11 16:46:27 by jhalford #+# #+# */
|
/* Created: 2017/01/11 16:46:27 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/17 16:34:34 by jhalford ### ########.fr */
|
/* Updated: 2017/02/20 14:17:03 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -68,6 +68,8 @@ int bquotes_substitute(t_list *cur_word, char *bq_start, char *bq_end)
|
||||||
|
|
||||||
int bquotes_expand(t_list **alst)
|
int bquotes_expand(t_list **alst)
|
||||||
{
|
{
|
||||||
|
(void) alst;
|
||||||
|
/*
|
||||||
t_list *cur_word;
|
t_list *cur_word;
|
||||||
char *bq_start;
|
char *bq_start;
|
||||||
char *bq_end;
|
char *bq_end;
|
||||||
|
|
@ -96,6 +98,7 @@ int bquotes_expand(t_list **alst)
|
||||||
ft_lst_delif(alst, cur_word->content, ft_addrcmp, token_free);
|
ft_lst_delif(alst, cur_word->content, ft_addrcmp, token_free);
|
||||||
cur_word = *alst;
|
cur_word = *alst;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */
|
/* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/17 16:35:24 by jhalford ### ########.fr */
|
/* Updated: 2017/02/20 15:00:31 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -33,7 +33,7 @@ int non_interactive_shell(char *command)
|
||||||
return (0);
|
return (0);
|
||||||
if (bquotes_expand(&token))
|
if (bquotes_expand(&token))
|
||||||
return (1);
|
return (1);
|
||||||
token_print(token);
|
//token_print(token);
|
||||||
if (ft_parse(&ast, &token))
|
if (ft_parse(&ast, &token))
|
||||||
return (1);
|
return (1);
|
||||||
if (ft_exec(&ast))
|
if (ft_exec(&ast))
|
||||||
|
|
@ -61,8 +61,7 @@ int interactive_shell()
|
||||||
ltoken = ft_lstlast(token);
|
ltoken = ft_lstlast(token);
|
||||||
if (lexer_lex((token ? <oken : &token), &lexer))
|
if (lexer_lex((token ? <oken : &token), &lexer))
|
||||||
return (1);
|
return (1);
|
||||||
DG("[{mag}%s{eoc}] stack=[%i] state=[%i]", lexer.str, lexer.stack ? *(int*)lexer.stack->content : 0, lexer.state);
|
//token_print(token);
|
||||||
token_print(token);
|
|
||||||
} while (get_lexer_stack(lexer));
|
} while (get_lexer_stack(lexer));
|
||||||
if (bquotes_expand(&token))
|
if (bquotes_expand(&token))
|
||||||
return (1);
|
return (1);
|
||||||
|
|
@ -85,7 +84,7 @@ int main(int ac, char **av)
|
||||||
data = data_singleton();
|
data = data_singleton();
|
||||||
setlocale(LC_ALL, "");
|
setlocale(LC_ALL, "");
|
||||||
shell_init(ac, av);
|
shell_init(ac, av);
|
||||||
DG("{inv}{bol}{gre}start of shell{eoc} JOBC is %s", SH_HAS_JOBC(data->opts)?"ON":"OFF");
|
// DG("{inv}{bol}{gre}start of shell{eoc} JOBC is %s", SH_HAS_JOBC(data->opts)?"ON":"OFF");
|
||||||
if (SH_IS_INTERACTIVE(data->opts))
|
if (SH_IS_INTERACTIVE(data->opts))
|
||||||
{
|
{
|
||||||
while (1)
|
while (1)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue