#include #include #include "ft_printf_internal.h" int padString(struct printf_data* data, int len) { int padLen = 0; int sysCallRet; while (len > 0) { sysCallRet = printfWrite(data, " ", 1); if (sysCallRet < 0) return sysCallRet; padLen += sysCallRet; --len; } return padLen; } int printf_c(struct printf_data* data, struct printf_format_params* format, va_list args) { char c = (char) va_arg(args, int); int len = format->width -1; int padLen = 0; int sysCallRet; padLen = padString(data, len); if (padLen < 0) return padLen; sysCallRet = printfWrite(data, &c, 1); if (sysCallRet < 0) return sysCallRet; return sysCallRet + padLen; } int printfString(struct printf_data* data, struct printf_format_params* format, const char* str) { int len = strlen(str); int pad = format->width; if (format->precision >= 0 && len > format->precision) len = format->precision; if (pad >= 0) pad = pad - len; pad = padString(data, pad); if (pad < 0) return pad; len = printfWrite(data, str, len); if (len < 0) return len; return pad + len; } int printf_s(struct printf_data* data, struct printf_format_params* format, va_list args) { const char* str = va_arg(args, const char*); return printfString(data, format, str == NULL ? "(null)" : str); } int printf_m(struct printf_data* data, struct printf_format_params* format, va_list args) { (void) args; return printfString(data, format, strerror(errno)); }