From 620054c92ef3c31c62f1d45b1d6bb75c6add8ea7 Mon Sep 17 00:00:00 2001 From: David Gailleton Date: Fri, 21 Nov 2025 14:55:25 +0100 Subject: [PATCH] Add write error management --- src/ft_printf.c | 6 +++++- src/ft_putnbr_base.c | 9 ++++++--- src/print_pointer.c | 8 +++++--- src/print_str.c | 8 +++++--- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/ft_printf.c b/src/ft_printf.c index 9cb1f33..d5e5930 100644 --- a/src/ft_printf.c +++ b/src/ft_printf.c @@ -6,7 +6,7 @@ /* By: dgaillet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/11/17 10:54:03 by dgaillet #+# #+# */ -/* Updated: 2025/11/19 17:52:14 by dgaillet ### ########lyon.fr */ +/* Updated: 2025/11/21 14:47:19 by dgaillet ### ########lyon.fr */ /* */ /* ************************************************************************** */ @@ -40,12 +40,14 @@ int ft_printf(const char *first_arg, ...) va_list args; int nb_print; int i; + int temp; nb_print = 0; va_start(args, first_arg); i = 0; while (first_arg[i]) { + temp = nb_print; if (first_arg[i] == '%') { i++; @@ -53,6 +55,8 @@ int ft_printf(const char *first_arg, ...) } else nb_print += write(1, &first_arg[i], 1); + if (temp > nb_print) + return (-1); i++; } va_end(args); diff --git a/src/ft_putnbr_base.c b/src/ft_putnbr_base.c index 72414d7..43ae1bf 100644 --- a/src/ft_putnbr_base.c +++ b/src/ft_putnbr_base.c @@ -6,7 +6,7 @@ /* By: dgaillet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/11/17 12:16:44 by dgaillet #+# #+# */ -/* Updated: 2025/11/17 12:43:17 by dgaillet ### ########lyon.fr */ +/* Updated: 2025/11/21 14:49:36 by dgaillet ### ########lyon.fr */ /* */ /* ************************************************************************** */ @@ -14,11 +14,14 @@ int ft_putnbr_base(unsigned long long nbr, char *base, int base_size) { - int i; + int i; + char temp; if (nbr == 0) return (0); i = 1 + ft_putnbr_base(nbr / base_size, base, base_size); - ft_putchar_fd(base[nbr % base_size], 1); + temp = base[nbr % base_size]; + if (write(1, &temp, 1) < 0) + return (-10000); return (i); } diff --git a/src/print_pointer.c b/src/print_pointer.c index eefe95e..5630f1e 100644 --- a/src/print_pointer.c +++ b/src/print_pointer.c @@ -6,7 +6,7 @@ /* By: dgaillet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/11/17 12:19:16 by dgaillet #+# #+# */ -/* Updated: 2025/11/17 12:53:27 by dgaillet ### ########lyon.fr */ +/* Updated: 2025/11/21 14:51:15 by dgaillet ### ########lyon.fr */ /* */ /* ************************************************************************** */ @@ -17,9 +17,11 @@ int print_pointer(unsigned long long p) { if (!p) { - ft_putstr_fd("(nil)", 1); + if (write(1, "(nil)", 5) < 0) + return (-1); return (5); } - ft_putstr_fd("0x", 1); + if (write(1, "0x", 2) < 0) + return (-1); return (2 + ft_putnbr_base(p, "0123456789abcdef", 16)); } diff --git a/src/print_str.c b/src/print_str.c index ae7726c..0827787 100644 --- a/src/print_str.c +++ b/src/print_str.c @@ -6,7 +6,7 @@ /* By: dgaillet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/11/17 12:02:03 by dgaillet #+# #+# */ -/* Updated: 2025/11/17 12:51:56 by dgaillet ### ########lyon.fr */ +/* Updated: 2025/11/21 14:54:08 by dgaillet ### ########lyon.fr */ /* */ /* ************************************************************************** */ @@ -16,9 +16,11 @@ int print_str(char *str) { if (!str) { - ft_putstr_fd("(null)", 1); + if (write(1, "(null)", 6) < 0) + return (-1); return (6); } - ft_putstr_fd(str, 1); + if (write(1, str, ft_strlen(str)) < 0) + return (-1); return (ft_strlen(str)); }