From 06217e697520e5c97393bc06b89fda073efa7ea6 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Tue, 1 Sep 2020 16:40:05 +0200 Subject: Update --- src/p_args.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/p_args.c (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c new file mode 100644 index 0000000..6b285da --- /dev/null +++ b/src/p_args.c @@ -0,0 +1,52 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* p_args.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: rbousset +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */ +/* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include + +char + **p_split_args(const char word[], int8_t redir) +{ + char **words; + + (void)word; + if (redir == 0) + { + return (words); + } + return (words); + /* char **words; */ + /* char *subst; */ + /* size_t i; */ + + /* if (redir == 0) */ + /* { */ + /* if (!(words = ft_split(word, ' '))) */ + /* return (NULL); */ + /* return (words); */ + /* } */ + /* i = 0; */ + /* while (word[i] && ft_ischarset("<>", word[i]) == FALSE) */ + /* i++; */ + /* while (redir > 0 && ft_isdigit(word[i]) == TRUE) */ + /* i--; */ + /* if (!(subst = ft_substr(word, 0, i))) */ + /* return (NULL); */ + /* if (!(words = ft_split(subst, ' '))) */ + /* { */ + /* ft_memdel((void*)&subst); */ + /* return (NULL); */ + /* } */ + /* ft_memdel((void*)&subst); */ + /* return (words); */ +} -- cgit v1.2.3 From d5a11fcb60022edfc96bf83c9ab8cdb03e6b762a Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Tue, 1 Sep 2020 16:44:52 +0200 Subject: Cool --- src/p_args.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index 6b285da..d8ca029 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -14,16 +14,39 @@ #include #include +/* ================= */ +/* TODO: DELETE THIS */ +/* ================= */ + +static void +p_print(char *words[]) +{ + char **ptr; + + ptr = words; + while (*ptr != NULL) + { + ft_printf("[%s]\n", *ptr); + ptr++; + } +} + +/* ================== */ +/* TODO: DELETE ABOVE */ +/* ================== */ + char **p_split_args(const char word[], int8_t redir) { char **words; - (void)word; + ft_printf("word at start: [%s]\n", word); if (redir == 0) { + p_print(words); return (words); } + p_print(words); return (words); /* char **words; */ /* char *subst; */ -- cgit v1.2.3 From 70e3b4133b89e4e77a67139ccaa37322e2507e49 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Tue, 1 Sep 2020 18:28:12 +0200 Subject: Added quotes multiline --- src/p_args.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index d8ca029..1cab59d 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -14,6 +14,8 @@ #include #include +#include "d_define.h" + /* ================= */ /* TODO: DELETE THIS */ /* ================= */ @@ -35,14 +37,80 @@ p_print(char *words[]) /* TODO: DELETE ABOVE */ /* ================== */ +static void + p_skip_delim(char *ptr, char c) +{ + ptr++; + while (*ptr != C_NULL && *ptr != c) + { + ptr++; + if (*ptr == c && *(ptr - 1) == C_BACKSLASH) + ptr++; + } + if (*ptr != C_NULL) + ptr++; +} + +static uint16_t + p_count_args(char *ptr, uint16_t argc) +{ + if (*ptr == C_NULL) + return (argc); + while (*ptr != C_NULL && ft_iswhitespace(*ptr) == TRUE) + ptr++; + if (*ptr != C_SQUOTE && *ptr != C_DQUOTE) + { + while (*ptr != C_NULL && ft_iswhitespace(*ptr) == FALSE) + { + ptr++; + if ((*ptr == C_SQUOTE || *ptr == C_DQUOTE) && + *(ptr - 1) != C_BACKSLASH) + { + ptr++; + return (p_count_args(ptr, argc)); + } + } + } + else if (*ptr == C_SQUOTE) + { + p_skip_delim(ptr, C_SQUOTE); + } + else if (*ptr == C_DQUOTE) + { + p_skip_delim(ptr, C_DQUOTE); + } + return (p_count_args(ptr, argc + 1)); +} + +static char + **p_split_words_no_rdr(const char word[]) +{ + char **words; + char *ptr; + uint16_t argc; + + ptr = (char*)word; + argc = p_count_args(ptr, 0); + ft_printf("%hu\n", argc); + exit(0); + if ((words = (char**)malloc((argc + 1) * sizeof(char*))) == NULL) + return (NULL); + words[argc] = NULL; + return (words); +} + + char **p_split_args(const char word[], int8_t redir) { - char **words; + char **words; + words = NULL; ft_printf("word at start: [%s]\n", word); if (redir == 0) { + if ((words = p_split_words_no_rdr(word)) == NULL) + return (NULL); p_print(words); return (words); } -- cgit v1.2.3 From 834e84e40b9a5e489ddcb1aef43f231ccdb3dfc2 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Tue, 1 Sep 2020 19:19:01 +0200 Subject: Fine --- src/p_args.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index 1cab59d..d42dabe 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -37,18 +37,25 @@ p_print(char *words[]) /* TODO: DELETE ABOVE */ /* ================== */ -static void - p_skip_delim(char *ptr, char c) +static char + *p_skip_delim(char *ptr, char c) { ptr++; while (*ptr != C_NULL && *ptr != c) { ptr++; - if (*ptr == c && *(ptr - 1) == C_BACKSLASH) - ptr++; + if (*ptr == c && c == C_DQUOTE) + { + if (*(ptr - 1) == C_BACKSLASH) + { + if (*(ptr - 2) != C_BACKSLASH) + ptr++; + } + } } if (*ptr != C_NULL) ptr++; + return (ptr); } static uint16_t @@ -71,13 +78,11 @@ static uint16_t } } } - else if (*ptr == C_SQUOTE) - { - p_skip_delim(ptr, C_SQUOTE); - } - else if (*ptr == C_DQUOTE) + else if (*ptr == C_SQUOTE || *ptr == C_DQUOTE) { - p_skip_delim(ptr, C_DQUOTE); + ptr = p_skip_delim(ptr, *ptr); + if (ft_isspace(*ptr) == FALSE) + return (p_count_args(ptr, argc)); } return (p_count_args(ptr, argc + 1)); } -- cgit v1.2.3 From 33b24656b7f0637d74531231f3d1b02bcc76dfc7 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Tue, 1 Sep 2020 19:45:03 +0200 Subject: Shit in progress --- src/p_args.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index d42dabe..f14b467 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -65,13 +65,12 @@ static uint16_t return (argc); while (*ptr != C_NULL && ft_iswhitespace(*ptr) == TRUE) ptr++; - if (*ptr != C_SQUOTE && *ptr != C_DQUOTE) + if (*ptr != C_SQUOTE && *ptr != C_DQUOTE && *ptr != C_NULL) { while (*ptr != C_NULL && ft_iswhitespace(*ptr) == FALSE) { ptr++; - if ((*ptr == C_SQUOTE || *ptr == C_DQUOTE) && - *(ptr - 1) != C_BACKSLASH) + if ((*ptr == C_SQUOTE || *ptr == C_DQUOTE) && *(ptr - 1) != '\\') { ptr++; return (p_count_args(ptr, argc)); @@ -81,9 +80,11 @@ static uint16_t else if (*ptr == C_SQUOTE || *ptr == C_DQUOTE) { ptr = p_skip_delim(ptr, *ptr); - if (ft_isspace(*ptr) == FALSE) + if (ft_iswhitespace(*ptr) == FALSE) return (p_count_args(ptr, argc)); } + else if (*ptr == C_NULL) + return (argc); return (p_count_args(ptr, argc + 1)); } -- cgit v1.2.3 From f3f724dd7f434f2731f63d03a925b0e24983b484 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Thu, 3 Sep 2020 16:09:12 +0200 Subject: how tf do i use tok --- src/p_args.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index f14b467..6a15cb8 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -15,6 +15,7 @@ #include #include "d_define.h" +#include "p_args_next.h" /* ================= */ /* TODO: DELETE THIS */ @@ -86,6 +87,17 @@ static uint16_t else if (*ptr == C_NULL) return (argc); return (p_count_args(ptr, argc + 1)); + /* TODO: quotes parse error */ +} + +static void + p_del_alloced_words(char *words[], uint16_t to_del, uint16_t i) +{ + while (i > to_del) + { + ft_memdel((void*)&words[i]); + i--; + } } static char @@ -94,6 +106,7 @@ static char char **words; char *ptr; uint16_t argc; + uint16_t to_del; ptr = (char*)word; argc = p_count_args(ptr, 0); @@ -102,14 +115,18 @@ static char if ((words = (char**)malloc((argc + 1) * sizeof(char*))) == NULL) return (NULL); words[argc] = NULL; + if ((to_del = p_dup_words(words, word, argc)) != 0) + { + p_del_alloced_words(words, to_del, argc); + return (NULL); + } return (words); } - char **p_split_args(const char word[], int8_t redir) { - char **words; + char **words; words = NULL; ft_printf("word at start: [%s]\n", word); -- cgit v1.2.3 From 869498a720e3c54b206f346dea6bf9b7995a7778 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Thu, 3 Sep 2020 17:18:41 +0200 Subject: Genius in progress --- src/p_args.c | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index 6a15cb8..572b965 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -15,6 +15,7 @@ #include #include "d_define.h" +#include "p_args.h" #include "p_args_next.h" /* ================= */ @@ -60,12 +61,13 @@ static char } static uint16_t - p_count_args(char *ptr, uint16_t argc) + p_count_args(const char *head, char *ptr, uint16_t argc, size_t start[]) { if (*ptr == C_NULL) return (argc); while (*ptr != C_NULL && ft_iswhitespace(*ptr) == TRUE) ptr++; + start[argc] = ptr - head; if (*ptr != C_SQUOTE && *ptr != C_DQUOTE && *ptr != C_NULL) { while (*ptr != C_NULL && ft_iswhitespace(*ptr) == FALSE) @@ -74,7 +76,7 @@ static uint16_t if ((*ptr == C_SQUOTE || *ptr == C_DQUOTE) && *(ptr - 1) != '\\') { ptr++; - return (p_count_args(ptr, argc)); + return (p_count_args(head, ptr, argc, start)); } } } @@ -82,42 +84,44 @@ static uint16_t { ptr = p_skip_delim(ptr, *ptr); if (ft_iswhitespace(*ptr) == FALSE) - return (p_count_args(ptr, argc)); + return (p_count_args(head, ptr, argc, start)); } else if (*ptr == C_NULL) return (argc); - return (p_count_args(ptr, argc + 1)); + return (p_count_args(head, ptr, argc + 1, start)); /* TODO: quotes parse error */ } static void - p_del_alloced_words(char *words[], uint16_t to_del, uint16_t i) + p_del_alloced_words(char *words[], uint16_t to_del) { - while (i > to_del) + uint16_t i; + + i = 0; + while (i < to_del) { ft_memdel((void*)&words[i]); - i--; + i++; } } static char **p_split_words_no_rdr(const char word[]) { - char **words; - char *ptr; - uint16_t argc; - uint16_t to_del; + char **words; + char *ptr; + size_t start[512]; + uint16_t argc; + uint16_t to_del; ptr = (char*)word; - argc = p_count_args(ptr, 0); - ft_printf("%hu\n", argc); - exit(0); + argc = p_count_args(word, ptr, 0, start); if ((words = (char**)malloc((argc + 1) * sizeof(char*))) == NULL) return (NULL); words[argc] = NULL; - if ((to_del = p_dup_words(words, word, argc)) != 0) + if ((to_del = p_dup_words(words, word, argc, start)) != argc) { - p_del_alloced_words(words, to_del, argc); + p_del_alloced_words(words, to_del); return (NULL); } return (words); @@ -135,6 +139,7 @@ char if ((words = p_split_words_no_rdr(word)) == NULL) return (NULL); p_print(words); + exit(0); return (words); } p_print(words); -- cgit v1.2.3 From 93fd5f480c4fb841945611ed13ca3fa81b376dff Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Thu, 3 Sep 2020 18:37:45 +0200 Subject: Better conditions, fuck the norm niggas --- src/p_args.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index 572b965..953fa17 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -43,6 +43,8 @@ static char *p_skip_delim(char *ptr, char c) { ptr++; + if (*ptr == c) + return (++ptr); while (*ptr != C_NULL && *ptr != c) { ptr++; @@ -83,7 +85,9 @@ static uint16_t else if (*ptr == C_SQUOTE || *ptr == C_DQUOTE) { ptr = p_skip_delim(ptr, *ptr); - if (ft_iswhitespace(*ptr) == FALSE) + if (*ptr == C_NULL) + return (argc += 1); + else if (ft_iswhitespace(*ptr) == FALSE) return (p_count_args(head, ptr, argc, start)); } else if (*ptr == C_NULL) @@ -116,6 +120,7 @@ static char ptr = (char*)word; argc = p_count_args(word, ptr, 0, start); + ft_printf("%hu\n", argc); if ((words = (char**)malloc((argc + 1) * sizeof(char*))) == NULL) return (NULL); words[argc] = NULL; -- cgit v1.2.3 From 757801bea2d236148e061324716425fc0e6aa686 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Thu, 3 Sep 2020 19:09:05 +0200 Subject: In progress --- src/p_args.c | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index 953fa17..a0da592 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -17,6 +17,7 @@ #include "d_define.h" #include "p_args.h" #include "p_args_next.h" +#include "p_args_quotes.h" /* ================= */ /* TODO: DELETE THIS */ @@ -63,6 +64,24 @@ static char } static uint16_t + p_skip_clean_arg(const char *head, + char **ptr, + uint16_t argc, + size_t start[]) +{ + while (*(*ptr) != C_NULL && ft_iswhitespace(*(*ptr)) == FALSE) + { + (*ptr)++; + if ((*(*ptr) == C_SQUOTE || *(*ptr) == C_DQUOTE) && *(*(ptr - 1)) != '\\') + { + (*ptr)++; + return (p_count_args(head, *ptr, argc, start)); + } + } + return (0); +} + +uint16_t p_count_args(const char *head, char *ptr, uint16_t argc, size_t start[]) { if (*ptr == C_NULL) @@ -72,15 +91,7 @@ static uint16_t start[argc] = ptr - head; if (*ptr != C_SQUOTE && *ptr != C_DQUOTE && *ptr != C_NULL) { - while (*ptr != C_NULL && ft_iswhitespace(*ptr) == FALSE) - { - ptr++; - if ((*ptr == C_SQUOTE || *ptr == C_DQUOTE) && *(ptr - 1) != '\\') - { - ptr++; - return (p_count_args(head, ptr, argc, start)); - } - } + p_skip_clean_arg(head, &ptr, argc, start); } else if (*ptr == C_SQUOTE || *ptr == C_DQUOTE) { @@ -96,19 +107,6 @@ static uint16_t /* TODO: quotes parse error */ } -static void - p_del_alloced_words(char *words[], uint16_t to_del) -{ - uint16_t i; - - i = 0; - while (i < to_del) - { - ft_memdel((void*)&words[i]); - i++; - } -} - static char **p_split_words_no_rdr(const char word[]) { @@ -129,6 +127,7 @@ static char p_del_alloced_words(words, to_del); return (NULL); } + p_args_quotes(words); return (words); } -- cgit v1.2.3 From be81297dfc28503f7c1014aad4efcf52bd13aad1 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Thu, 3 Sep 2020 19:24:54 +0200 Subject: am good --- src/p_args.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index a0da592..72182fd 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -84,11 +84,15 @@ static uint16_t uint16_t p_count_args(const char *head, char *ptr, uint16_t argc, size_t start[]) { + static uint16_t preset = 512; + if (*ptr == C_NULL) return (argc); while (*ptr != C_NULL && ft_iswhitespace(*ptr) == TRUE) ptr++; - start[argc] = ptr - head; + if (preset != argc) + start[argc] = ptr - head; + preset = argc; if (*ptr != C_SQUOTE && *ptr != C_DQUOTE && *ptr != C_NULL) { p_skip_clean_arg(head, &ptr, argc, start); -- cgit v1.2.3 From 0e9cfacaf15bb0f4d8a7bd72bae56010d263b2c1 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Fri, 4 Sep 2020 22:02:44 +0200 Subject: Time to escape chars --- src/p_args.c | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index 72182fd..c25fc40 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -63,7 +63,7 @@ static char return (ptr); } -static uint16_t +static int32_t p_skip_clean_arg(const char *head, char **ptr, uint16_t argc, @@ -72,11 +72,18 @@ static uint16_t while (*(*ptr) != C_NULL && ft_iswhitespace(*(*ptr)) == FALSE) { (*ptr)++; - if ((*(*ptr) == C_SQUOTE || *(*ptr) == C_DQUOTE) && *(*(ptr - 1)) != '\\') + if ((*(*ptr) == C_SQUOTE || *(*ptr) == C_DQUOTE) && + *(*ptr - 1) != C_BACKSLASH) { - (*ptr)++; + (*ptr) += 1; return (p_count_args(head, *ptr, argc, start)); } + if (ft_iswhitespace(*(*ptr)) == TRUE && *(*ptr - 1) == C_BACKSLASH && + *(*ptr - 2) != C_BACKSLASH) + { + (*ptr) += 1; + return (-1); + } } return (0); } @@ -84,7 +91,7 @@ static uint16_t uint16_t p_count_args(const char *head, char *ptr, uint16_t argc, size_t start[]) { - static uint16_t preset = 512; + static int32_t preset = -1; if (*ptr == C_NULL) return (argc); @@ -95,7 +102,8 @@ uint16_t preset = argc; if (*ptr != C_SQUOTE && *ptr != C_DQUOTE && *ptr != C_NULL) { - p_skip_clean_arg(head, &ptr, argc, start); + if (p_skip_clean_arg(head, &ptr, argc, start) == -1) + argc -= 1; } else if (*ptr == C_SQUOTE || *ptr == C_DQUOTE) { @@ -114,15 +122,15 @@ uint16_t static char **p_split_words_no_rdr(const char word[]) { - char **words; - char *ptr; - size_t start[512]; - uint16_t argc; - uint16_t to_del; + char **words; + char *ptr; + size_t start[512]; + uint16_t argc; + uint16_t to_del; ptr = (char*)word; argc = p_count_args(word, ptr, 0, start); - ft_printf("%hu\n", argc); + ft_printf("argc: %hu\n", argc); if ((words = (char**)malloc((argc + 1) * sizeof(char*))) == NULL) return (NULL); words[argc] = NULL; @@ -131,6 +139,8 @@ static char p_del_alloced_words(words, to_del); return (NULL); } + p_print(words); + p_escape_chars(words); p_args_quotes(words); return (words); } -- cgit v1.2.3 From 385b5c002a83d4683d29d9d4f306d929e1ad1e41 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Fri, 4 Sep 2020 22:24:49 +0200 Subject: gotta do stuff --- src/p_args.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index c25fc40..9ce0230 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -17,6 +17,7 @@ #include "d_define.h" #include "p_args.h" #include "p_args_next.h" +#include "p_args_escape.h" #include "p_args_quotes.h" /* ================= */ @@ -139,9 +140,9 @@ static char p_del_alloced_words(words, to_del); return (NULL); } - p_print(words); - p_escape_chars(words); + p_args_escape_chars(words); p_args_quotes(words); + p_print(words); return (words); } @@ -156,11 +157,9 @@ char { if ((words = p_split_words_no_rdr(word)) == NULL) return (NULL); - p_print(words); exit(0); return (words); } - p_print(words); return (words); /* char **words; */ /* char *subst; */ -- cgit v1.2.3 From 3976118a6e9acd035d20ef79d92632ecb962814e Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Sat, 5 Sep 2020 14:48:49 +0200 Subject: Rewrite in progress --- src/p_args.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index 9ce0230..0ec391c 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -52,9 +52,9 @@ static char ptr++; if (*ptr == c && c == C_DQUOTE) { - if (*(ptr - 1) == C_BACKSLASH) + if (*(ptr - 1) == C_BS) { - if (*(ptr - 2) != C_BACKSLASH) + if (*(ptr - 2) != C_BS) ptr++; } } @@ -74,13 +74,13 @@ static int32_t { (*ptr)++; if ((*(*ptr) == C_SQUOTE || *(*ptr) == C_DQUOTE) && - *(*ptr - 1) != C_BACKSLASH) + *(*ptr - 1) != C_BS) { (*ptr) += 1; return (p_count_args(head, *ptr, argc, start)); } - if (ft_iswhitespace(*(*ptr)) == TRUE && *(*ptr - 1) == C_BACKSLASH && - *(*ptr - 2) != C_BACKSLASH) + if (ft_iswhitespace(*(*ptr)) == TRUE && *(*ptr - 1) == C_BS && + *(*ptr - 2) != C_BS) { (*ptr) += 1; return (-1); -- cgit v1.2.3 From 8e8508c068111729d74d43d51bd6f2f9b9e1cdc0 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Sat, 5 Sep 2020 15:57:20 +0200 Subject: In progress --- src/p_args.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index 0ec391c..fa01472 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -18,7 +18,6 @@ #include "p_args.h" #include "p_args_next.h" #include "p_args_escape.h" -#include "p_args_quotes.h" /* ================= */ /* TODO: DELETE THIS */ @@ -140,8 +139,7 @@ static char p_del_alloced_words(words, to_del); return (NULL); } - p_args_escape_chars(words); - p_args_quotes(words); + p_args_escape_chars_and_quotes(words); p_print(words); return (words); } -- cgit v1.2.3 From c75434256658e3009a5c61d02524cb49492bd120 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Sat, 5 Sep 2020 18:40:28 +0200 Subject: Clean af --- src/p_args.c | 121 +++++++++++++++++++++++++++++++---------------------------- 1 file changed, 63 insertions(+), 58 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index fa01472..f3e7403 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -18,6 +18,7 @@ #include "p_args.h" #include "p_args_next.h" #include "p_args_escape.h" +#include "u_utils.h" /* ================= */ /* TODO: DELETE THIS */ @@ -40,82 +41,87 @@ p_print(char *words[]) /* TODO: DELETE ABOVE */ /* ================== */ -static char - *p_skip_delim(char *ptr, char c) +static t_quote_mode + p_meet_dquote(char *head, char *ptr, t_quote_mode mode) { - ptr++; - if (*ptr == c) - return (++ptr); - while (*ptr != C_NULL && *ptr != c) + if (mode == Q_NONE) { - ptr++; - if (*ptr == c && c == C_DQUOTE) + if (u_is_not_escaped(head, ptr) == TRUE) { - if (*(ptr - 1) == C_BS) - { - if (*(ptr - 2) != C_BS) - ptr++; - } + return (Q_DOUBLE); + } + else + { + return (Q_NONE); } } - if (*ptr != C_NULL) - ptr++; - return (ptr); + else if (mode == Q_DOUBLE && u_is_not_escaped(head, ptr) == TRUE) + { + return (Q_NONE); + } + return (mode); } -static int32_t - p_skip_clean_arg(const char *head, - char **ptr, - uint16_t argc, - size_t start[]) +static t_quote_mode + p_meet_squote(char *head, char *ptr, t_quote_mode mode) { - while (*(*ptr) != C_NULL && ft_iswhitespace(*(*ptr)) == FALSE) + if (mode == Q_NONE) { - (*ptr)++; - if ((*(*ptr) == C_SQUOTE || *(*ptr) == C_DQUOTE) && - *(*ptr - 1) != C_BS) + if (u_is_not_escaped(head, ptr) == TRUE) { - (*ptr) += 1; - return (p_count_args(head, *ptr, argc, start)); + return (Q_SINGLE); } - if (ft_iswhitespace(*(*ptr)) == TRUE && *(*ptr - 1) == C_BS && - *(*ptr - 2) != C_BS) + else { - (*ptr) += 1; - return (-1); + return (Q_NONE); } } - return (0); + else if (mode == Q_SINGLE) + { + return (Q_NONE); + } + return (mode); } -uint16_t - p_count_args(const char *head, char *ptr, uint16_t argc, size_t start[]) +static t_bool + p_meet_whitespace(char *head, char *ptr, t_quote_mode mode) { - static int32_t preset = -1; - - if (*ptr == C_NULL) - return (argc); - while (*ptr != C_NULL && ft_iswhitespace(*ptr) == TRUE) - ptr++; - if (preset != argc) - start[argc] = ptr - head; - preset = argc; - if (*ptr != C_SQUOTE && *ptr != C_DQUOTE && *ptr != C_NULL) + if (mode == Q_NONE && u_is_not_escaped(head, ptr) == TRUE) { - if (p_skip_clean_arg(head, &ptr, argc, start) == -1) - argc -= 1; + return (TRUE); } - else if (*ptr == C_SQUOTE || *ptr == C_DQUOTE) + return (FALSE); +} + +static uint16_t + p_count_args(const char word[], size_t start[]) +{ + char *ptr; + t_quote_mode mode; + uint16_t count; + + (void)start; + ptr = (char *)word; + mode = Q_NONE; + count = 0; + while (*ptr != C_NULL) { - ptr = p_skip_delim(ptr, *ptr); - if (*ptr == C_NULL) - return (argc += 1); - else if (ft_iswhitespace(*ptr) == FALSE) - return (p_count_args(head, ptr, argc, start)); + if (*ptr == C_DQUOTE) + mode = p_meet_dquote((char*)word, ptr, mode); + else if (*ptr == C_SQUOTE) + mode = p_meet_squote((char*)word, ptr, mode); + if (ft_iswhitespace(*ptr) && + p_meet_whitespace((char*)word, ptr, mode) == TRUE) + { + count += 1; + while (*ptr != C_NULL && ft_iswhitespace(*ptr)) + ptr++; + ptr -= 1; + ft_printf("[%s]\n", ptr); + } + ptr++; } - else if (*ptr == C_NULL) - return (argc); - return (p_count_args(head, ptr, argc + 1, start)); + return (count); /* TODO: quotes parse error */ } @@ -123,14 +129,13 @@ static char **p_split_words_no_rdr(const char word[]) { char **words; - char *ptr; size_t start[512]; uint16_t argc; uint16_t to_del; - ptr = (char*)word; - argc = p_count_args(word, ptr, 0, start); + argc = p_count_args(word, start); ft_printf("argc: %hu\n", argc); + exit(0); if ((words = (char**)malloc((argc + 1) * sizeof(char*))) == NULL) return (NULL); words[argc] = NULL; -- cgit v1.2.3 From f359ecc021b8ec5360cfd9e7806d445f69a3fb63 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Sat, 5 Sep 2020 19:05:22 +0200 Subject: In progress boyyy --- src/p_args.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index f3e7403..ee2b937 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -93,6 +93,14 @@ static t_bool return (FALSE); } +static char + *p_skip_whitespace(char *ptr) +{ + while (*ptr != C_NULL && ft_iswhitespace(*ptr)) + ptr++; + return (ptr); +} + static uint16_t p_count_args(const char word[], size_t start[]) { @@ -100,10 +108,11 @@ static uint16_t t_quote_mode mode; uint16_t count; - (void)start; ptr = (char *)word; mode = Q_NONE; - count = 0; + count = 1; + ptr = p_skip_whitespace(ptr); + start[0] = (ptr - word); while (*ptr != C_NULL) { if (*ptr == C_DQUOTE) @@ -114,10 +123,9 @@ static uint16_t p_meet_whitespace((char*)word, ptr, mode) == TRUE) { count += 1; - while (*ptr != C_NULL && ft_iswhitespace(*ptr)) - ptr++; + ptr = p_skip_whitespace(ptr); + start[count - 1] = (ptr - word); ptr -= 1; - ft_printf("[%s]\n", ptr); } ptr++; } @@ -135,7 +143,6 @@ static char argc = p_count_args(word, start); ft_printf("argc: %hu\n", argc); - exit(0); if ((words = (char**)malloc((argc + 1) * sizeof(char*))) == NULL) return (NULL); words[argc] = NULL; -- cgit v1.2.3 From ab69117ff18f8b4a2b13adeada00cabd7d997855 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Sun, 6 Sep 2020 17:56:59 +0200 Subject: Better defines --- src/p_args.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index ee2b937..7d5a579 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -96,7 +96,7 @@ static t_bool static char *p_skip_whitespace(char *ptr) { - while (*ptr != C_NULL && ft_iswhitespace(*ptr)) + while (*ptr != C_NUL && ft_iswhitespace(*ptr)) ptr++; return (ptr); } @@ -113,8 +113,9 @@ static uint16_t count = 1; ptr = p_skip_whitespace(ptr); start[0] = (ptr - word); - while (*ptr != C_NULL) + while (*ptr != C_NUL) { + if (*ptr == C_BACKS) if (*ptr == C_DQUOTE) mode = p_meet_dquote((char*)word, ptr, mode); else if (*ptr == C_SQUOTE) -- cgit v1.2.3 From 92f7b8562ddc1e8d0484f7ec212a12e3019a24a5 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Sun, 6 Sep 2020 18:14:26 +0200 Subject: Gitignore update --- src/p_args.c | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index 7d5a579..7f5302f 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -24,23 +24,36 @@ /* TODO: DELETE THIS */ /* ================= */ +/* static void */ +/* p_print(char *words[]) */ +/* { */ +/* char **ptr; */ + +/* ptr = words; */ +/* while (*ptr != NULL) */ +/* { */ +/* ft_printf("[%s]\n", *ptr); */ +/* ptr++; */ +/* } */ +/* } */ + +/* ================== */ +/* TODO: DELETE ABOVE */ +/* ================== */ + static void -p_print(char *words[]) + p_meet_bs(char *ptr, t_quote_mode mode) { - char **ptr; - - ptr = words; - while (*ptr != NULL) + if (mode != Q_SINGLE) { - ft_printf("[%s]\n", *ptr); - ptr++; + if (*(ptr + 1) == C_BACKS) + { + *ptr = C_SUB; + *(ptr + 1) = C_SUB; + } } } -/* ================== */ -/* TODO: DELETE ABOVE */ -/* ================== */ - static t_quote_mode p_meet_dquote(char *head, char *ptr, t_quote_mode mode) { @@ -116,6 +129,7 @@ static uint16_t while (*ptr != C_NUL) { if (*ptr == C_BACKS) + p_meet_bs(ptr, mode); if (*ptr == C_DQUOTE) mode = p_meet_dquote((char*)word, ptr, mode); else if (*ptr == C_SQUOTE) @@ -143,7 +157,6 @@ static char uint16_t to_del; argc = p_count_args(word, start); - ft_printf("argc: %hu\n", argc); if ((words = (char**)malloc((argc + 1) * sizeof(char*))) == NULL) return (NULL); words[argc] = NULL; @@ -153,7 +166,6 @@ static char return (NULL); } p_args_escape_chars_and_quotes(words); - p_print(words); return (words); } @@ -163,7 +175,6 @@ char char **words; words = NULL; - ft_printf("word at start: [%s]\n", word); if (redir == 0) { if ((words = p_split_words_no_rdr(word)) == NULL) -- cgit v1.2.3 From 9ed927a6d4fd26dcdc7c094a0001521f072d8ae4 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Sun, 6 Sep 2020 18:25:02 +0200 Subject: Update --- src/p_args.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index 7f5302f..79f66bd 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -24,18 +24,18 @@ /* TODO: DELETE THIS */ /* ================= */ -/* static void */ -/* p_print(char *words[]) */ -/* { */ -/* char **ptr; */ - -/* ptr = words; */ -/* while (*ptr != NULL) */ -/* { */ -/* ft_printf("[%s]\n", *ptr); */ -/* ptr++; */ -/* } */ -/* } */ +static void +p_print(char *words[]) +{ + char **ptr; + + ptr = words; + while (*ptr != NULL) + { + ft_printf("[%s]\n", *ptr); + ptr++; + } +} /* ================== */ /* TODO: DELETE ABOVE */ @@ -166,6 +166,8 @@ static char return (NULL); } p_args_escape_chars_and_quotes(words); + p_print(words); + exit(0); return (words); } @@ -179,7 +181,6 @@ char { if ((words = p_split_words_no_rdr(word)) == NULL) return (NULL); - exit(0); return (words); } return (words); -- cgit v1.2.3 From 5c08ce82d29f8484ea477f8bb709ac358789c9bb Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Sun, 6 Sep 2020 18:46:43 +0200 Subject: Commit from minishell --- src/p_args.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index 79f66bd..ae92523 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -24,18 +24,18 @@ /* TODO: DELETE THIS */ /* ================= */ -static void -p_print(char *words[]) -{ - char **ptr; - - ptr = words; - while (*ptr != NULL) - { - ft_printf("[%s]\n", *ptr); - ptr++; - } -} +/* static void */ +/* p_print(char *words[]) */ +/* { */ +/* char **ptr; */ + +/* ptr = words; */ +/* while (*ptr != NULL) */ +/* { */ +/* ft_printf("[%s]\n", *ptr); */ +/* ptr++; */ +/* } */ +/* } */ /* ================== */ /* TODO: DELETE ABOVE */ @@ -166,8 +166,8 @@ static char return (NULL); } p_args_escape_chars_and_quotes(words); - p_print(words); - exit(0); + /* p_print(words); */ + /* exit(0); */ return (words); } -- cgit v1.2.3 From 4543c3ba3222d47780ad3e091cfe6f3098cc2bca Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Sun, 6 Sep 2020 21:56:20 +0200 Subject: Stacked --- src/p_args.c | 36 ++++++++++++------------------------ 1 file changed, 12 insertions(+), 24 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index ae92523..b449ba3 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -20,27 +20,6 @@ #include "p_args_escape.h" #include "u_utils.h" -/* ================= */ -/* TODO: DELETE THIS */ -/* ================= */ - -/* static void */ -/* p_print(char *words[]) */ -/* { */ -/* char **ptr; */ - -/* ptr = words; */ -/* while (*ptr != NULL) */ -/* { */ -/* ft_printf("[%s]\n", *ptr); */ -/* ptr++; */ -/* } */ -/* } */ - -/* ================== */ -/* TODO: DELETE ABOVE */ -/* ================== */ - static void p_meet_bs(char *ptr, t_quote_mode mode) { @@ -166,15 +145,14 @@ static char return (NULL); } p_args_escape_chars_and_quotes(words); - /* p_print(words); */ - /* exit(0); */ return (words); } char - **p_split_args(const char word[], int8_t redir) + **p_split_args(char word[], int8_t redir) { char **words; + size_t i; words = NULL; if (redir == 0) @@ -183,6 +161,16 @@ char return (NULL); return (words); } + i = ft_strlen(word); + while (ft_ischarset("<>", word[i]) == FALSE) + i--; + i--; + while (redir > 0 && ft_isdigit(word[i]) == TRUE) + i--; + word[i] = C_NUL; + ft_printf("[%s]\n", word); + if ((words = p_split_words_no_rdr(word)) == NULL) + return (NULL); return (words); /* char **words; */ /* char *subst; */ -- cgit v1.2.3 From d5cd448de1e1c9ced57cfbf8f241ab5b68c855b3 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Sun, 6 Sep 2020 22:16:20 +0200 Subject: qweqwe --- src/p_args.c | 1 - 1 file changed, 1 deletion(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index b449ba3..383700f 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -168,7 +168,6 @@ char while (redir > 0 && ft_isdigit(word[i]) == TRUE) i--; word[i] = C_NUL; - ft_printf("[%s]\n", word); if ((words = p_split_words_no_rdr(word)) == NULL) return (NULL); return (words); -- cgit v1.2.3 From d0038f19a7cb23749588b72c9febcf114d9d31e9 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Tue, 8 Sep 2020 18:31:51 +0200 Subject: static hist, words fix --- src/p_args.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index 383700f..78cfc06 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -116,9 +116,10 @@ static uint16_t if (ft_iswhitespace(*ptr) && p_meet_whitespace((char*)word, ptr, mode) == TRUE) { - count += 1; ptr = p_skip_whitespace(ptr); - start[count - 1] = (ptr - word); + start[count] = (ptr - word); + if (*ptr != C_NUL) + count += 1; ptr -= 1; } ptr++; -- cgit v1.2.3 From 74766656e5b605785e0e9622eb7f10d20a5467e3 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Tue, 8 Sep 2020 20:26:51 +0200 Subject: I hate myself and I want to die --- src/p_args.c | 47 +++-------------------------------------------- 1 file changed, 3 insertions(+), 44 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index 78cfc06..a4b3d02 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -18,6 +18,7 @@ #include "p_args.h" #include "p_args_next.h" #include "p_args_escape.h" +#include "u_parse.h" #include "u_utils.h" static void @@ -33,48 +34,6 @@ static void } } -static t_quote_mode - p_meet_dquote(char *head, char *ptr, t_quote_mode mode) -{ - if (mode == Q_NONE) - { - if (u_is_not_escaped(head, ptr) == TRUE) - { - return (Q_DOUBLE); - } - else - { - return (Q_NONE); - } - } - else if (mode == Q_DOUBLE && u_is_not_escaped(head, ptr) == TRUE) - { - return (Q_NONE); - } - return (mode); -} - -static t_quote_mode - p_meet_squote(char *head, char *ptr, t_quote_mode mode) -{ - if (mode == Q_NONE) - { - if (u_is_not_escaped(head, ptr) == TRUE) - { - return (Q_SINGLE); - } - else - { - return (Q_NONE); - } - } - else if (mode == Q_SINGLE) - { - return (Q_NONE); - } - return (mode); -} - static t_bool p_meet_whitespace(char *head, char *ptr, t_quote_mode mode) { @@ -110,9 +69,9 @@ static uint16_t if (*ptr == C_BACKS) p_meet_bs(ptr, mode); if (*ptr == C_DQUOTE) - mode = p_meet_dquote((char*)word, ptr, mode); + mode = u_meet_dquote((char*)word, ptr, mode); else if (*ptr == C_SQUOTE) - mode = p_meet_squote((char*)word, ptr, mode); + mode = u_meet_squote((char*)word, ptr, mode); if (ft_iswhitespace(*ptr) && p_meet_whitespace((char*)word, ptr, mode) == TRUE) { -- cgit v1.2.3 From bea195a2e8d8e26af7511a65af4c8641cb4d1c4f Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Thu, 10 Sep 2020 17:28:06 +0200 Subject: Even better parse --- src/p_args.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index a4b3d02..5276ae1 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -69,9 +69,9 @@ static uint16_t if (*ptr == C_BACKS) p_meet_bs(ptr, mode); if (*ptr == C_DQUOTE) - mode = u_meet_dquote((char*)word, ptr, mode); + mode = u_meet_dquote(word, ptr, mode); else if (*ptr == C_SQUOTE) - mode = u_meet_squote((char*)word, ptr, mode); + mode = u_meet_squote(word, ptr, mode); if (ft_iswhitespace(*ptr) && p_meet_whitespace((char*)word, ptr, mode) == TRUE) { -- cgit v1.2.3 From 8b15c7b0f233238a53088d8c095bd5af7f7592e7 Mon Sep 17 00:00:00 2001 From: JozanLeClerc Date: Sat, 12 Sep 2020 14:51:23 +0200 Subject: how tf will I norm this --- src/p_args.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/p_args.c') diff --git a/src/p_args.c b/src/p_args.c index 5276ae1..54a95a7 100644 --- a/src/p_args.c +++ b/src/p_args.c @@ -72,7 +72,7 @@ static uint16_t mode = u_meet_dquote(word, ptr, mode); else if (*ptr == C_SQUOTE) mode = u_meet_squote(word, ptr, mode); - if (ft_iswhitespace(*ptr) && + if (ft_iswhitespace(*ptr) == TRUE && p_meet_whitespace((char*)word, ptr, mode) == TRUE) { ptr = p_skip_whitespace(ptr); -- cgit v1.2.3