ft_sprintf.c 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include "ft_printf_internal.h"
  2. int ft_sprintf(char* output, char* format, ...)
  3. {
  4. va_list args;
  5. int result;
  6. va_start(args, format);
  7. result = ft_vsnprintf(output, -1, format, args);
  8. va_end(args);
  9. return result;
  10. }
  11. int ft_snprintf(char* output, int bufLen, char* format, ...)
  12. {
  13. va_list args;
  14. int result;
  15. va_start(args, format);
  16. result = ft_vsnprintf(output, bufLen, format, args);
  17. va_end(args);
  18. return result;
  19. }
  20. int ft_vsprintf(char* output, char* format, va_list args)
  21. {
  22. return ft_vsnprintf(output, -1, format, args);
  23. }
  24. int ft_vsnprintf(char* output, int bufLen, char* format, va_list args)
  25. {
  26. struct printf_data params;
  27. params.fd = -1;
  28. params.written = 0;
  29. params.inputBuffer = format;
  30. params.outputBuffer = output;
  31. params.bufferMaxSize = bufLen;
  32. params.realloc = 0;
  33. params.fdBuffer = NULL;
  34. params.bufferPos = 0;
  35. while (*params.inputBuffer)
  36. {
  37. if (doPrintf(&params, args) < 0)
  38. return -1;
  39. }
  40. flushBuffer(&params);
  41. return params.written;
  42. }