Improve main by implementing fmtsplit to split format into chunks and pass function pointer to compare ft_printf with printf

This commit is contained in:
gbaconni
2022-04-24 00:40:01 +02:00
parent 505f5d9912
commit d4fb946428
11 changed files with 236 additions and 271 deletions

View File

@@ -6,34 +6,79 @@
/* By: gbaconni@student.42lausanne.ch +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/04/17 22:35:03 by gbaconni #+# #+# */
/* Updated: 2022/04/17 23:08:35 by gbaconni ### lausanne.ch */
/* Updated: 2022/04/23 23:37:55 by gbaconni ### lausanne.ch */
/* */
/* ************************************************************************** */
#include "libftprintf.h"
static char ft_unescape_char(const char c);
static size_t ft_unescape_len(const char *str);
int ft_vprintf_escape(const char *format, va_list ap)
{
int ret;
(void) ap;
if (*format == '0')
ret = ft_putchar('\0');
if (*format == 'a')
ret = ft_putchar('\a');
else if (*format == 'b')
ret = ft_putchar('\b');
else if (*format == 't')
ret = ft_putchar('\t');
else if (*format == 'n')
ret = ft_putchar('\n');
else if (*format == 'v')
ret = ft_putchar('\v');
else if (*format == 'f')
ret = ft_putchar('\f');
else if (*format == 'r')
ret = ft_putchar('\r');
else if (*format == 'e')
ret = ft_putchar('\033');
ret = ft_putchar(ft_unescape_char(*format));
return (ret);
}
char *ft_unescape(const char *str)
{
char *s;
void *ptr;
s = (char *) ft_calloc(ft_unescape_len(str) + 1, sizeof(char));
if (s == NULL)
return (NULL);
ptr = s;
while (*str != '\0')
{
if (*str == '\\')
*s++ = ft_unescape_char(*++str);
else
*s++ = *str;
str++;
}
*s = '\0';
s = ptr;
return (s);
}
static char ft_unescape_char(const char c)
{
if (c == 'a')
return ('\a');
else if (c == 'b')
return ('\b');
else if (c == 't')
return ('\t');
else if (c == 'n')
return ('\n');
else if (c == 'v')
return ('\v');
else if (c == 'f')
return ('\f');
else if (c == 'r')
return ('\r');
else if (c == 'e')
return ('\033');
else
return (c);
}
static size_t ft_unescape_len(const char *str)
{
size_t len;
len = 0;
while (*str != '\0')
{
if (*str == '\\')
str++;
len++;
str++;
}
return (len);
}