84 lines
2.3 KiB
C
84 lines
2.3 KiB
C
/* ************************************************************************** */
|
|
/* */
|
|
/* ::: :::::::: */
|
|
/* lib_fmt_validate.c :+: :+: :+: */
|
|
/* +:+ +:+ +:+ */
|
|
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
|
/* +#+#+#+#+#+ +#+ */
|
|
/* Created: 2016/11/07 13:33:43 by jhalford #+# #+# */
|
|
/* Updated: 2016/11/07 13:51:29 by jhalford ### ########.fr */
|
|
/* */
|
|
/* ************************************************************************** */
|
|
|
|
#include "ft_printf.h"
|
|
|
|
void ft_fmt_simplify(t_fmt *fmt)
|
|
{
|
|
char hashtag;
|
|
|
|
hashtag = '#';
|
|
if (fmt->conversion == 'p')
|
|
{
|
|
fmt->conversion = 'x';
|
|
if (!ft_strchr(fmt->flags, '#'))
|
|
ft_strncat(fmt->flags, &hashtag, 1);
|
|
}
|
|
if (ft_strchr("DOUCS", fmt->conversion))
|
|
{
|
|
fmt->conversion += 32;
|
|
ft_strcpy(fmt->modifier, "l");
|
|
}
|
|
}
|
|
|
|
int ft_fmt_validate_conversion(t_fmt *fmt)
|
|
{
|
|
if (!ft_strchr(ALL_CONVERSIONS, fmt->conversion))
|
|
{
|
|
if (fmt->conversion != '%')
|
|
ft_fmt_error_conv(fmt->conversion);
|
|
return (1);
|
|
}
|
|
return (0);
|
|
}
|
|
|
|
void ft_fmt_validate_flags(t_fmt *fmt)
|
|
{
|
|
char *flag_ptr;
|
|
char flag;
|
|
int i;
|
|
|
|
i = 0;
|
|
while (fmt->conversion != g_convs[i].id)
|
|
i++;
|
|
flag_ptr = fmt->flags;
|
|
while (*flag_ptr)
|
|
{
|
|
flag = *flag_ptr;
|
|
if (!ft_strchr(g_convs[i].allowed_flags, flag))
|
|
{
|
|
ft_fmt_error_flag_conv(flag, fmt->conversion);
|
|
if (flag == '#')
|
|
*flag_ptr = '.';
|
|
}
|
|
flag_ptr++;
|
|
}
|
|
if (ft_strchr(fmt->flags, '+') && (flag_ptr = ft_strchr(fmt->flags, ' ')))
|
|
{
|
|
ft_fmt_error_flag_flag(' ', '+');
|
|
*flag_ptr = '.';
|
|
}
|
|
if (ft_strchr(fmt->flags, '-') && (flag_ptr = ft_strchr(fmt->flags, '0')))
|
|
{
|
|
ft_fmt_error_flag_flag('0', '-');
|
|
*flag_ptr = '.';
|
|
}
|
|
if (fmt->precision && (flag_ptr = ft_strchr(fmt->flags, '0')))
|
|
*flag_ptr = '.';
|
|
}
|
|
|
|
void ft_fmt_validate_mod(t_fmt *fmt)
|
|
{
|
|
if (fmt->conversion == 's' || fmt->conversion == 'c')
|
|
if (fmt->modifier[0] && ft_strcmp(fmt->modifier, "l"))
|
|
ft_fmt_error_mod_conv(fmt->modifier, fmt->conversion);
|
|
}
|