/ push_swap / push_swap / get_next_line_utils_bonus.c
get_next_line_utils_bonus.c
  1  /* ************************************************************************** */
  2  /*                                                                            */
  3  /*                                                        :::      ::::::::   */
  4  /*   get_next_line_utils.c                              :+:      :+:    :+:   */
  5  /*                                                    +:+ +:+         +:+     */
  6  /*   By: gychoi <gychoi@student.42seoul.kr>         +#+  +:+       +#+        */
  7  /*                                                +#+#+#+#+#+   +#+           */
  8  /*   Created: 2022/12/04 18:12:23 by gychoi            #+#    #+#             */
  9  /*   Updated: 2022/12/07 20:05:43 by gychoi           ###   ########.fr       */
 10  /*                                                                            */
 11  /* ************************************************************************** */
 12  
 13  #include "get_next_line_bonus.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  }