expansion des variables ok, fait a l'execution et plus dans le lexer (laissé en commentaire dans le lexer)
This commit is contained in:
parent
80cbac03a2
commit
7610136d18
30 changed files with 250 additions and 98 deletions
|
|
@ -29,18 +29,6 @@ INC_DIR = includes/
|
||||||
OBJ_DIR = objs/
|
OBJ_DIR = objs/
|
||||||
|
|
||||||
SRC_BASE = \
|
SRC_BASE = \
|
||||||
completion/c_output.c\
|
|
||||||
completion/c_binary.c\
|
|
||||||
completion/c_clear.c\
|
|
||||||
completion/c_files.c\
|
|
||||||
completion/c_init.c\
|
|
||||||
completion/c_matching.c\
|
|
||||||
completion/c_parser.c\
|
|
||||||
completion/c_pathsolver.c\
|
|
||||||
completion/c_printer.c\
|
|
||||||
completion/c_sizing.c\
|
|
||||||
completion/c_terminal.c\
|
|
||||||
completion/completion.c\
|
|
||||||
builtin/bt_read_get.c\
|
builtin/bt_read_get.c\
|
||||||
builtin/bt_read_parse.c\
|
builtin/bt_read_parse.c\
|
||||||
builtin/bt_read_term.c\
|
builtin/bt_read_term.c\
|
||||||
|
|
@ -52,6 +40,18 @@ builtin/builtin_read.c\
|
||||||
builtin/builtin_setenv.c\
|
builtin/builtin_setenv.c\
|
||||||
builtin/builtin_unsetenv.c\
|
builtin/builtin_unsetenv.c\
|
||||||
builtin/is_builtin.c\
|
builtin/is_builtin.c\
|
||||||
|
completion/c_binary.c\
|
||||||
|
completion/c_clear.c\
|
||||||
|
completion/c_files.c\
|
||||||
|
completion/c_init.c\
|
||||||
|
completion/c_matching.c\
|
||||||
|
completion/c_output.c\
|
||||||
|
completion/c_parser.c\
|
||||||
|
completion/c_pathsolver.c\
|
||||||
|
completion/c_printer.c\
|
||||||
|
completion/c_sizing.c\
|
||||||
|
completion/c_terminal.c\
|
||||||
|
completion/completion.c\
|
||||||
exec/ast_free.c\
|
exec/ast_free.c\
|
||||||
exec/exec_ampersand.c\
|
exec/exec_ampersand.c\
|
||||||
exec/exec_and_if.c\
|
exec/exec_and_if.c\
|
||||||
|
|
@ -73,6 +73,7 @@ exec/set_exitstatus.c\
|
||||||
glob/dir_glob.c\
|
glob/dir_glob.c\
|
||||||
glob/expand_brace.c\
|
glob/expand_brace.c\
|
||||||
glob/expand_esc.c\
|
glob/expand_esc.c\
|
||||||
|
glob/expand_var.c\
|
||||||
glob/ft_strsplit_esc.c\
|
glob/ft_strsplit_esc.c\
|
||||||
glob/ft_strsplit_spe.c\
|
glob/ft_strsplit_spe.c\
|
||||||
glob/glob.c\
|
glob/glob.c\
|
||||||
|
|
@ -90,6 +91,7 @@ glob/lib_perso/ft_ld_size.c\
|
||||||
glob/lib_perso/ft_ld_swap.c\
|
glob/lib_perso/ft_ld_swap.c\
|
||||||
glob/lib_perso/ft_ld_to_tab.c\
|
glob/lib_perso/ft_ld_to_tab.c\
|
||||||
glob/lib_perso/ft_strjoinf.c\
|
glob/lib_perso/ft_strjoinf.c\
|
||||||
|
glob/lib_perso/ft_strsubf.c\
|
||||||
glob/lib_perso/ft_tabdel.c\
|
glob/lib_perso/ft_tabdel.c\
|
||||||
glob/lib_perso/ft_tablen.c\
|
glob/lib_perso/ft_tablen.c\
|
||||||
glob/match_pattern.c\
|
glob/match_pattern.c\
|
||||||
|
|
|
||||||
|
|
@ -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/06 15:12:39 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 16:04:57 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -27,8 +27,9 @@ typedef struct s_ld
|
||||||
|
|
||||||
typedef struct s_glob
|
typedef struct s_glob
|
||||||
{
|
{
|
||||||
const char *pat;
|
char *pat;
|
||||||
const unsigned char *esc;
|
unsigned char *esc;
|
||||||
|
unsigned char *esc2;
|
||||||
t_ld *match;
|
t_ld *match;
|
||||||
t_ld *m_pat;
|
t_ld *m_pat;
|
||||||
} t_glob;
|
} t_glob;
|
||||||
|
|
@ -46,7 +47,8 @@ typedef struct s_expand
|
||||||
/*
|
/*
|
||||||
** interface of glob.
|
** interface of glob.
|
||||||
*/
|
*/
|
||||||
char **glob(const char *str, const unsigned char *esc);
|
char **glob(char *str, unsigned char *esc,
|
||||||
|
unsigned char *dbl_esc);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** return TRUE if path file is a directory.
|
** return TRUE if path file is a directory.
|
||||||
|
|
@ -71,13 +73,15 @@ void set_char_no_esc(unsigned char *esc,
|
||||||
** Internal function.
|
** Internal function.
|
||||||
*/
|
*/
|
||||||
unsigned char *ft_sub_esc(const unsigned char *esc, int start, int len);
|
unsigned char *ft_sub_esc(const unsigned char *esc, int start, int len);
|
||||||
|
unsigned char *dup_char_esc(const unsigned char *esc, const int size);
|
||||||
unsigned char *calc_expand_esc(const unsigned char *esc,
|
unsigned char *calc_expand_esc(const unsigned char *esc,
|
||||||
int nb_start, int nb_middle, int *nb_end);
|
int nb_start, int *nb_middle, int *nb_end);
|
||||||
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_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, const char *pat, int rec);
|
int dir_research(t_glob *tglob, char *p, char *pat, int rec);
|
||||||
char **ft_strsplit_spe(const char *str,
|
char **ft_strsplit_spe(const char *str,
|
||||||
const unsigned char *esc, char c);
|
const unsigned char *esc, char c);
|
||||||
unsigned char **ft_strsplit_esc(const char *str,
|
unsigned char **ft_strsplit_esc(const char *str,
|
||||||
|
|
@ -103,6 +107,8 @@ t_ld *ft_ld_order(t_ld *ld, int (*f)(), void (*del)());
|
||||||
*/
|
*/
|
||||||
|
|
||||||
char *ft_strjoinf(char *str, char *str2, int mode);
|
char *ft_strjoinf(char *str, char *str2, int mode);
|
||||||
|
char *ft_strsubf(char *s, unsigned int start,
|
||||||
|
size_t len, short int mode);
|
||||||
void ft_tabdel(char ***mytab);
|
void ft_tabdel(char ***mytab);
|
||||||
int ft_tablen(char **mytab);
|
int ft_tablen(char **mytab);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/01 12:15:50 by jhalford #+# #+# */
|
/* Created: 2016/12/01 12:15:50 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/03 17:31:08 by jhalford ### ########.fr */
|
/* Updated: 2017/02/07 13:37:52 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -55,7 +55,6 @@ enum e_lexstate
|
||||||
QUOTE,
|
QUOTE,
|
||||||
DQUOTE,
|
DQUOTE,
|
||||||
BACKSLASH,
|
BACKSLASH,
|
||||||
VAR,
|
|
||||||
SPECIAL,
|
SPECIAL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -64,6 +63,7 @@ struct s_token
|
||||||
t_type type;
|
t_type type;
|
||||||
char *data;
|
char *data;
|
||||||
unsigned char *esc;
|
unsigned char *esc;
|
||||||
|
unsigned char *esc2;
|
||||||
int size;
|
int size;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -78,7 +78,8 @@ int ft_tokenize(t_list **alst, char *str, t_lexstate state);
|
||||||
int ft_post_tokenize(t_list **alst, char **str);
|
int ft_post_tokenize(t_list **alst, char **str);
|
||||||
|
|
||||||
t_token *token_init();
|
t_token *token_init();
|
||||||
int token_append(t_token *token, char c, short int esc);
|
int token_append(t_token *token, char c, short int esc,
|
||||||
|
short int dbl_esc);
|
||||||
void token_free(void *data, size_t size);
|
void token_free(void *data, size_t size);
|
||||||
int token_cmp_type(t_token *token, t_type *ref);
|
int token_cmp_type(t_token *token, t_type *ref);
|
||||||
void token_print(t_list *lst);
|
void token_print(t_list *lst);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/14 17:28:14 by jhalford #+# #+# */
|
/* Created: 2016/11/14 17:28:14 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/06 15:31:42 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 11:54:17 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -27,7 +27,7 @@ static char **token_to_argv(t_astnode *node)
|
||||||
while (ld)
|
while (ld)
|
||||||
{
|
{
|
||||||
content = ld->content;
|
content = ld->content;
|
||||||
if ((expand = glob(content[0], (unsigned char *)content[1])))
|
if ((expand = glob(content[0], (unsigned char *)content[1], (unsigned char *)content[2])))
|
||||||
{
|
{
|
||||||
index = -1;
|
index = -1;
|
||||||
while (expand[++index])
|
while (expand[++index])
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/01/30 12:07:16 by wescande #+# #+# */
|
/* Created: 2017/01/30 12:07:16 by wescande #+# #+# */
|
||||||
/* Updated: 2017/02/06 16:02:48 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 13:06:07 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -20,7 +20,7 @@ int is_directory(const char *path)
|
||||||
return (S_ISDIR(path_stat.st_mode));
|
return (S_ISDIR(path_stat.st_mode));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dir_list_content(t_glob *gl, char **str, const char *pat,
|
static int dir_list_content(t_glob *gl, char **str, char *pat,
|
||||||
int recursive)
|
int recursive)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
@ -45,7 +45,7 @@ static int dir_list_content(t_glob *gl, char **str, const char *pat,
|
||||||
}
|
}
|
||||||
|
|
||||||
int dir_research(t_glob *gl, char *p,
|
int dir_research(t_glob *gl, char *p,
|
||||||
const char *pat, int recursive)
|
char *pat, int recursive)
|
||||||
{
|
{
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
struct dirent *in;
|
struct dirent *in;
|
||||||
|
|
|
||||||
|
|
@ -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/06 15:51:32 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 16:10:20 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -56,8 +56,8 @@ static void iter_on_each(t_expand *me)
|
||||||
first = ft_strjoinf(ft_strjoin(me->s1, me->split[i]), me->str + 1, 1);
|
first = ft_strjoinf(ft_strjoin(me->s1, me->split[i]), me->str + 1, 1);
|
||||||
second = calc_expand_esc(me->esc,
|
second = calc_expand_esc(me->esc,
|
||||||
ft_strlen(me->s1),
|
ft_strlen(me->s1),
|
||||||
ft_strlen(me->split[i]),
|
(int [2]){ft_strlen(me->split[i]), 0},
|
||||||
(int[2]){me->str - CH(*me->wk)[0], ft_strlen(me->str + 1)});
|
(int [2]){me->str - CH(*me->wk)[0], ft_strlen(me->str + 1)});
|
||||||
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);
|
||||||
|
|
@ -120,7 +120,7 @@ void expand_brace(t_glob *gl)
|
||||||
t_expand me;
|
t_expand me;
|
||||||
|
|
||||||
ft_ld_pushfront(&gl->m_pat, gen_tab("", (const unsigned char *)"", 1));
|
ft_ld_pushfront(&gl->m_pat, gen_tab("", (const unsigned char *)"", 1));
|
||||||
ft_ld_pushfront(&gl->m_pat, gen_tab(gl->pat, gl->esc, 1));
|
ft_ld_pushfront(&gl->m_pat, gen_tab(gl->pat, gl->esc, 0));
|
||||||
me = (t_expand){NULL, NULL, NULL, NULL, NULL, NULL};
|
me = (t_expand){NULL, NULL, NULL, NULL, NULL, NULL};
|
||||||
do_it = 1;
|
do_it = 1;
|
||||||
while (do_it)
|
while (do_it)
|
||||||
|
|
|
||||||
|
|
@ -6,20 +6,20 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/01/31 23:18:56 by wescande #+# #+# */
|
/* Created: 2017/01/31 23:18:56 by wescande #+# #+# */
|
||||||
/* Updated: 2017/01/31 23:19:45 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 15:49:15 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "glob.h"
|
#include "glob.h"
|
||||||
|
|
||||||
unsigned char *calc_expand_esc(const unsigned char *esc,
|
unsigned char *calc_expand_esc(const unsigned char *esc,
|
||||||
int nb_start, int nb_middle, int *nb_end)
|
int nb_start, int *nb_middle, int *nb_end)
|
||||||
{
|
{
|
||||||
unsigned char *new_esc;
|
unsigned char *new_esc;
|
||||||
int index;
|
int index;
|
||||||
int pos;
|
int pos;
|
||||||
|
|
||||||
if (!(new_esc = (unsigned char *)ft_strnew(((nb_start + nb_middle
|
if (!(new_esc = (unsigned char *)ft_strnew(((nb_start + nb_middle[0]
|
||||||
+ nb_end[1]) / 8) + 1)))
|
+ nb_end[1]) / 8) + 1)))
|
||||||
return (NULL);
|
return (NULL);
|
||||||
index = -1;
|
index = -1;
|
||||||
|
|
@ -27,9 +27,9 @@ unsigned char *calc_expand_esc(const unsigned char *esc,
|
||||||
new_esc[index / 8] |=
|
new_esc[index / 8] |=
|
||||||
((esc[index / 8] >> (7 - index % 8)) & 1) << (7 - index % 8);
|
((esc[index / 8] >> (7 - index % 8)) & 1) << (7 - index % 8);
|
||||||
pos = -1;
|
pos = -1;
|
||||||
while (++pos < nb_middle)
|
while (++pos < nb_middle[0])
|
||||||
{
|
{
|
||||||
new_esc[index / 8] |= 0 << (7 - index % 8);
|
new_esc[index / 8] |= nb_middle[1] << (7 - index % 8);
|
||||||
++index;
|
++index;
|
||||||
}
|
}
|
||||||
pos = nb_end[0];
|
pos = nb_end[0];
|
||||||
|
|
|
||||||
82
42sh/src/glob/expand_var.c
Normal file
82
42sh/src/glob/expand_var.c
Normal file
|
|
@ -0,0 +1,82 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* expand_var.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2017/02/06 16:09:27 by wescande #+# #+# */
|
||||||
|
/* Updated: 2017/02/07 17:18:33 by wescande ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "glob.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
** expand_var return value of $var in the string.
|
||||||
|
** input parameters are :
|
||||||
|
** -t_glob *gl -> struct of expanding
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void insert_var(t_glob *gl, char *pos, char *name, char *content)
|
||||||
|
{
|
||||||
|
char *s1;
|
||||||
|
char *s2;
|
||||||
|
int delta;
|
||||||
|
unsigned char *new_esc;
|
||||||
|
|
||||||
|
delta = pos - gl->pat;
|
||||||
|
s1 = ft_strsub(gl->pat, 0, delta);
|
||||||
|
delta += ft_strlen(name) + 1;
|
||||||
|
s2 = ft_strsubf(gl->pat, delta, ft_strlen(gl->pat) - delta, 1);
|
||||||
|
gl->pat = ft_strjoinf(ft_strjoinf(s1, content, 1), s2, 3);
|
||||||
|
new_esc = calc_expand_esc(gl->esc, ft_strlen(s1),
|
||||||
|
(int [2]){ft_strlen(content), 1},
|
||||||
|
(int [2]){delta, ft_strlen(s2)});
|
||||||
|
ft_memdel((void **)&gl->esc);
|
||||||
|
gl->esc = new_esc;
|
||||||
|
new_esc = calc_expand_esc(gl->esc2, ft_strlen(s1),
|
||||||
|
(int [2]){ft_strlen(content), 1},
|
||||||
|
(int [2]){delta, ft_strlen(s2)});
|
||||||
|
ft_memdel((void **)&gl->esc2);
|
||||||
|
gl->esc2 = new_esc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *get_name(t_glob *gl, const char *pat)
|
||||||
|
{
|
||||||
|
const char *str;
|
||||||
|
|
||||||
|
str = pat;
|
||||||
|
if (ft_isdigit(*str))
|
||||||
|
return (ft_strsub(pat, 0, str - pat + 1));
|
||||||
|
while ((ft_isalnum(*str) || *str == '_' || *str == '-')
|
||||||
|
&& !is_char_esc(gl->esc2, gl->pat, 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));
|
||||||
|
}
|
||||||
|
|
||||||
|
void expand_var(t_glob *gl)
|
||||||
|
{
|
||||||
|
char *pat;
|
||||||
|
char *var;
|
||||||
|
char *content;
|
||||||
|
|
||||||
|
pat = gl->pat;
|
||||||
|
while (*pat)
|
||||||
|
{
|
||||||
|
if (*pat == '$' && !is_char_esc(gl->esc2, gl->pat, pat) &&
|
||||||
|
(var = get_name(gl, pat + 1)))
|
||||||
|
{
|
||||||
|
if (ft_strlen(var))
|
||||||
|
{
|
||||||
|
content = ft_getenv(data_singleton()->env, var);
|
||||||
|
insert_var(gl, pat, var, content);
|
||||||
|
pat = gl->pat;
|
||||||
|
}
|
||||||
|
ft_strdel(&var);
|
||||||
|
}
|
||||||
|
++pat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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/01 19:46:22 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 16:13:36 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -33,12 +33,18 @@ static char **treat_glob(t_ld **match)
|
||||||
return (gl);
|
return (gl);
|
||||||
}
|
}
|
||||||
|
|
||||||
char **glob(const char *pat, const unsigned char *esc)
|
char **glob(char *pat, unsigned char *esc,
|
||||||
|
unsigned char *esc2)
|
||||||
{
|
{
|
||||||
t_glob gl;
|
t_glob gl;
|
||||||
int ret;
|
int ret;
|
||||||
|
int len;
|
||||||
|
|
||||||
gl = (t_glob){pat, esc, NULL, NULL};
|
len = ft_strlen(pat);
|
||||||
|
gl = (t_glob){ft_strdup(pat), dup_char_esc(esc, len),
|
||||||
|
dup_char_esc(esc2, len), NULL, NULL};
|
||||||
|
expand_var(&gl);
|
||||||
|
ft_memdel((void **)&gl.esc2);
|
||||||
expand_brace(&gl);
|
expand_brace(&gl);
|
||||||
while (gl.m_pat->next)
|
while (gl.m_pat->next)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
/* By: wescande <wescande@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/01/27 18:19:55 by wescande #+# #+# */
|
/* Created: 2017/01/27 18:19:55 by wescande #+# #+# */
|
||||||
/* Updated: 2017/02/06 15:11:14 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 16:33:47 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -18,9 +18,11 @@ int is_char_esc(const unsigned char *esc,
|
||||||
int pos;
|
int pos;
|
||||||
|
|
||||||
if (!esc || !ini_str || !str_pos)
|
if (!esc || !ini_str || !str_pos)
|
||||||
return (0);
|
return (-1);
|
||||||
pos = str_pos - ini_str;
|
pos = str_pos - ini_str;
|
||||||
if ((esc[pos / 8] >> (7 - pos % 8)) & 1)
|
if (pos < 0)
|
||||||
|
return (-1);
|
||||||
|
if ((esc[pos >> 3] >> (7 - pos % 8)) & 1)
|
||||||
return (1);
|
return (1);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
@ -33,7 +35,7 @@ void set_char_esc_mode(unsigned char *esc,
|
||||||
if (!esc || !ini_str || !str_pos || mode < 0 || mode > 1)
|
if (!esc || !ini_str || !str_pos || mode < 0 || mode > 1)
|
||||||
return ;
|
return ;
|
||||||
pos = str_pos - ini_str;
|
pos = str_pos - ini_str;
|
||||||
esc[pos / 8] |= mode << (7 - pos % 8);
|
esc[pos >> 3] |= mode << (7 - pos % 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_char_esc(unsigned char *esc,
|
void set_char_esc(unsigned char *esc,
|
||||||
|
|
@ -44,7 +46,7 @@ void set_char_esc(unsigned char *esc,
|
||||||
if (!esc || !ini_str || !str_pos)
|
if (!esc || !ini_str || !str_pos)
|
||||||
return ;
|
return ;
|
||||||
pos = str_pos - ini_str;
|
pos = str_pos - ini_str;
|
||||||
esc[pos / 8] |= 1 << (7 - pos % 8);
|
esc[pos >> 3] |= 1 << (7 - pos % 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_char_no_esc(unsigned char *esc,
|
void set_char_no_esc(unsigned char *esc,
|
||||||
|
|
@ -55,5 +57,15 @@ void set_char_no_esc(unsigned char *esc,
|
||||||
if (!esc || !ini_str || !str_pos)
|
if (!esc || !ini_str || !str_pos)
|
||||||
return ;
|
return ;
|
||||||
pos = str_pos - ini_str;
|
pos = str_pos - ini_str;
|
||||||
esc[pos / 8] |= 0 << (7 - pos % 8);
|
esc[pos >> 3] |= 0 << (7 - pos % 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char *dup_char_esc(const unsigned char *esc, const int size)
|
||||||
|
{
|
||||||
|
unsigned char *new_esc;
|
||||||
|
|
||||||
|
if (!(new_esc = (unsigned char *)ft_strnew(size)))
|
||||||
|
return (NULL);
|
||||||
|
ft_memcpy(new_esc, esc, size);
|
||||||
|
return (new_esc);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
25
42sh/src/glob/lib_perso/ft_strsubf.c
Normal file
25
42sh/src/glob/lib_perso/ft_strsubf.c
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* ft_strsubf.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: wescande <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2016/11/15 17:20:08 by wescande #+# #+# */
|
||||||
|
/* Updated: 2017/02/07 13:01:55 by wescande ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "glob.h"
|
||||||
|
|
||||||
|
char *ft_strsubf(char *s, unsigned int start, size_t len, short int mode)
|
||||||
|
{
|
||||||
|
char *sptr;
|
||||||
|
|
||||||
|
if (!s)
|
||||||
|
return (NULL);
|
||||||
|
sptr = ft_strsub(s, start, len);
|
||||||
|
if (mode == 1)
|
||||||
|
ft_strdel(&s);
|
||||||
|
return (sptr);
|
||||||
|
}
|
||||||
|
|
@ -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/01 19:46:43 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 13:06:58 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -85,7 +85,7 @@ static int match_star(t_glob *gl, char *str, char *full_word)
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *manage_pat(const char *pat, char *str)
|
char *manage_pat(char *pat, char *str)
|
||||||
{
|
{
|
||||||
if (pat[0] == '.' && pat[1] == '/'
|
if (pat[0] == '.' && pat[1] == '/'
|
||||||
&& ((str[0] == '.' && str[1] != '/') || str[0] != '.'))
|
&& ((str[0] == '.' && str[1] != '/') || str[0] != '.'))
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/10 13:37:11 by jhalford #+# #+# */
|
/* Created: 2016/11/10 13:37:11 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/03 15:39:53 by jhalford ### ########.fr */
|
/* Updated: 2017/02/06 19:03:06 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -26,7 +26,6 @@ int (*g_lexer[])(t_list **alst, char *str) =
|
||||||
&lexer_quote,
|
&lexer_quote,
|
||||||
&lexer_dquote,
|
&lexer_dquote,
|
||||||
&lexer_backslash,
|
&lexer_backslash,
|
||||||
&lexer_var,
|
|
||||||
&lexer_special,
|
&lexer_special,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/01/10 13:45:46 by jhalford #+# #+# */
|
/* Created: 2017/01/10 13:45:46 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/01/11 15:48:13 by jhalford ### ########.fr */
|
/* Updated: 2017/02/06 19:03:29 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -16,8 +16,6 @@ t_lexstate get_lexer_state(char *str)
|
||||||
{
|
{
|
||||||
if (ft_is_delim(*str))
|
if (ft_is_delim(*str))
|
||||||
return (DELIM);
|
return (DELIM);
|
||||||
else if (*str == '$')
|
|
||||||
return (VAR);
|
|
||||||
else if (*str == '&' || *str == ';' || *str == '|')
|
else if (*str == '&' || *str == ';' || *str == '|')
|
||||||
return (SEP);
|
return (SEP);
|
||||||
else if (*str == '\\')
|
else if (*str == '\\')
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/03 11:56:49 by jhalford #+# #+# */
|
/* Created: 2016/12/03 11:56:49 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/01/30 13:07:52 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 11:39:15 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -18,6 +18,6 @@ int lexer_backslash(t_list **alst, char *str)
|
||||||
|
|
||||||
token = (*alst)->content;
|
token = (*alst)->content;
|
||||||
token->type = TK_WORD;
|
token->type = TK_WORD;
|
||||||
token_append(token, str[1], 1);
|
token_append(token, str[1], 1, 1);
|
||||||
return (ft_tokenize(alst, str + 2, WORD));
|
return (ft_tokenize(alst, str + 2, WORD));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/28 18:36:21 by jhalford #+# #+# */
|
/* Created: 2016/11/28 18:36:21 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/01/27 15:53:10 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 11:39:07 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -28,7 +28,7 @@ int lexer_default(t_list **alst, char *str)
|
||||||
else
|
else
|
||||||
state = WORD;
|
state = WORD;
|
||||||
token = (*alst)->content;
|
token = (*alst)->content;
|
||||||
token_append(token, *str, 0);
|
token_append(token, *str, 0, 0);
|
||||||
token->type = TK_N_WORD;
|
token->type = TK_N_WORD;
|
||||||
return (ft_tokenize(alst, str + 1, state));
|
return (ft_tokenize(alst, str + 1, state));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/28 18:36:58 by jhalford #+# #+# */
|
/* Created: 2016/11/28 18:36:58 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/01/27 15:53:31 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 16:29:29 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -19,13 +19,15 @@ int lexer_dquote(t_list **alst, char *str)
|
||||||
token = (*alst)->content;
|
token = (*alst)->content;
|
||||||
token->type = TK_DQ_WORD;
|
token->type = TK_DQ_WORD;
|
||||||
str++;
|
str++;
|
||||||
if (*str == '\"')
|
if (*str == '"')
|
||||||
return (ft_tokenize(alst, str + 1, DEFAULT));
|
return (ft_tokenize(alst, str + 1, DEFAULT));
|
||||||
if (*str == '\\')
|
if (*str == '\\')
|
||||||
{
|
{
|
||||||
token_append(token, *(str + 1), 1);
|
if (str[1] != '"')
|
||||||
|
token_append(token, str[0], 1, 0);
|
||||||
|
token_append(token, str[1], 1, 1);
|
||||||
return (lexer_dquote(alst, str + 1));
|
return (lexer_dquote(alst, str + 1));
|
||||||
}
|
}
|
||||||
token_append(token, *str, 1);
|
token_append(token, *str, 1, 0);
|
||||||
return (lexer_dquote(alst, str));
|
return (lexer_dquote(alst, str));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/03 12:06:35 by jhalford #+# #+# */
|
/* Created: 2016/12/03 12:06:35 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/01/27 15:54:53 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 11:37:20 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -17,17 +17,17 @@ int lexer_great(t_list **alst, char *str)
|
||||||
t_token *token;
|
t_token *token;
|
||||||
|
|
||||||
token = (*alst)->content;
|
token = (*alst)->content;
|
||||||
token_append(token, str[0], 0);
|
token_append(token, str[0], 0, 0);
|
||||||
if (*(str + 1) == '&')
|
if (*(str + 1) == '&')
|
||||||
{
|
{
|
||||||
token->type = TK_GREATAND;
|
token->type = TK_GREATAND;
|
||||||
token_append(token, str[1], 0);
|
token_append(token, str[1], 0, 0);
|
||||||
return (lexer_greatand(alst, str + 2));
|
return (lexer_greatand(alst, str + 2));
|
||||||
}
|
}
|
||||||
else if (*(str + 1) == '>')
|
else if (*(str + 1) == '>')
|
||||||
{
|
{
|
||||||
token->type = TK_DGREAT;
|
token->type = TK_DGREAT;
|
||||||
token_append(token, str[1], 0);
|
token_append(token, str[1], 0, 0);
|
||||||
return (ft_tokenize(&(*alst)->next, str + 2, DEFAULT));
|
return (ft_tokenize(&(*alst)->next, str + 2, DEFAULT));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/03 11:56:58 by jhalford #+# #+# */
|
/* Created: 2016/12/03 11:56:58 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/01/27 15:55:04 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 11:37:08 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -20,12 +20,12 @@ int lexer_greatand(t_list **alst, char *str)
|
||||||
token->type = TK_GREATAND;
|
token->type = TK_GREATAND;
|
||||||
if (ft_isdigit(*str))
|
if (ft_isdigit(*str))
|
||||||
{
|
{
|
||||||
token_append(token, *str, 0);
|
token_append(token, *str, 0, 0);
|
||||||
return (lexer_greatand(alst, str + 1));
|
return (lexer_greatand(alst, str + 1));
|
||||||
}
|
}
|
||||||
else if (*str == '-')
|
else if (*str == '-')
|
||||||
{
|
{
|
||||||
token_append(token, *str, 0);
|
token_append(token, *str, 0, 0);
|
||||||
return (ft_tokenize(&(*alst)->next, str + 1, DEFAULT));
|
return (ft_tokenize(&(*alst)->next, str + 1, DEFAULT));
|
||||||
}
|
}
|
||||||
return (ft_tokenize(alst, str, DEFAULT));
|
return (ft_tokenize(alst, str, DEFAULT));
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/03 12:06:53 by jhalford #+# #+# */
|
/* Created: 2016/12/03 12:06:53 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/01/27 15:55:16 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 11:36:57 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -17,17 +17,17 @@ int lexer_less(t_list **alst, char *str)
|
||||||
t_token *token;
|
t_token *token;
|
||||||
|
|
||||||
token = (*alst)->content;
|
token = (*alst)->content;
|
||||||
token_append(token, str[0], 0);
|
token_append(token, str[0], 0, 0);
|
||||||
if (*(str + 1) == '&')
|
if (*(str + 1) == '&')
|
||||||
{
|
{
|
||||||
token->type = TK_LESSAND;
|
token->type = TK_LESSAND;
|
||||||
token_append(token, str[1], 0);
|
token_append(token, str[1], 0, 0);
|
||||||
return (lexer_lessand(alst, str + 2));
|
return (lexer_lessand(alst, str + 2));
|
||||||
}
|
}
|
||||||
else if (*(str + 1) == '<')
|
else if (*(str + 1) == '<')
|
||||||
{
|
{
|
||||||
token->type = TK_DLESS;
|
token->type = TK_DLESS;
|
||||||
token_append(token, str[1], 0);
|
token_append(token, str[1], 0, 0);
|
||||||
return (ft_tokenize(&(*alst)->next, str + 2, DEFAULT));
|
return (ft_tokenize(&(*alst)->next, str + 2, DEFAULT));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/03 11:58:51 by jhalford #+# #+# */
|
/* Created: 2016/12/03 11:58:51 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/01/27 15:55:27 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 11:39:38 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -20,12 +20,12 @@ int lexer_lessand(t_list **alst, char *str)
|
||||||
token->type = TK_LESSAND;
|
token->type = TK_LESSAND;
|
||||||
if (ft_isdigit(*str))
|
if (ft_isdigit(*str))
|
||||||
{
|
{
|
||||||
token_append(token, *str, 0);
|
token_append(token, *str, 0, 0);
|
||||||
return (lexer_lessand(alst, str + 1));
|
return (lexer_lessand(alst, str + 1));
|
||||||
}
|
}
|
||||||
else if (*str == '-')
|
else if (*str == '-')
|
||||||
{
|
{
|
||||||
token_append(token, *str, 0);
|
token_append(token, *str, 0, 0);
|
||||||
return (ft_tokenize(&(*alst)->next, str + 1, DEFAULT));
|
return (ft_tokenize(&(*alst)->next, str + 1, DEFAULT));
|
||||||
}
|
}
|
||||||
return (ft_tokenize(alst, str, DEFAULT));
|
return (ft_tokenize(alst, str, DEFAULT));
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/03 12:06:45 by jhalford #+# #+# */
|
/* Created: 2016/12/03 12:06:45 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/01/30 13:08:05 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 11:39:29 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -26,7 +26,7 @@ int lexer_number(t_list **alst, char *str)
|
||||||
return (ft_tokenize(alst, str, LESS));
|
return (ft_tokenize(alst, str, LESS));
|
||||||
else if (ft_isdigit(*str))
|
else if (ft_isdigit(*str))
|
||||||
{
|
{
|
||||||
token_append(token, *str, 0);
|
token_append(token, *str, 0, 0);
|
||||||
return (lexer_number(alst, str + 1));
|
return (lexer_number(alst, str + 1));
|
||||||
}
|
}
|
||||||
return (ft_tokenize(alst, str, DEFAULT));
|
return (ft_tokenize(alst, str, DEFAULT));
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/03 12:07:08 by jhalford #+# #+# */
|
/* Created: 2016/12/03 12:07:08 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/01/27 15:52:21 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 11:39:24 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -21,6 +21,6 @@ int lexer_quote(t_list **alst, char *str)
|
||||||
str++;
|
str++;
|
||||||
if (*str == '\'')
|
if (*str == '\'')
|
||||||
return (ft_tokenize(alst, str + 1, WORD));
|
return (ft_tokenize(alst, str + 1, WORD));
|
||||||
token_append(token, *str, 1);
|
token_append(token, *str, 1, 1);
|
||||||
return (lexer_quote(alst, str));
|
return (lexer_quote(alst, str));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,12 +6,13 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/01/10 14:54:57 by jhalford #+# #+# */
|
/* Created: 2017/01/10 14:54:57 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/06 14:02:20 by jhalford ### ########.fr */
|
/* Updated: 2017/02/07 11:36:41 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "lexer.h"
|
#include "lexer.h"
|
||||||
|
|
||||||
|
/*
|
||||||
int lexer_var(t_list **alst, char *str)
|
int lexer_var(t_list **alst, char *str)
|
||||||
{
|
{
|
||||||
t_token *token;
|
t_token *token;
|
||||||
|
|
@ -34,4 +35,4 @@ int lexer_var(t_list **alst, char *str)
|
||||||
}
|
}
|
||||||
token_append(token, *str, 0);
|
token_append(token, *str, 0);
|
||||||
return (lexer_var(alst, str));
|
return (lexer_var(alst, str));
|
||||||
}
|
}*/
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/03 12:07:11 by jhalford #+# #+# */
|
/* Created: 2016/12/03 12:07:11 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/01/30 13:08:16 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 11:39:50 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -25,6 +25,6 @@ int lexer_word(t_list **alst, char *str)
|
||||||
return (ft_tokenize(&(*alst)->next, str, GREAT));
|
return (ft_tokenize(&(*alst)->next, str, GREAT));
|
||||||
else if (*str == '<')
|
else if (*str == '<')
|
||||||
return (ft_tokenize(&(*alst)->next, str, LESS));
|
return (ft_tokenize(&(*alst)->next, str, LESS));
|
||||||
token_append(token, *str, 0);
|
token_append(token, *str, 0, 0);
|
||||||
return (ft_tokenize(alst, str + 1, WORD));
|
return (ft_tokenize(alst, str + 1, WORD));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,15 +6,13 @@
|
||||||
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/11 17:18:42 by jhalford #+# #+# */
|
/* Created: 2016/11/11 17:18:42 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/01/30 13:09:01 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 15:32:08 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "lexer.h"
|
#include "lexer.h"
|
||||||
|
|
||||||
#define TOKEN_INCR 10
|
int token_append(t_token *token, char c, short int esc, short int esc2)
|
||||||
|
|
||||||
int token_append(t_token *token, char c, short int esc)
|
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
|
|
@ -24,11 +22,14 @@ int token_append(t_token *token, char c, short int esc)
|
||||||
token->size += 8;
|
token->size += 8;
|
||||||
token->data = (char *)ft_realloc(token->data, token->size + 1);
|
token->data = (char *)ft_realloc(token->data, token->size + 1);
|
||||||
token->esc = (unsigned char *)ft_realloc((char *)token->esc,
|
token->esc = (unsigned char *)ft_realloc((char *)token->esc,
|
||||||
token->size / 8 + 1);
|
(token->size >> 3) + 1);
|
||||||
token->esc[token->size / 8 - 1] = 0;
|
token->esc[token->size >> 3] = 0;
|
||||||
|
token->esc2 = (unsigned char *)ft_realloc((char *)token->esc2,
|
||||||
|
(token->size >> 3) + 1);
|
||||||
|
token->esc2[token->size >> 3] = 0;
|
||||||
}
|
}
|
||||||
ft_strcat(token->data, (char[2]){c, '\0'});
|
ft_strcat(token->data, (char[2]){c, '\0'});
|
||||||
if (esc)
|
token->esc[len >> 3] |= esc << (7 - len % 8);
|
||||||
token->esc[len / 8] |= 1 << (7 - len % 8);
|
token->esc2[len >> 3] |= esc2 << (7 - len % 8);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,12 +6,12 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/01/10 14:57:53 by jhalford #+# #+# */
|
/* Created: 2017/01/10 14:57:53 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/06 14:32:16 by jhalford ### ########.fr */
|
/* Updated: 2017/02/07 13:16:04 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "lexer.h"
|
#include "lexer.h"
|
||||||
|
/*
|
||||||
void token_expand_var(t_token *token)
|
void token_expand_var(t_token *token)
|
||||||
{
|
{
|
||||||
char *dollar;
|
char *dollar;
|
||||||
|
|
@ -24,5 +24,6 @@ void token_expand_var(t_token *token)
|
||||||
*dollar = 0;
|
*dollar = 0;
|
||||||
if (val)
|
if (val)
|
||||||
while (*val)
|
while (*val)
|
||||||
token_append(token, *val++, 1);
|
token_append(token, *val++, 1, 1);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/03 12:07:30 by jhalford #+# #+# */
|
/* Created: 2016/12/03 12:07:30 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/01/31 18:36:40 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 13:39:50 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -22,6 +22,7 @@ void token_free(void *data, size_t size)
|
||||||
{
|
{
|
||||||
ft_strdel(&token->data);
|
ft_strdel(&token->data);
|
||||||
ft_memdel((void **)&token->esc);
|
ft_memdel((void **)&token->esc);
|
||||||
|
ft_memdel((void **)&token->esc2);
|
||||||
}
|
}
|
||||||
free(token);
|
free(token);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/10 15:30:25 by jhalford #+# #+# */
|
/* Created: 2016/11/10 15:30:25 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/01/31 18:36:31 by wescande ### ########.fr */
|
/* Updated: 2017/02/07 13:42:00 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -20,6 +20,7 @@ t_token *token_init(void)
|
||||||
token->type = 0;
|
token->type = 0;
|
||||||
token->size = 8;
|
token->size = 8;
|
||||||
token->data = ft_strnew(token->size + 1);
|
token->data = ft_strnew(token->size + 1);
|
||||||
token->esc = (unsigned char *)ft_strnew(token->size / 8 + 1);
|
token->esc = (unsigned char *)ft_strnew((token->size >> 3) + 1);
|
||||||
|
token->esc2 = (unsigned char *)ft_strnew((token->size >> 3) + 1);
|
||||||
return (token);
|
return (token);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,12 +6,27 @@
|
||||||
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/14 12:49:45 by jhalford #+# #+# */
|
/* Created: 2016/11/14 12:49:45 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/02 14:24:53 by jhalford ### ########.fr */
|
/* Updated: 2017/02/07 16:06:24 by wescande ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "parser.h"
|
#include "parser.h"
|
||||||
|
|
||||||
|
char **gen_tab(t_token *token)
|
||||||
|
{
|
||||||
|
char **the_tab;
|
||||||
|
|
||||||
|
if (!(the_tab = (char **)malloc(sizeof(char *) * 4)))
|
||||||
|
return (NULL);
|
||||||
|
the_tab[0] = ft_strdup(token->data);
|
||||||
|
the_tab[1] = (char *)dup_char_esc(token->esc, token->size >> 3);
|
||||||
|
the_tab[2] = (char *)dup_char_esc(token->esc2, token->size >> 3);
|
||||||
|
// ft_memcpy(the_tab[1], token->esc, token->size >> 3);
|
||||||
|
// the_tab[2] = ft_strnew((token->size >> 3) + 1);
|
||||||
|
// ft_memcpy(the_tab[2], token->esc2, token->size >> 3);
|
||||||
|
the_tab[3] = NULL;
|
||||||
|
return (the_tab);
|
||||||
|
}
|
||||||
int parse_word(t_btree **ast, t_list **start, t_list **lst)
|
int parse_word(t_btree **ast, t_list **start, t_list **lst)
|
||||||
{
|
{
|
||||||
t_astnode *node;
|
t_astnode *node;
|
||||||
|
|
@ -23,8 +38,7 @@ int parse_word(t_btree **ast, t_list **start, t_list **lst)
|
||||||
token = (*lst)->content;
|
token = (*lst)->content;
|
||||||
node = (*ast)->item;
|
node = (*ast)->item;
|
||||||
node->type = TK_COMMAND;
|
node->type = TK_COMMAND;
|
||||||
my_tab = ft_sstradd(my_tab, token->data);
|
my_tab = gen_tab(token);
|
||||||
my_tab = ft_sstradd(my_tab, (char *)token->esc);
|
|
||||||
ft_ld_pushback(&node->data.token, my_tab);
|
ft_ld_pushback(&node->data.token, my_tab);
|
||||||
ft_parse(ast, &(*lst)->next);
|
ft_parse(ast, &(*lst)->next);
|
||||||
ft_lst_delif(start, (*lst)->content, &ft_addrcmp, &token_free);
|
ft_lst_delif(start, (*lst)->content, &ft_addrcmp, &token_free);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue