pf_c_up.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /* ************************************************************************** */
  2. /* */
  3. /* ::: :::::::: */
  4. /* pf_c_up.c :+: :+: :+: */
  5. /* +:+ +:+ +:+ */
  6. /* By: bchanot <bchanot@students.42.fr> +#+ +:+ +#+ */
  7. /* +#+#+#+#+#+ +#+ */
  8. /* Created: 2016/02/27 01:59:11 by bchanot #+# #+# */
  9. /* Updated: 2018/10/14 03:37:20 by bchanot ### ########.fr */
  10. /* */
  11. /* ************************************************************************** */
  12. #include "libftprintf.h"
  13. #include <wchar.h>
  14. #include <stdlib.h>
  15. static int pf_width_c_up(char *s, t_inf inf, int len)
  16. {
  17. if (inf.prec < (int)ft_strlen(s) && inf.prec != 0)
  18. {
  19. if (len < inf.width - inf.prec)
  20. return (true);
  21. }
  22. else if (len < inf.width - (int)ft_strlen(s))
  23. return (true);
  24. return (false);
  25. }
  26. static int pf_c_up2(t_inf inf, char *s, int len)
  27. {
  28. if (inf.prec > 0 && inf.prec < (int)ft_strlen(s))
  29. len += pf_putnstr(s, inf.prec, inf.fd);
  30. else
  31. len += pf_putstr(s, inf.fd);
  32. if (inf.width > 0 && inf.min == 1)
  33. while (len < inf.width && len++ >= 0)
  34. ft_putchar_fd(' ', inf.fd);
  35. if (s)
  36. free(s);
  37. return (len);
  38. }
  39. int pf_c_up(va_list ap, t_inf inf)
  40. {
  41. wchar_t c;
  42. char *s;
  43. int len;
  44. len = inf.prec == -1 ? 1 : 0;
  45. c = va_arg(ap, wchar_t);
  46. s = ft_widechar(c);
  47. if (c == 0)
  48. return (1);
  49. if (inf.width > 0 && inf.min == 0)
  50. while (pf_width_c_up(s, inf, len) && len++ >= 0)
  51. ft_putchar_fd((inf.zero == 0 ? ' ' : '0'), inf.fd);
  52. if (inf.prec == -1 && c != 0)
  53. return (len - 1);
  54. return (pf_c_up2(inf, s, len));
  55. }