aboutsummaryrefslogtreecommitdiffstats
path: root/src/ft_itoa.c
blob: 05f3faebe2465f8e2e88ece26ce0da8c997e936c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include "libft.h"
#include <stdlib.h>

static size_t
_s_numlen (int n)
{
  size_t len;

  len = 1;
  if (n < 0)
    len++;
  while (n / 10)
    {
      len++;
      n /= 10;
    }
  return (len);
}

char *
ft_itoa (int n)
{
  size_t len;
  char *str;
  unsigned int nb;

  len = _s_numlen (n);
  str = malloc (len + 1);
  if (!str)
    return (NULL);
  str[len] = '\0';
  if (n < 0)
    {
      str[0] = '-';
      nb = -n;
    }
  else
    nb = n;
  while (len > 0 && str[len - 1] != '-')
    {
      str[--len] = '0' + nb % 10;
      nb /= 10;
    }
  return (str);
}