rectif issue sur glob /*/*/* + rectif sur le matching avec plusieurs bquote dans le meme word + rectif expansion sur les char esc
This commit is contained in:
parent
cd5fefa671
commit
fb35d3ea53
5 changed files with 35 additions and 32 deletions
|
|
@ -6,14 +6,14 @@
|
||||||
# By: wescande <wescande@student.42.fr> +#+ +:+ +#+ #
|
# By: wescande <wescande@student.42.fr> +#+ +:+ +#+ #
|
||||||
# +#+#+#+#+#+ +#+ #
|
# +#+#+#+#+#+ +#+ #
|
||||||
# Created: 2016/08/29 21:32:58 by wescande #+# #+# #
|
# Created: 2016/08/29 21:32:58 by wescande #+# #+# #
|
||||||
# Updated: 2017/03/22 14:59:33 by gwojda ### ########.fr #
|
# Updated: 2017/03/23 01:59:31 by wescande ### ########.fr #
|
||||||
# #
|
# #
|
||||||
# **************************************************************************** #
|
# **************************************************************************** #
|
||||||
|
|
||||||
NAME = 42sh
|
NAME = 42sh
|
||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
FLAGS = -Wall -Wextra -Werror #-fvisibility=hidden# -fsanitize=address
|
FLAGS = -Wall -Wextra -Werror -fsanitize=address
|
||||||
D_FLAGS = -g
|
D_FLAGS = -g
|
||||||
|
|
||||||
DELTA = $$(echo "$$(tput cols)-47"|bc)
|
DELTA = $$(echo "$$(tput cols)-47"|bc)
|
||||||
|
|
|
||||||
|
|
@ -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/03/15 18:52:34 by jhalford ### ########.fr */
|
/* Updated: 2017/03/23 03:18:41 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -65,6 +65,7 @@ char **glob(char *str, unsigned char *esc,
|
||||||
void esc_print(char *str, unsigned char *esc);
|
void esc_print(char *str, unsigned char *esc);
|
||||||
int word_is_assignment(char **content);
|
int word_is_assignment(char **content);
|
||||||
void *tab_esc_copy(void *content);
|
void *tab_esc_copy(void *content);
|
||||||
|
char *get_output(char *command);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** return TRUE if path file is a directory.
|
** return TRUE if path file is a directory.
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/03/14 19:44:25 by wescande #+# #+# */
|
/* Created: 2017/03/14 19:44:25 by wescande #+# #+# */
|
||||||
/* Updated: 2017/03/22 22:25:49 by wescande ### ########.fr */
|
/* Updated: 2017/03/23 03:19:23 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -21,7 +21,8 @@ static char *manage_output(int *fds)
|
||||||
|
|
||||||
output = NULL;
|
output = NULL;
|
||||||
close(fds[PIPE_WRITE]);
|
close(fds[PIPE_WRITE]);
|
||||||
while ((ret = read(fds[PIPE_READ], buf, BUF_SIZE)) > 0) {
|
while ((ret = read(fds[PIPE_READ], buf, BUF_SIZE)) > 0)
|
||||||
|
{
|
||||||
buf[ret] = 0;
|
buf[ret] = 0;
|
||||||
ft_strappend(&output, buf);
|
ft_strappend(&output, buf);
|
||||||
}
|
}
|
||||||
|
|
@ -52,3 +53,16 @@ char *command_getoutput(char *command)
|
||||||
waitpid(pid, &ret, WUNTRACED);
|
waitpid(pid, &ret, WUNTRACED);
|
||||||
return (manage_output(fds));
|
return (manage_output(fds));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *get_output(char *command)
|
||||||
|
{
|
||||||
|
char *output;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
if (!(output = command_getoutput(command)))
|
||||||
|
return (NULL);
|
||||||
|
len = ft_strlen(output);
|
||||||
|
while (len && output[--len] == '\n')
|
||||||
|
output[len] = '\0';
|
||||||
|
return (output);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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/03/22 19:24:52 by jhalford ### ########.fr */
|
/* Updated: 2017/03/23 03:20:10 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -33,27 +33,27 @@ static void expand_all_bquote(t_bquote *me, char *content,
|
||||||
ft_strlen(me->s2)}),
|
ft_strlen(me->s2)}),
|
||||||
calc_expand_esc(me->esc2, ft_strlen(me->s1),
|
calc_expand_esc(me->esc2, ft_strlen(me->s1),
|
||||||
(int[2]){ft_strlen(content), 1},
|
(int[2]){ft_strlen(content), 1},
|
||||||
(int[2]){ft_strlen(me->s1) + ft_strlen(me->mid),
|
(int[2]){ft_strlen(me->s1) + ft_strlen(me->mid) + 1,
|
||||||
ft_strlen(me->s2)}),
|
ft_strlen(me->s2)}),
|
||||||
0));
|
0));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init_expand(t_bquote *me, char *content, int esc)
|
static void init_expand(t_bquote *me, char *content, int doifs)
|
||||||
{
|
{
|
||||||
char *ifs;
|
char *ifs;
|
||||||
char *content2;
|
char *content2;
|
||||||
|
|
||||||
ifs = esc ? NULL : ft_getenv(data_singleton()->local_var, "IFS");
|
ifs = doifs ? ft_getenv(data_singleton()->local_var, "IFS") : NULL;
|
||||||
content = ft_strtok(content, ifs);
|
content = ft_strtok(content, ifs);
|
||||||
if (!content || !(content2 = ft_strtok(NULL, ifs)))
|
if (!content || !(content2 = ft_strtok(NULL, ifs)))
|
||||||
{
|
{
|
||||||
ft_ld_pushfront(me->wk, gen_tab(ft_strjoinf(ft_strjoin(me->s1, content),
|
ft_ld_pushfront(me->wk, gen_tab(ft_strjoinf(ft_strjoin(me->s1, content),
|
||||||
me->s2, 1),
|
me->s2, 1),
|
||||||
calc_expand_esc(me->esc, ft_strlen(me->s1), (int[2]){ft_strlen(content), 1},
|
calc_expand_esc(me->esc, ft_strlen(me->s1), (int[2]){ft_strlen(content), 1},
|
||||||
(int[2]){ft_strlen(me->s1) + ft_strlen(me->mid), ft_strlen(me->s2)}),
|
(int[2]){ft_strlen(me->s1) + ft_strlen(me->mid) + 1, ft_strlen(me->s2)}),
|
||||||
calc_expand_esc(me->esc2, ft_strlen(me->s1),
|
calc_expand_esc(me->esc2, ft_strlen(me->s1),
|
||||||
(int[2]){ft_strlen(content), 1},
|
(int[2]){ft_strlen(content), 1},
|
||||||
(int[2]){ft_strlen(me->s1) + ft_strlen(me->mid),
|
(int[2]){ft_strlen(me->s1) + ft_strlen(me->mid) + 1,
|
||||||
ft_strlen(me->s2)}), 0));
|
ft_strlen(me->s2)}), 0));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -67,19 +67,6 @@ static void init_expand(t_bquote *me, char *content, int esc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *get_output(char *command)
|
|
||||||
{
|
|
||||||
char *output;
|
|
||||||
int len;
|
|
||||||
|
|
||||||
if (!(output = command_getoutput(command)))
|
|
||||||
return (NULL);
|
|
||||||
len = ft_strlen(output);
|
|
||||||
while (output[--len] == '\n')
|
|
||||||
output[len] = '\0';
|
|
||||||
return (output);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int search_bquote(t_bquote *me)
|
static int search_bquote(t_bquote *me)
|
||||||
{
|
{
|
||||||
char *sta;
|
char *sta;
|
||||||
|
|
@ -98,7 +85,7 @@ static int search_bquote(t_bquote *me)
|
||||||
me->s2 = ft_strdup(me->str + 1);
|
me->s2 = ft_strdup(me->str + 1);
|
||||||
if ((content = get_output(me->mid)))
|
if ((content = get_output(me->mid)))
|
||||||
init_expand(me, content,
|
init_expand(me, content,
|
||||||
is_char_esc(me->esc, CH(*me->wk)[0], sta));
|
!is_char_esc(me->esc, CH(*me->wk)[0], sta));
|
||||||
ft_strdel(&me->mid);
|
ft_strdel(&me->mid);
|
||||||
ft_strdel(&me->s1);
|
ft_strdel(&me->s1);
|
||||||
ft_strdel(&me->s2);
|
ft_strdel(&me->s2);
|
||||||
|
|
@ -109,12 +96,13 @@ static int search_bquote(t_bquote *me)
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void delete(t_ld **tmp, t_ld **src)
|
static int delete(t_ld **tmp, t_ld **src)
|
||||||
{
|
{
|
||||||
if (*tmp == *src)
|
if (*tmp == *src)
|
||||||
ft_ld_del(src, &ft_tabdel);
|
ft_ld_del(src, &ft_tabdel);
|
||||||
else
|
else
|
||||||
ft_ld_del(tmp, &ft_tabdel);
|
ft_ld_del(tmp, &ft_tabdel);
|
||||||
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void expand_bquote(t_glob *gl)
|
void expand_bquote(t_glob *gl)
|
||||||
|
|
@ -129,15 +117,15 @@ void expand_bquote(t_glob *gl)
|
||||||
while ((gl->m_pat = ft_ld_front(gl->m_pat)) && do_it)
|
while ((gl->m_pat = ft_ld_front(gl->m_pat)) && do_it)
|
||||||
{
|
{
|
||||||
do_it = 0;
|
do_it = 0;
|
||||||
while (gl->m_pat && !do_it)
|
while (gl->m_pat)
|
||||||
{
|
{
|
||||||
me.wk = &gl->m_pat;
|
me.wk = &gl->m_pat;
|
||||||
me.esc = UCH(gl->m_pat)[1];
|
me.esc = UCH(gl->m_pat)[1];
|
||||||
me.esc2 = UCH(gl->m_pat)[2];
|
me.esc2 = UCH(gl->m_pat)[2];
|
||||||
me.str = CH(gl->m_pat)[0] - 1;
|
me.str = CH(gl->m_pat)[0] - 1;
|
||||||
if ((tmp = gl->m_pat) &&
|
if ((tmp = gl->m_pat) &&
|
||||||
(do_it = search_bquote(&me)) == 1)
|
(do_it = search_bquote(&me)) && delete(&tmp, &gl->m_pat))
|
||||||
delete(&tmp, &gl->m_pat);
|
continue;
|
||||||
if (!gl->m_pat || !gl->m_pat->next)
|
if (!gl->m_pat || !gl->m_pat->next)
|
||||||
break ;
|
break ;
|
||||||
gl->m_pat = gl->m_pat->next;
|
gl->m_pat = gl->m_pat->next;
|
||||||
|
|
|
||||||
|
|
@ -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/03/14 23:25:44 by wescande ### ########.fr */
|
/* Updated: 2017/03/23 03:16:08 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -71,8 +71,8 @@ static int match_star(t_glob *gl, char *str, char *full_word)
|
||||||
char *fix;
|
char *fix;
|
||||||
char *pat;
|
char *pat;
|
||||||
|
|
||||||
if (gl->pat[1] == '*' &&
|
if (!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))
|
&& gl->pat[1] == '*')
|
||||||
{
|
{
|
||||||
while (gl->pat[1] == '*')
|
while (gl->pat[1] == '*')
|
||||||
++gl->pat;
|
++gl->pat;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue