From a287db1124beda38507739f892c085bd3654ebd7 Mon Sep 17 00:00:00 2001 From: Rudy Bousset Date: Fri, 17 Jan 2020 19:34:53 +0100 Subject: Added libft --- libft/src/ft_printf_put_precision.c | 67 +++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 libft/src/ft_printf_put_precision.c (limited to 'libft/src/ft_printf_put_precision.c') diff --git a/libft/src/ft_printf_put_precision.c b/libft/src/ft_printf_put_precision.c new file mode 100644 index 0000000..7898102 --- /dev/null +++ b/libft/src/ft_printf_put_precision.c @@ -0,0 +1,67 @@ +/* ************************************************************************** */ +/* LE - / */ +/* / */ +/* ft_printf_put_precision.c .:: .:/ . .:: */ +/* +:+:+ +: +: +:+:+ */ +/* By: rbousset +:+ +: +: +:+ */ +/* #+# #+ #+ #+# */ +/* Created: 2019/12/31 14:40:49 by rbousset #+# ## ## #+# */ +/* Updated: 2019/12/31 14:40:50 by rbousset ### #+. /#+ ###.fr */ +/* / */ +/* / */ +/* ************************************************************************** */ + +#include +#include + +static int + ft_printf_get_len(t_printflist *pflist) +{ + if (pflist->conv == 'p' && pflist->precision > pflist->putlen) + return (pflist->precision - pflist->putlen + 2); + else if (pflist->precision > pflist->putlen && pflist->isneg == 0 + && pflist->isaplus == 0) + return (pflist->precision - pflist->putlen); + else if (pflist->precision >= pflist->putlen && pflist->isneg == 1) + { + if (pflist->isaz == 1) + return (pflist->precision - pflist->putlen - 1); + else + return (pflist->precision - pflist->putlen); + } + else if (pflist->precision >= pflist->putlen && pflist->isneg == 0 + && pflist->isaplus == 1) + { + if (pflist->isaz == 1) + return (pflist->precision - pflist->putlen); + else + return (pflist->precision - pflist->putlen + 1); + } + return (0); +} + +/* +** Puts the correct amount of 0's when +** needed using pflist->precision. +** Used for %p, %d, %i, %u, %x and %X +*/ + +int + ft_printf_put_precision(t_printflist *pflist) +{ + char *str; + int len; + + len = 0; + if (pflist->precision >= pflist->putlen) + { + len = ft_printf_get_len(pflist); + if (!(str = (char*)malloc((len + 1) * sizeof(char)))) + return (1); + str = ft_memset(str, '0', len); + *(str + len) = '\0'; + ft_printf_cat_output(str, ft_strlen(str), pflist); + ft_memdel(str); + } + return (0); +} -- cgit v1.2.3