pf_s.c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /* ************************************************************************** */
  2. /* */
  3. /* ::: :::::::: */
  4. /* pf_s.c :+: :+: :+: */
  5. /* +:+ +:+ +:+ */
  6. /* By: bchanot <bchanot@students.42.fr> +#+ +:+ +#+ */
  7. /* +#+#+#+#+#+ +#+ */
  8. /* Created: 2016/02/27 01:48:47 by bchanot #+# #+# */
  9. /* Updated: 2018/10/14 03:43:12 by bchanot ### ########.fr */
  10. /* */
  11. /* ************************************************************************** */
  12. #include "libftprintf.h"
  13. int pf_width_s(char *s, t_inf inf, int len)
  14. {
  15. if (ft_strlen(s) && inf.prec < (int)ft_strlen(s) && inf.prec != 0)
  16. {
  17. if (len < inf.width - inf.prec)
  18. return (true);
  19. }
  20. else if (len < inf.width - (int)ft_strlen(s))
  21. return (true);
  22. return (false);
  23. }
  24. int pf_s(va_list ap, t_inf inf)
  25. {
  26. char *s;
  27. int len;
  28. len = inf.prec == -1 ? 1 : 0;
  29. if (inf.l)
  30. return (pf_s_up(ap, inf));
  31. if ((s = va_arg(ap, char *)) == NULL)
  32. s = ft_strdup("(null)");
  33. if (inf.width > 0 && inf.min == 0)
  34. while (pf_width_s(s, inf, len) && len++ >= 0)
  35. ft_putchar_fd((inf.zero == 0 ? ' ' : '0'), inf.fd);
  36. if (ft_strlen(s) && inf.prec > 0 && inf.prec < (int)ft_strlen(s))
  37. len += pf_putnstr(s, inf.prec, inf.fd);
  38. else
  39. len += pf_putstr(s, inf.fd);
  40. if (inf.width > 0 && inf.min == 1)
  41. while (len < inf.width && len++ >= 0)
  42. ft_putchar_fd(' ', inf.fd);
  43. if (!ft_strcmp(s, "(null)"))
  44. ft_memdel((void **)&s);
  45. return (len);
  46. }