printfouxX.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include "ft_printf_internal.h"
  2. int printf_u(struct printf_data* data, struct printf_format_params* format, va_list args)
  3. {
  4. return printfNumber(data, format, va_arg(args, unsigned int), 0, DEC_ALPHABET);
  5. }
  6. int printf_o(struct printf_data* data, struct printf_format_params* format, va_list args)
  7. {
  8. return printfNumber(data, format, va_arg(args, unsigned int), 0, OCT_ALPHABET);
  9. }
  10. int printf_X(struct printf_data* data, struct printf_format_params* format, va_list args)
  11. {
  12. return printfNumber(data, format, va_arg(args, unsigned int), 0, HEX_ALPHABET);
  13. }
  14. int printf_x(struct printf_data* data, struct printf_format_params* format, va_list args)
  15. {
  16. return printfNumber(data, format, va_arg(args, unsigned int), 0, HEx_ALPHABET);
  17. }
  18. int printf_p(struct printf_data* data, struct printf_format_params* format, va_list args)
  19. {
  20. int result;
  21. int oldFlags = format->flags;
  22. void* ptr = va_arg(args, void*);
  23. if (!ptr)
  24. return printfString(data, format, "(nil)");
  25. format->flags |= PRINTF_FLAG_ALTERNATE_FORM;
  26. format->typeName = printf_x;
  27. result = printfNumber(data, format, (unsigned long long) ptr, 0, HEx_ALPHABET);
  28. format->typeName = printf_p;
  29. format->flags = oldFlags;
  30. return result;
  31. }