| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #include <errno.h>
- #include <string.h>
- #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));
- }
|