diff options
Diffstat (limited to '')
| -rw-r--r-- | src/ft_b_echo.c | 49 | 
1 files changed, 37 insertions, 12 deletions
diff --git a/src/ft_b_echo.c b/src/ft_b_echo.c index c849924..8a2d0d7 100644 --- a/src/ft_b_echo.c +++ b/src/ft_b_echo.c @@ -12,6 +12,7 @@  #include <libft.h>  #include <stdint.h> +#include <stdio.h>  #include <stdlib.h>  #include "ft_s_struct.h" @@ -22,6 +23,37 @@  /* echo kill\nbackslash\nbut\nnot\nn, echo "quoted\nnew\nlines" */  /* Might need to go full buffer */ +char +	*ft_e_initb(char *ptr[], +                    char *str) +{ +    size_t    len; +    uint8_t   i; + +    len = 0; +    i = -1; +    while (ptr[++i]) +    { +        len += ft_strlen(ptr[i]); +    } +    if (!(str = malloc(len * sizeof(char)))) +        return (NULL); +    return (str); +} + +void +ft_e_fill(char *ptr[], char **str) +{ +    ft_sprintf(*str, "%s", *ptr); +    ptr++; +    while (*ptr) +    { +        ft_sprintf(*str + ft_strlen(*str), " %s", *ptr); +        ptr++; +    } +    *str = ft_strtrim(*str, "\"\'"); +} +  uint8_t  	ft_b_echo(char *args[],  			t_msh *msh) @@ -34,7 +66,8 @@ uint8_t  	(void)msh;  	ptr = args;  	nopt = 0; -    str = malloc(1000); +    str = NULL; +    str = ft_e_initb(ptr, str);  	if (argc >= 1)  	{  		if (ft_strncmp(ptr[0], "-n", 2) == 0) @@ -43,18 +76,10 @@ uint8_t  			ptr += 1;  		}  		if (argc - nopt >= 1) -		{ -			ft_sprintf(str, "%s", *ptr); -            ptr++; -			while (*ptr) -			{ -				ft_sprintf(str + ft_strlen(str), " %s", *ptr); -				ptr++; -			} -		} +            ft_e_fill(ptr, &str);  	} -    str = ft_strtrim(str, "\"\'"); -    ft_putstr(str); +    ft_printf("%s", str); +    free(str);  	if (nopt == 0)  		ft_printf("\n");  	return (0);  | 
