diff options
-rw-r--r-- | src/b_alias.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/b_alias.c b/src/b_alias.c index 02dfedb..fc1651b 100644 --- a/src/b_alias.c +++ b/src/b_alias.c @@ -72,11 +72,14 @@ static unsigned char b_print_arg(const char arg[], t_msh *msh) return (b_print_arg_next(ptr, arg, invalid, msh)); } +#include <stdlib.h> static void b_register_arg(const char arg[], t_msh *msh) { char *ptr; + char *rptr; char name[255]; char value[ARG_MAX]; + char tmp; ptr = (char*)arg; while (*ptr != C_NUL && *ptr != C_EQUALS) @@ -87,7 +90,21 @@ static void b_register_arg(const char arg[], t_msh *msh) { ft_strlcpy(name, arg, (ptr - arg < 255) ? ((ptr - arg) + 1) : (255)); ptr += 1; - ft_strlcpy(value, ptr, ARG_MAX); + rptr = ptr; + while (*rptr != C_NUL && ft_iswhitespace(*rptr) == TRUE) + rptr++; + tmp = *(rptr + ft_strlen(name)); + *(rptr + ft_strlen(name)) = C_NUL; + if (ft_strncmp(rptr, name, ft_strlen(name) + 1) == 0) { + *(rptr + ft_strlen(name)) = tmp; + ft_strlcpy(value, ptr, ARG_MAX); + ft_memmove(value + (rptr - ptr) + 1, value + (rptr - ptr), ft_strlen(value + (rptr - ptr)) + 1); + *(value + (rptr - ptr)) = C_BACKS; + } + else { + *(rptr + ft_strlen(name)) = tmp; + ft_strlcpy(value, ptr, ARG_MAX); + } u_set_alias_value(name, value, msh); } } |