Cub3D
Loading...
Searching...
No Matches
split_lines.c
1/* ************************************************************************** */
2/* */
3/* ::: :::::::: */
4/* split_lines.c :+: :+: :+: */
5/* +:+ +:+ +:+ */
6/* By: kamitsui <kamitsui@student.42tokyo.jp> +#+ +:+ +#+ */
7/* +#+#+#+#+#+ +#+ */
8/* Created: 2024/12/17 21:50:06 by kamitsui #+# #+# */
9/* Updated: 2024/12/17 21:51:01 by kamitsui ### ########.fr */
10/* */
11/* ************************************************************************** */
12
13#include "cub3d.h"
14
15size_t count_lines(const char *str)
16{
17 size_t lines;
18
19 lines = 0;
20 while (*str)
21 {
22 if (*str == '\n')
23 lines++;
24 str++;
25 }
26 return (lines + 1);
27}
28
29static char *extract_next_line(const char **str)
30{
31 const char *start;
32 size_t len;
33 char *line;
34
35 start = *str;
36 while (**str && **str != '\n')
37 (*str)++;
38 len = *str - start;
39 line = ft_strndup(start, len);
40 if (line == NULL)
41 return (NULL);
42 if (**str == '\n')
43 (*str)++;
44 return (line);
45}
46
47char **split_lines(const char *str)
48{
49 size_t line_count;
50 char **lines;
51 size_t i;
52
53 if (str == NULL)
54 return (NULL);
55 line_count = count_lines(str);
56 lines = (char **)malloc((line_count + 1) * sizeof(char *));
57 if (lines == NULL)
58 return (NULL);
59 i = 0;
60 while (*str != '\0')
61 lines[i++] = extract_next_line(&str);
62 lines[i] = NULL;
63 return (lines);
64}