From 23791a53d96246ecd011a292aa6bea5930d197a9 Mon Sep 17 00:00:00 2001 From: Loic Deridder Date: Tue, 11 Feb 2025 16:01:16 +0100 Subject: [PATCH] norm --- includes/exec/env.h | 6 +- includes/exec/expander.h | 21 ++++-- lib/libft/libft.h | 2 +- lib/libft/srcs/format/ft_atoi.c | 2 +- lib/libft/srcs/format/ft_atol.c | 30 +++++---- lib/libft/srcs/print/rep_c.c | 4 +- srcs/env/var.c | 100 ---------------------------- srcs/env/var2.c | 112 ++++++++++++++++++++++++++++++++ srcs/execution/exec.c | 26 ++++---- srcs/expander/expand_star.c | 21 ++---- srcs/expander/expand_tilde.c | 8 +-- srcs/expander/expand_var.c | 92 +++++--------------------- srcs/expander/expander.c | 17 +++-- srcs/expander/expander_utils.c | 88 +++++++++++++++++++++++++ 14 files changed, 284 insertions(+), 245 deletions(-) create mode 100644 srcs/env/var2.c create mode 100644 srcs/expander/expander_utils.c diff --git a/includes/exec/env.h b/includes/exec/env.h index 229cb07..3dc6caf 100644 --- a/includes/exec/env.h +++ b/includes/exec/env.h @@ -20,12 +20,12 @@ //VAR int count_var(char **envp); -int get_var_index(char *key, t_msh *msh); +int get_var_index(char *key, t_msh *msh); void free_null_ptr(void *ptr); char **copy_env_var(char **envp, int count); char *get_var_value(char *key, char **envp); -bool is_valid_key(char *key, t_msh *msh); -int remove_env_var(char *key, t_msh *msh); +bool is_valid_key(char *key, t_msh *msh); +int remove_env_var(char *key, t_msh *msh); void set_var_env(char *key, char *value, t_msh *msh); char **init_env(char **envp); diff --git a/includes/exec/expander.h b/includes/exec/expander.h index 8980987..b67c270 100644 --- a/includes/exec/expander.h +++ b/includes/exec/expander.h @@ -6,7 +6,7 @@ /* By: lderidde +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/07 10:21:00 by lderidde #+# #+# */ -/* Updated: 2025/02/10 10:40:51 by lderidde ### ########.fr */ +/* Updated: 2025/02/11 15:32:08 by lderidde ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,11 +17,18 @@ # include # include -int in_dquote(char *str, char *ch); -int in_squote(char *str, char *ch); -int expand_var(t_ast_n *node, int j); -int expand_tilde(t_ast_n *node, int j); -int expand_star(t_ast_n *node, int j); -t_ast_n *expand_node(t_ast_n *node); +int in_dquote(char *str, char *ch); +int in_squote(char *str, char *ch); +int expand_var(t_ast_n *node, int j); +int expand_tilde(t_ast_n *node, int j); +int expand_star(t_ast_n *node, int j); +t_ast_n *expand_node(t_ast_n *node); + +//UTILS +bool ft_fnmatch(const char *str, const char *pat); +int in_squote(char *str, char *ch); +int in_dquote(char *str, char *ch); +int is_exvalidchar(char c); +int exvalid_next(char c); #endif diff --git a/lib/libft/libft.h b/lib/libft/libft.h index 044e784..7e32cda 100644 --- a/lib/libft/libft.h +++ b/lib/libft/libft.h @@ -87,7 +87,7 @@ int ft_printf(const char *fstr, ...); int ft_fprintf(int fd, const char *str, ...); char *ft_sprintf(const char *str, ...); int ft_debug(const char *fstr, ...); -char *rep_c(char c, int count); +char *rep_c(char c, int count); char *get_next_line(int fd, int del); diff --git a/lib/libft/srcs/format/ft_atoi.c b/lib/libft/srcs/format/ft_atoi.c index ab236ed..3549661 100644 --- a/lib/libft/srcs/format/ft_atoi.c +++ b/lib/libft/srcs/format/ft_atoi.c @@ -23,7 +23,7 @@ static int ft_isspace(char c) int is_only_space(char *str) { - int i; + int i; i = -1; while (str[++i]) diff --git a/lib/libft/srcs/format/ft_atol.c b/lib/libft/srcs/format/ft_atol.c index e22c2bf..59d3b4a 100644 --- a/lib/libft/srcs/format/ft_atol.c +++ b/lib/libft/srcs/format/ft_atol.c @@ -1,3 +1,15 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atol.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lderidde +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/11 15:40:16 by lderidde #+# #+# */ +/* Updated: 2025/02/11 15:40:16 by lderidde ### ########.fr */ +/* */ +/* ************************************************************************** */ + #include "../../libft.h" static int is_signed(char c, int *sign) @@ -25,24 +37,16 @@ long ft_atol(const char *str) str++; while (*str >= '0' && *str <= '9') { - if (((sign > 0) && res >= (LONG_MAX / 10) && - (*str - '0' > LONG_MAX % 10)) - || (sign == -1 && res >= LONG_MAX / 10 && *str - '0' > LONG_MAX % 10 + 1)) + if (((sign > 0) && res >= (LONG_MAX / 10) + && (*str - '0' > LONG_MAX % 10)) + || (sign == -1 && res >= LONG_MAX / 10 + && *str - '0' > LONG_MAX % 10 + 1)) { errno = ERANGE; - break; + break ; } res = (res * 10) + (*str - '0'); str++; } return (res * sign); } -// -// #include -// -// int main(int ac, char **av) -// { -// printf("res: %ld\n", ft_atol(av[1])); -// printf("errno: %d\n", errno); -// -// } diff --git a/lib/libft/srcs/print/rep_c.c b/lib/libft/srcs/print/rep_c.c index a2ed8fd..809d39e 100644 --- a/lib/libft/srcs/print/rep_c.c +++ b/lib/libft/srcs/print/rep_c.c @@ -12,9 +12,9 @@ #include "../../libft.h" -char *rep_c(char c, int count) +char *rep_c(char c, int count) { - char *out; + char *out; out = malloc(sizeof(char) * (count + 1)); ft_memset(out, c, count); diff --git a/srcs/env/var.c b/srcs/env/var.c index a966f63..3529ee5 100644 --- a/srcs/env/var.c +++ b/srcs/env/var.c @@ -95,103 +95,3 @@ bool is_valid_key(char *key, t_msh *msh) free_null_ptr(tmp); return (false); } - -int get_var_index(char *key, t_msh *msh) -{ - int i; - char *new_key; - - new_key = ft_strjoin(key, "="); - if (!new_key) - return (-1); - i = 0; - while (msh->env[i]) - { - if (ft_strncmp(msh->env[i], new_key, ft_strlen(new_key)) == 0) - { - free_null_ptr(new_key); - return (i); - } - else if (ft_strncmp(msh->env[i], key, ft_strlen(key)) == 0 - && (ft_strchr(msh->env[i], '=') == NULL && - (ft_strlen(msh->env[i]) == ft_strlen(key)))) - { - free_null_ptr(new_key); - return (i); - } - i++; - } - free_null_ptr(new_key); - return (-1); -} - - -int remove_env_var(char *key, t_msh *msh) -{ - int i; - int j; - - i = get_var_index(key, msh); - if (i == -1) - return (0); - j = i; - free_null_ptr(msh->env[i]); - while (msh->env[i + 1]) - { - msh->env[i] = ft_strdup(msh->env[i + 1]); - free_null_ptr(msh->env[i + 1]); - j++; - i++; - } - msh->env = copy_env_var(msh->env, j); - if (msh->env) - return (1); - return (0); -} - -void set_var_env(char *key, char *value, t_msh *msh) -{ - int i; - char *tmp; - - tmp = NULL; - i = get_var_index(key, msh); - if (value) - tmp = ft_strjoin("=", value); - if (value && !tmp) - return ; - if (i != -1 && msh->env[i]) - { - free_null_ptr(msh->env[i]); - msh->env[i] = ft_strjoin(key, tmp); - } - else - { - i = count_var(msh->env); - msh->env = copy_env_var(msh->env, i + 1); - if (!msh->env) - return ; - msh->env[i] = ft_strjoin(key, tmp); - } - if (tmp && tmp[0]) - free_null_ptr(tmp); - return ; -} - -char **init_env(char **envp) -{ - char **env; - int i; - - i = 0; - env = malloc(sizeof(char *) * (count_var(envp) + 1)); - if (!env) - return (NULL); - env[count_var(envp)] = NULL; - while (envp[i]) - { - env[i] = ft_strdup(envp[i]); - i++; - } - return (env); -} diff --git a/srcs/env/var2.c b/srcs/env/var2.c new file mode 100644 index 0000000..9a474f9 --- /dev/null +++ b/srcs/env/var2.c @@ -0,0 +1,112 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* var2.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lderidde +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/11 15:36:27 by lderidde #+# #+# */ +/* Updated: 2025/02/11 15:36:27 by lderidde ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../includes/minishell.h" + +int get_var_index(char *key, t_msh *msh) +{ + int i; + char *new_key; + + new_key = ft_strjoin(key, "="); + if (!new_key) + return (-1); + i = 0; + while (msh->env[i]) + { + if (ft_strncmp(msh->env[i], new_key, ft_strlen(new_key)) == 0) + { + free_null_ptr(new_key); + return (i); + } + else if (ft_strncmp(msh->env[i], key, ft_strlen(key)) == 0 + && (ft_strchr(msh->env[i], '=') == NULL + && (ft_strlen(msh->env[i]) == ft_strlen(key)))) + { + free_null_ptr(new_key); + return (i); + } + i++; + } + free_null_ptr(new_key); + return (-1); +} + +int remove_env_var(char *key, t_msh *msh) +{ + int i; + int j; + + i = get_var_index(key, msh); + if (i == -1) + return (0); + j = i; + free_null_ptr(msh->env[i]); + while (msh->env[i + 1]) + { + msh->env[i] = ft_strdup(msh->env[i + 1]); + free_null_ptr(msh->env[i + 1]); + j++; + i++; + } + msh->env = copy_env_var(msh->env, j); + if (msh->env) + return (1); + return (0); +} + +void set_var_env(char *key, char *value, t_msh *msh) +{ + int i; + char *tmp; + + tmp = NULL; + i = get_var_index(key, msh); + if (value) + tmp = ft_strjoin("=", value); + if (value && !tmp) + return ; + if (i != -1 && msh->env[i]) + { + free_null_ptr(msh->env[i]); + msh->env[i] = ft_strjoin(key, tmp); + } + else + { + i = count_var(msh->env); + msh->env = copy_env_var(msh->env, i + 1); + if (!msh->env) + return ; + msh->env[i] = ft_strjoin(key, tmp); + } + if (tmp && tmp[0]) + free_null_ptr(tmp); + return ; +} + +char **init_env(char **envp) +{ + char **env; + int i; + + i = 0; + env = malloc(sizeof(char *) * (count_var(envp) + 1)); + if (!env) + return (NULL); + env[count_var(envp)] = NULL; + while (envp[i]) + { + env[i] = ft_strdup(envp[i]); + i++; + } + return (env); +} diff --git a/srcs/execution/exec.c b/srcs/execution/exec.c index 3ea5628..1af006a 100644 --- a/srcs/execution/exec.c +++ b/srcs/execution/exec.c @@ -264,19 +264,19 @@ void handle_redir(t_ast_n *node) int is_builtin(char *str) { - if (ft_strncmp(str, "exit", 4) == 0) + if (ft_strncmp(str, "exit", -1) == 0) return (1); - else if (ft_strncmp(str, "pwd", 3) == 0) + else if (ft_strncmp(str, "pwd", -1) == 0) return (1); - else if (ft_strncmp(str, "echo", 4) == 0) + else if (ft_strncmp(str, "echo", -1) == 0) return (1); - else if (ft_strncmp(str, "env", 3) == 0) + else if (ft_strncmp(str, "env", -1) == 0) return (1); - else if (ft_strncmp(str, "unset", 5) == 0) + else if (ft_strncmp(str, "unset", -1) == 0) return (1); - else if (ft_strncmp(str, "cd", 2) == 0) + else if (ft_strncmp(str, "cd", -1) == 0) return (1); - else if (ft_strncmp(str, "export", 6) == 0) + else if (ft_strncmp(str, "export", -1) == 0) return (1); else return (0); @@ -298,17 +298,17 @@ int exec_builtin(t_ast_n *node) int ret; expand_node(node); - if (ft_strncmp(node->cmd, "exit", 4) == 0) + if (ft_strncmp(node->cmd, "exit", -1) == 0) ret = builtin_exit(node->args, node->sh, node); - else if (ft_strncmp(node->cmd, "pwd", 3) == 0) + else if (ft_strncmp(node->cmd, "pwd", -1) == 0) ret = builtin_pwd(node->args); - else if (ft_strncmp(node->cmd, "echo", 4) == 0) + else if (ft_strncmp(node->cmd, "echo", -1) == 0) ret = builtin_echo(node, node->msh->env); - else if (ft_strncmp(node->cmd, "env", 3) == 0) + else if (ft_strncmp(node->cmd, "env", -1) == 0) ret = builtin_env(node->args, node->msh->env); - else if (ft_strncmp(node->cmd, "unset", 5) == 0) + else if (ft_strncmp(node->cmd, "unset", -1) == 0) ret = builtin_unset(node->args, node); - else if (ft_strncmp(node->cmd, "cd", 2) == 0) + else if (ft_strncmp(node->cmd, "cd", -1) == 0) ret = builtin_cd(node->args, node); else ret = builtin_export(node->args, node); diff --git a/srcs/expander/expand_star.c b/srcs/expander/expand_star.c index f7bfdf8..667a677 100644 --- a/srcs/expander/expand_star.c +++ b/srcs/expander/expand_star.c @@ -6,7 +6,7 @@ /* By: lderidde +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/10 09:09:37 by lderidde #+# #+# */ -/* Updated: 2025/02/11 13:04:05 by lderidde ### ########.fr */ +/* Updated: 2025/02/11 15:29:43 by lderidde ### ########.fr */ /* */ /* ************************************************************************** */ @@ -40,18 +40,6 @@ static char *_strfjoin(char *s1, char *s2) return (out); } -bool ft_fnmatch(const char *str, const char *pat) -{ - if (*pat == '\0' && *str == '\0') - return (true); - if (*pat == '*' && *(pat + 1) != '\0' && *str == '\0') - return (false); - if (*pat == *str) - return (ft_fnmatch(str + 1, pat + 1)); - if (*pat == '*') - return (ft_fnmatch(str, pat + 1) || ft_fnmatch(str + 1, pat)); - return (false); -} void handle_new(t_ast_n *node, int j, char *new) { if (new) @@ -78,12 +66,12 @@ void expander_star(t_ast_n *node, int j, char *pat) { if (new != NULL) new = _strfjoin(new, " "); - new = _strfjoin(new, entry->d_name); + new = _strfjoin(new, entry->d_name); entry = readdir(dir); } else entry = readdir(dir); - } + } handle_new(node, j, new); closedir(dir); } @@ -102,7 +90,8 @@ int expand_star(t_ast_n *node, int j) i = 0; while (node->args[j] && node->args[j][i]) { - if (node->args[j][i] == '*' && !in_quote(node->args[j], &node->args[j][i])) + if (node->args[j][i] == '*' && + !in_quote(node->args[j], &node->args[j][i])) return (expander_star(node, j, node->args[j]), 1); i++; } diff --git a/srcs/expander/expand_tilde.c b/srcs/expander/expand_tilde.c index 65ecc8b..3a987ad 100644 --- a/srcs/expander/expand_tilde.c +++ b/srcs/expander/expand_tilde.c @@ -15,7 +15,7 @@ static int get_new_len(t_ast_n *node, int j) { int i; - int len; + int len; i = -1; len = ft_strlen(node->args[j]); @@ -50,9 +50,9 @@ size_t ft_astrlcat(char *dst, const char *src, size_t dstsize) void expander_tilde(t_ast_n *node, int j) { - int i; - int len; - int save; + int i; + int len; + int save; char *new; i = -1; diff --git a/srcs/expander/expand_var.c b/srcs/expander/expand_var.c index 0679417..f5e23fb 100644 --- a/srcs/expander/expand_var.c +++ b/srcs/expander/expand_var.c @@ -6,33 +6,26 @@ /* By: lderidde +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/07 12:58:25 by lderidde #+# #+# */ -/* Updated: 2025/02/08 10:53:48 by lderidde ### ########.fr */ +/* Updated: 2025/02/11 15:31:05 by lderidde ### ########.fr */ /* */ /* ************************************************************************** */ #include "../../includes/minishell.h" -static int is_validchar(char c) +static int get_var_len(t_ast_n *node, int j, int *i) { - if (ft_isalnum(c) || c == '_') - return (1); - return (0); -} - -static int get_var_len(t_ast_n *node, int j , int *i) -{ - int len; - int ret; - char *str; + int len; + int ret; + char *str; len = *i + 1; - while (node->args[j][len] && is_validchar(node->args[j][len])) + while (node->args[j][len] && is_exvalidchar(node->args[j][len])) len++; str = ft_substr(node->args[j], *i + 1, (size_t)len - (*i + 1)); *i = len; ret = ft_strlen(get_var_value(str, node->msh->env)); ft_free(&str); - return (ret - (len - (*i + 1))); + return (ret - (len - (*i + 1))); } static char *extract_env(char *str, char **envp) @@ -42,7 +35,7 @@ static char *extract_env(char *str, char **envp) char *tmp; i = 1; - while (str[i] && is_validchar(str[i])) + while (str[i] && is_exvalidchar(str[i])) i++; if (i > 1) tmp = ft_substr(str, 1, i - 1); @@ -62,7 +55,7 @@ static int get_new_len(t_ast_n *node, int j) { if (node->args[j][i] == '$') { - len += get_var_len(node, j , &i); + len += get_var_len(node, j, &i); i--; } i++; @@ -70,18 +63,11 @@ static int get_new_len(t_ast_n *node, int j) return (len); } -static int valid_next(char c) -{ - if (c != '\0' && is_validchar(c)) - return (1); - return (0); -} - void expander_var(t_ast_n *node, int j) { - int i; - int k; - int len; + int i; + int k; + int len; char *new; i = -1; @@ -94,11 +80,11 @@ void expander_var(t_ast_n *node, int j) { if (node->args[j][k] != '$') new[i] = node->args[j][k++]; - else if (node->args[j][k] == '$' && valid_next(node->args[j][k + 1])) + else if (node->args[j][k] == '$' && exvalid_next(node->args[j][k + 1])) { ft_strlcat(new, extract_env(&node->args[j][k], node->msh->env), -1); i = ft_strlen(new) - 1; - while (node->args[j][++k] && is_validchar(node->args[j][k])) + while (node->args[j][++k] && is_exvalidchar(node->args[j][k])) continue ; } } @@ -106,53 +92,6 @@ void expander_var(t_ast_n *node, int j) node->args[j] = new; } -int in_squote(char *str, char *ch) -{ - if (!ft_strchr(str, '\'') && !ft_strchr(str, '\"')) - return (0); - else if (ft_strchr(str, '\'') && !ft_strchr(str, '\"')) - { - if ((ch > ft_strchr(str, '\'')) && ch < ft_strrchr(str, '\'')) - return (1); - return (0); - } - else if (!ft_strchr(str, '\'') && ft_strchr(str, '\"')) - return (0); - else - { - if (ft_strchr(str, '\'') < ft_strchr(str, '\"')) - { - if ((ch > ft_strchr(str, '\'')) && ch < ft_strrchr(str, '\'')) - return (1); - return (0); - } - return (0); - } -} - -int in_dquote(char *str, char *ch) -{ - if (!ft_strchr(str, '\'') && !ft_strchr(str, '\"')) - return (0); - else if (ft_strchr(str, '\"') && !ft_strchr(str, '\'')) - { - if ((ch > ft_strchr(str, '\"')) && ch < ft_strrchr(str, '\"')) - return (1); - return (0); - } - else if (!ft_strchr(str, '\"') && ft_strchr(str, '\'')) - return (0); - else - { - if (ft_strchr(str, '\"') < ft_strchr(str, '\'')) - { - if ((ch > ft_strchr(str, '\"')) && ch < ft_strrchr(str, '\"')) - return (1); - return (0); - } - return (0); - } -} int expand_var(t_ast_n *node, int j) { int i; @@ -160,7 +99,8 @@ int expand_var(t_ast_n *node, int j) i = 0; while (node->args[j][i]) { - if (node->args[j][i] == '$' && !in_squote(node->args[j], &node->args[j][i])) + if (node->args[j][i] == '$' && + !in_squote(node->args[j], &node->args[j][i])) return (expander_var(node, j), 1); i++; } diff --git a/srcs/expander/expander.c b/srcs/expander/expander.c index 63c9770..452dd2c 100644 --- a/srcs/expander/expander.c +++ b/srcs/expander/expander.c @@ -26,7 +26,7 @@ void remove_quote(t_ast_n *node, int j, char c) while (i < len - 2) { if ((&(node->args[j][k]) == ft_strchr(node->args[j], c)) || - (&(node->args[j][k]) == ft_strrchr(node->args[j], c))) + (&(node->args[j][k]) == ft_strrchr(node->args[j], c))) { k++; } @@ -37,11 +37,11 @@ void remove_quote(t_ast_n *node, int j, char c) node->args[j] = new; } -int ifremove_quote(t_ast_n *node, int j) +int ifremove_quote(t_ast_n *node, int j) { char c; int ret; - + ret = 0; if (!ft_strchr(node->args[j], '\'') && !ft_strchr(node->args[j], '\"')) c = 0; @@ -62,10 +62,10 @@ int ifremove_quote(t_ast_n *node, int j) char **arrange_tabs(t_ast_n *node, char **tab, int j) { - int save; - int i; - int k; - int len; + int save; + int i; + int k; + int len; char **new_arg; i = 0; @@ -92,8 +92,7 @@ void split_tab(t_ast_n *node, int j) char **tab; char **new_arg; - - tab =ft_split(node->args[j], " "); + tab = ft_split(node->args[j], " "); new_arg = arrange_tabs(node, tab, j); free_tab(tab); free_tab(node->args); diff --git a/srcs/expander/expander_utils.c b/srcs/expander/expander_utils.c new file mode 100644 index 0000000..fc3febc --- /dev/null +++ b/srcs/expander/expander_utils.c @@ -0,0 +1,88 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* expander_utils.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: lderidde +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/11 15:28:57 by lderidde #+# #+# */ +/* Updated: 2025/02/11 15:28:57 by lderidde ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../../includes/exec/expander.h" + +bool ft_fnmatch(const char *str, const char *pat) +{ + if (*pat == '\0' && *str == '\0') + return (true); + if (*pat == '*' && *(pat + 1) != '\0' && *str == '\0') + return (false); + if (*pat == *str) + return (ft_fnmatch(str + 1, pat + 1)); + if (*pat == '*') + return (ft_fnmatch(str, pat + 1) || ft_fnmatch(str + 1, pat)); + return (false); +} + +int in_squote(char *str, char *ch) +{ + if (!ft_strchr(str, '\'') && !ft_strchr(str, '\"')) + return (0); + else if (ft_strchr(str, '\'') && !ft_strchr(str, '\"')) + { + if ((ch > ft_strchr(str, '\'')) && ch < ft_strrchr(str, '\'')) + return (1); + return (0); + } + else if (!ft_strchr(str, '\'') && ft_strchr(str, '\"')) + return (0); + else + { + if (ft_strchr(str, '\'') < ft_strchr(str, '\"')) + { + if ((ch > ft_strchr(str, '\'')) && ch < ft_strrchr(str, '\'')) + return (1); + return (0); + } + return (0); + } +} + +int in_dquote(char *str, char *ch) +{ + if (!ft_strchr(str, '\'') && !ft_strchr(str, '\"')) + return (0); + else if (ft_strchr(str, '\"') && !ft_strchr(str, '\'')) + { + if ((ch > ft_strchr(str, '\"')) && ch < ft_strrchr(str, '\"')) + return (1); + return (0); + } + else if (!ft_strchr(str, '\"') && ft_strchr(str, '\'')) + return (0); + else + { + if (ft_strchr(str, '\"') < ft_strchr(str, '\'')) + { + if ((ch > ft_strchr(str, '\"')) && ch < ft_strrchr(str, '\"')) + return (1); + return (0); + } + return (0); + } +} + +int is_exvalidchar(char c) +{ + if (ft_isalnum(c) || c == '_') + return (1); + return (0); +} + +int exvalid_next(char c) +{ + if (c != '\0' && is_exvalidchar(c)) + return (1); + return (0); +}