summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJozanLeClerc <bousset.rudy@gmail.com>2020-09-03 18:37:45 +0200
committerJozanLeClerc <bousset.rudy@gmail.com>2020-09-03 18:37:45 +0200
commit93fd5f480c4fb841945611ed13ca3fa81b376dff (patch)
tree329a90d5b4fb34ea1d3669277763b33e46c26552
parentGenius in progress (diff)
download42-minishell-93fd5f480c4fb841945611ed13ca3fa81b376dff.tar.gz
42-minishell-93fd5f480c4fb841945611ed13ca3fa81b376dff.tar.bz2
42-minishell-93fd5f480c4fb841945611ed13ca3fa81b376dff.tar.xz
42-minishell-93fd5f480c4fb841945611ed13ca3fa81b376dff.tar.zst
42-minishell-93fd5f480c4fb841945611ed13ca3fa81b376dff.zip
Better conditions, fuck the norm niggas
Diffstat (limited to '')
-rw-r--r--src/p_args.c7
-rw-r--r--src/p_args_next.c38
2 files changed, 43 insertions, 2 deletions
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;
diff --git a/src/p_args_next.c b/src/p_args_next.c
index 5967963..28410cd 100644
--- a/src/p_args_next.c
+++ b/src/p_args_next.c
@@ -13,15 +13,51 @@
#include <libft.h>
#include <stdint.h>
+#include "d_define.h"
#include "p_args.h"
static size_t
+ p_skip_delim_size(const char word[], char c, size_t end)
+{
+ end++;
+ if (word[end] == c)
+ return (end + 1);
+ while (word[end] != C_NULL && word[end] != c)
+ {
+ end++;
+ if (word[end] == c && c == C_DQUOTE)
+ {
+ if (word[end - 1] == C_BACKSLASH)
+ {
+ if (word[end - 2] != C_BACKSLASH)
+ end++;
+ }
+ }
+ }
+ if (word[end] != C_NULL)
+ {
+ end++;
+ }
+ return (end);
+}
+
+static size_t
p_arg_len(const char word[], const size_t start)
{
size_t end;
- (void)word;
end = start;
+ if (word[start] != C_SQUOTE &&
+ word[start] != C_DQUOTE &&
+ word[start] != C_NULL)
+ {
+ while (word[end] != C_NULL && ft_iswhitespace(word[end]) == FALSE)
+ end++;
+ }
+ else if (word[end] == C_SQUOTE || word[end] == C_DQUOTE)
+ {
+ end = p_skip_delim_size(word, word[end], end);
+ }
return (end);
}