-
Notifications
You must be signed in to change notification settings - Fork 0
/
get_next_line_utils.c
100 lines (90 loc) · 2.34 KB
/
get_next_line_utils.c
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* get_next_line_utils.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: awerebea <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/05/13 12:59:14 by awerebea #+# #+# */
/* Updated: 2020/09/22 18:38:04 by awerebea ### ########.fr */
/* */
/* ************************************************************************** */
#include "get_next_line.h"
char *ft_strjoin(char const *s1, char const *s2)
{
char *result;
size_t len;
size_t start;
if (!s1 || !s2)
return (NULL);
start = (size_t)s1;
while (*s1)
s1++;
len = ((size_t)s1 - start);
s1 -= ((size_t)s1 - start);
start = (size_t)s2;
while (*s2)
s2++;
len += ((size_t)s2 - start);
s2 -= ((size_t)s2 - start);
if (!(result = malloc(sizeof(char) * (len + 1))))
return (NULL);
while (*s1)
*result++ = *s1++;
while (*s2)
*result++ = *s2++;
*result = '\0';
result -= len;
return (result);
}
char *ft_strdup(const char *s)
{
char *dest;
size_t len;
size_t start;
start = (size_t)s;
while (*s)
s++;
len = (size_t)s - start;
s -= len;
if (!(dest = malloc(sizeof(char) * (len + 1))))
return (NULL);
while (*s)
*dest++ = (char)*s++;
*dest = '\0';
dest -= len;
return (dest);
}
char *ft_strchr(const char *s, int c)
{
while (*s != c)
{
if (!*s)
return (NULL);
s++;
}
return ((char *)s);
}
t_glst *f_gnl_new(int fd)
{
t_glst *gnl;
if (!(gnl = (t_glst*)malloc(sizeof(t_glst))))
return (NULL);
gnl->fd = fd;
gnl->rmndr = NULL;
gnl->rmndr_start = NULL;
gnl->next = NULL;
return (gnl);
}
t_glst *f_search_gnl(int fd, t_glst **g_head)
{
t_glst *g_tmp;
if (!*g_head)
return ((*g_head = f_gnl_new(fd)) ? *g_head : NULL);
g_tmp = *g_head;
while (g_tmp->fd != fd && g_tmp->next)
g_tmp = g_tmp->next;
if (g_tmp->fd == fd)
return (g_tmp);
return ((g_tmp->next = f_gnl_new(fd)) ? g_tmp->next : NULL);
}