minishell
ft_strndup.c
Go to the documentation of this file.
1 /* ************************************************************************** */
2 /* */
3 /* ::: :::::::: */
4 /* ft_strndup.c :+: :+: :+: */
5 /* +:+ +:+ +:+ */
6 /* By: kfujita <kfujita@student.42tokyo.jp> +#+ +:+ +#+ */
7 /* +#+#+#+#+#+ +#+ */
8 /* Created: 2022/04/23 22:40:31 by kfujita #+# #+# */
9 /* Updated: 2022/04/26 00:24:59 by kfujita ### ########.fr */
10 /* */
11 /* ************************************************************************** */
12 
13 #include <stddef.h>
14 #include <stdlib.h>
15 #include "../ft_math/ft_math.h"
16 #include "ft_string.h"
17 
18 char *ft_strndup(const char *s1, size_t n)
19 {
20  size_t s1_len;
21  char *p_ret;
22  char *p_ret_top;
23 
24  if (n <= 0)
25  return (ft_strdup(""));
26  s1_len = ft_minp(ft_strlen(s1), n);
27  p_ret = (char *)malloc(s1_len + 1);
28  p_ret_top = p_ret;
29  if (p_ret == NULL)
30  return (NULL);
31  while (s1_len-- > 0)
32  *p_ret++ = *s1++;
33  *p_ret = '\0';
34  return (p_ret_top);
35 }
size_t ft_minp(size_t a, size_t b)
Definition: ft_min.c:32
char * ft_strdup(const char *s1)
Definition: ft_strdup.c:16
size_t ft_strlen(const char *s)
Definition: ft_strlen.c:15
char * ft_strndup(const char *s1, size_t n)
Definition: ft_strndup.c:18