Beispiel #1
0
int		manage_args(char **format, va_list *args, t_data *data)
{
	int			ret;
	t_manager	f;

	if (!(*(++*format)))
		return (0);
	if (!(ft_printf_parse_flags(format, data)) ||
			!(ft_printf_parse_width(format, args, data)) ||
			!(ft_printf_parse_accuracy(format, args, data)) ||
			!(ft_printf_parse_length(format, data)))
		return (-1);
	if (!**format)
		return (0);
	if (!(f = ft_printf_get_manager(**format)))
		f = &ft_printf_manage_null;
	ret = f(format, args, data);
	(*format)++;
	return (ret);
}
int					ft_parse_printf_char(int fd,
										char **fmt,
										va_list args)
{
	t_printf_parse_env	env;

	env.fd = fd;
	env.fmt = fmt;
	env.ret = 0;
	if (**fmt == '%')
	{
		(*fmt)++;
		env.width = ft_printf_parse_width(fmt);
		if (!ft_parse_printf_char1(&env, args))
		{
			if (!ft_parse_printf_char2(&env, args))
				env.ret += ft_putchar_fd(**fmt, fd);
		}
	}
	else
		env.ret += ft_putchar_fd(**fmt, fd);
	return (env.ret);
}