| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #include <stdlib.h>
- #include "ft_printf_internal.h"
- int doPrintf(struct printf_data* params, va_list args)
- {
- int to;
- int syscallReturn;
- to = 0;
- while (params->inputBuffer[to] && params->inputBuffer[to] != '%')
- {
- ++to;
- }
- if (to)
- {
- syscallReturn = printfWrite(params, params->inputBuffer, to);
- if (syscallReturn < 0)
- return syscallReturn;
- params->inputBuffer += to;
- }
- if (*params->inputBuffer == '%')
- {
- params->inputBuffer++;
- syscallReturn = expandParams(params, args);
- if (syscallReturn < 0)
- return syscallReturn;
- return 0;
- }
- return 0;
- }
- int ft_vdprintf(int fd, char* format, va_list args)
- {
- struct printf_data params;
- params.fd = fd;
- params.written = 0;
- params.inputBuffer = format;
- params.outputBuffer = NULL;
- params.realloc = 0;
- params.fdBuffer = (char*) malloc(sizeof(*params.fdBuffer) * PRINTF_FD_BUFFER_LEN);
- params.bufferMaxSize = PRINTF_FD_BUFFER_LEN;
- params.bufferPos = 0;
- while (*params.inputBuffer)
- {
- if (doPrintf(¶ms, args) < 0)
- return -1;
- }
- flushBuffer(¶ms);
- free(params.fdBuffer);
- return params.written;
- }
|