/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* main.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: baco +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/04/13 06:58:46 by gbaconni #+# #+# */ /* Updated: 2022/04/17 09:59:04 by gbaconni ### lausanne.ch */ /* */ /* ************************************************************************** */ #include // printf #include // va_list, va_start, va_end #include // write #include // strlen #include // malloc, free #include // isdigit #include // assert #include #include "libftprintf/libftprintf.h" int isnumber(char *s); int isstring(char *s); int isnumber(char *s) { int i; i = 0; while (s[i]) { if (!isdigit(s[i])) return (0); i++; } return (1); } int isstring(char *s) { int i; i = 0; while (s[i]) { if (!isprint(s[i])) return (0); i++; } return (1); } void ft_begin(int *fd) { pipe(fd); fd[2] = dup(STDOUT_FILENO); dup2(fd[1], STDOUT_FILENO); } void ft_end(int *fd, char *str) { close(fd[1]); read(fd[0], str, sizeof(str)); close(fd[0]); dup2(fd[2], STDOUT_FILENO); } int main(int argc, char *argv[]) { int ft_ret; int ret; char out[256]; char ft_out[256]; char *format; int d; char c; char *s; int x; void *ptr; int fd[3]; d = 0; c = '\0'; s = ""; x = 42; ptr = &x; (void)s; if (argc > 1) { format = argv[1]; if (format[0] == '%') { if (format[1] == 'c') { c = argv[2][0]; ret = printf(format, c); printf("%d = printf(\"%s\", '%c')\n%s\n", ret, format, c, out); ft_begin(fd); ft_ret = ft_printf(format, c); ft_end(fd, ft_out); printf("%d = ft_printf(\"%s\", '%c')\n%s\n", ret, format, c, ft_out); assert(ret == ft_ret); assert(strcmp(out, ft_out) == 0); } else if (format[1] == 's') { s = argv[2]; ret = printf(format, s); printf(": %d = printf(\"%s\", \"%s\")\n", ret, format, s); ft_ret = ft_printf(format, s); printf(": %d = ft_printf(\"%s\", \"%s\")\n", ret, format, s); assert(ret == ft_ret); } else if (format[1] == 'p') { s = argv[2]; if (ft_strlen(s) == 0) { s = NULL; ptr = NULL; } ret = printf(format, ptr); printf(": %d = printf(\"%s\", \"%s\")\n", ret, format, s); ft_ret = ft_printf(format, ptr); printf(": %d = ft_printf(\"%s\", \"%s\")\n", ret, format, s); assert(ret == ft_ret); } else if (format[1] == 'd' || format[1] == 'i' || format[1] == 'u') { d = atoi(argv[2]); ret = printf(format, d); printf(": %d = printf(\"%s\", %d)\n", ret, format, d); ft_ret = ft_printf(format, d); printf(": %d = ft_printf(\"%s\", %d)\n", ret, format, d); assert(ret == ft_ret); } else if (format[1] == 'x' || format[1] == 'X') { d = atoi(argv[2]); ret = printf(format, d); printf(": %d = printf(\"%s\", %d)\n", ret, format, d); ft_ret = ft_printf(format, d); printf(": %d = ft_printf(\"%s\", %d)\n", ret, format, d); assert(ret == ft_ret); } } else { s = argv[2]; ret = printf(format, s); printf(": %d = printf(\"%s\", \"%s\")\n", ret, format, s); ft_ret = ft_printf(format, s); printf(": %d = ft_printf(\"%s\", \"%s\")\n", ret, format, s); assert(ret == ft_ret); } } return (0); }