get_next_line_utils.c
1 /* ************************************************************************** */ 2 /* */ 3 /* ::: :::::::: */ 4 /* get_next_line_utils.c :+: :+: :+: */ 5 /* +:+ +:+ +:+ */ 6 /* By: gychoi <gychoi@student.42seoul.kr> +#+ +:+ +#+ */ 7 /* +#+#+#+#+#+ +#+ */ 8 /* Created: 2022/08/12 16:24:22 by gychoi #+# #+# */ 9 /* Updated: 2022/12/13 15:44:55 by gychoi ### ########.fr */ 10 /* */ 11 /* ************************************************************************** */ 12 13 #include "get_next_line.h" 14 15 char *gnl_strdup(char *s1) 16 { 17 size_t len; 18 char *string; 19 20 if (s1 == NULL) 21 { 22 string = malloc(sizeof(char)); 23 if (string == NULL) 24 return (NULL); 25 string[0] = '\0'; 26 return (string); 27 } 28 len = 0; 29 while (s1[len] != '\0') 30 len++; 31 string = malloc(sizeof(char) * len + 1); 32 if (string == NULL) 33 return (NULL); 34 len = 0; 35 while (*s1) 36 string[len++] = *s1++; 37 string[len] = '\0'; 38 return (string); 39 } 40 41 char *gnl_strjoin(char *s1, char *s2) 42 { 43 size_t len1; 44 size_t len2; 45 size_t i; 46 char *string; 47 48 len1 = 0; 49 while (s1[len1] != '\0') 50 len1++; 51 len2 = 0; 52 while (s2[len2] != '\0') 53 len2++; 54 string = malloc(sizeof(char) * (len1 + len2) + 1); 55 if (string == NULL) 56 return (NULL); 57 i = 0; 58 while (*s1) 59 string[i++] = *s1++; 60 while (*s2) 61 string[i++] = *s2++; 62 string[i] = '\0'; 63 return (string); 64 } 65 66 void *gnl_lstclear(t_gnl **head, int fd) 67 { 68 t_gnl *cur; 69 t_gnl *tmp; 70 71 if (*head != NULL && (*head)->fd == fd) 72 { 73 tmp = (*head)->next; 74 free((*head)->backup); 75 free(*head); 76 *head = tmp; 77 } 78 cur = *head; 79 while (cur != NULL) 80 { 81 if (cur->next != NULL && cur->next->fd == fd) 82 { 83 tmp = cur->next->next; 84 free(cur->next->backup); 85 free(cur->next); 86 cur->next = tmp; 87 break ; 88 } 89 cur = cur->next; 90 } 91 return (NULL); 92 } 93 94 t_gnl *gnl_lstset(t_gnl **head, int fd) 95 { 96 t_gnl *cur; 97 98 if (*head == NULL) 99 { 100 *head = gnl_lstnew(fd); 101 return (*head); 102 } 103 cur = *head; 104 while (cur != NULL) 105 { 106 if (cur->fd == fd) 107 break ; 108 if (cur->next == NULL) 109 { 110 cur->next = gnl_lstnew(fd); 111 return (cur->next); 112 } 113 cur = cur->next; 114 } 115 return (cur); 116 } 117 118 t_gnl *gnl_lstnew(int fd) 119 { 120 t_gnl *new; 121 122 new = malloc(sizeof(t_gnl)); 123 if (new == NULL) 124 return (NULL); 125 new->fd = fd; 126 new->backup = NULL; 127 new->next = NULL; 128 return (new); 129 }