Something went wrong. Try again.
My teams solution for the push-swap assignment.
Something went wrong. Try again.
2.3 kB · 87 lines
C
at master
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788/* ************************************************************************** *//* *//* ::: :::::::: *//* ft_printf.c :+: :+: :+: *//* +:+ +:+ +:+ *//* By: gvoelkne <marvin@42.fr> +#+ +:+ +#+ *//* +#+#+#+#+#+ +#+ *//* Created: 2026/04/29 09:00:02 by gvoelkne #+# #+# *//* Updated: 2026/05/31 00:00:00 by gvoelkne ### ########.fr *//* *//* ************************************************************************** */
#include "push_swap.h"
static int format_alloc(int fd, char fmt, va_list args){ char *str; int result;
str = NULL; if (fmt == 'd' || fmt == 'i') str = ft_ntoa(va_arg(args, int), 10); if (fmt == 'u') str = ft_untoa((unsigned int)va_arg(args, int), 10); if (fmt == 'X') str = ft_untoa(va_arg(args, unsigned int), 16); if (fmt == 'x') { str = ft_untoa(va_arg(args, unsigned int), 16); if (str) str = ft_strlower(str); } if (!str) return (0); result = ft_putstr(fd, str); free(str); return (result);}
static int format(int fd, char fmt, va_list args){ if (fmt == 'c') return (ft_putchar(fd, va_arg(args, int))); if (fmt == 's') return (ft_putstr(fd, va_arg(args, char *))); if (fmt == 'p') return (ft_putptr(va_arg(args, void *))); if (fmt == '%') return (ft_putchar(fd, '%')); return (format_alloc(fd, fmt, args));}
static int ft_vprintf(int fd, const char *s, va_list args){ int idx; int total;
idx = 0; total = 0; if (!s) return (-1); while (s[idx]) { if (s[idx] == '%' && s[idx + 1]) { idx += 1; if (!str_contains("csp%diuXx", s[idx])) return (-1); total += format(fd, s[idx], args); } else (ft_putchar(fd, s[idx]), total += 1); idx += 1; } return (total);}
int ft_printf(int fd, const char *s, ...){ va_list args; int ret;
va_start(args, s); ret = ft_vprintf(fd, s, args); va_end(args); return (ret);}