diff options
author | Rudy Bousset <rbousset@z2r4p3.le-101.fr> | 2020-01-17 19:34:53 +0100 |
---|---|---|
committer | Rudy Bousset <rbousset@z2r4p3.le-101.fr> | 2020-01-17 19:34:53 +0100 |
commit | a287db1124beda38507739f892c085bd3654ebd7 (patch) | |
tree | c439a25efe0309de08087d439a597f84583b257f /libft/src/ft_printf_put_precision.c | |
parent | Removed libft (diff) | |
download | 42-cub3d-a287db1124beda38507739f892c085bd3654ebd7.tar.gz 42-cub3d-a287db1124beda38507739f892c085bd3654ebd7.tar.bz2 42-cub3d-a287db1124beda38507739f892c085bd3654ebd7.tar.xz 42-cub3d-a287db1124beda38507739f892c085bd3654ebd7.tar.zst 42-cub3d-a287db1124beda38507739f892c085bd3654ebd7.zip |
Added libft
Diffstat (limited to 'libft/src/ft_printf_put_precision.c')
-rw-r--r-- | libft/src/ft_printf_put_precision.c | 67 |
1 files changed, 67 insertions, 0 deletions
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 <marvin@le-101.fr> +:+ +: +: +:+ */ +/* #+# #+ #+ #+# */ +/* Created: 2019/12/31 14:40:49 by rbousset #+# ## ## #+# */ +/* Updated: 2019/12/31 14:40:50 by rbousset ### #+. /#+ ###.fr */ +/* / */ +/* / */ +/* ************************************************************************** */ + +#include <libft.h> +#include <stdlib.h> + +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); +} |