Skip to content

Commit e994b29

Browse files
authored
Merge pull request #34 from cuajarsaki/parser_norm
changed the three libft files
2 parents 989cf4d + 033ebc5 commit e994b29

File tree

3 files changed

+130
-77
lines changed

3 files changed

+130
-77
lines changed

libft/ft_snprintf.c

+90-39
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,112 @@
1+
/* ************************************************************************** */
2+
/* */
3+
/* ::: :::::::: */
4+
/* ft_snprintf.c :+: :+: :+: */
5+
/* +:+ +:+ +:+ */
6+
/* By: pchung <[email protected]> +#+ +:+ +#+ */
7+
/* +#+#+#+#+#+ +#+ */
8+
/* Created: 2025/03/09 10:34:37 by jidler #+# #+# */
9+
/* Updated: 2025/03/09 14:06:22 by pchung ### ########.fr */
10+
/* */
11+
/* ************************************************************************** */
12+
113
#include <stdarg.h>
14+
#include <stddef.h>
215
#include <stdio.h>
316
#include <stdlib.h>
417
#include <unistd.h>
518

6-
int ft_vsnprintf(char *str, size_t size, const char *format, va_list args);
19+
int handle_format(char specifier, va_list args, char *buffer,
20+
size_t buffer_size)
21+
{
22+
int len;
23+
const char *s;
24+
char c;
725

8-
int ft_snprintf(char *str, size_t size, const char *format, ...)
26+
len = 0;
27+
if (specifier == 'd')
28+
len = snprintf(buffer, buffer_size, "%d", va_arg(args, int));
29+
else if (specifier == 's')
30+
{
31+
s = va_arg(args, const char *);
32+
len = snprintf(buffer, buffer_size, "%s", s);
33+
}
34+
else if (specifier == 'c')
35+
{
36+
c = (char)va_arg(args, int);
37+
len = snprintf(buffer, buffer_size, "%c", c);
38+
}
39+
else
40+
{
41+
buffer[0] = specifier;
42+
buffer[1] = '\0';
43+
len = 1;
44+
}
45+
return (len);
46+
}
47+
48+
void append_buffer(char *str, size_t *j, size_t size, char *buffer)
949
{
10-
va_list args;
11-
int len;
50+
size_t k;
1251

13-
va_start(args, format);
14-
len = ft_vsnprintf(str, size, format, args);
15-
va_end(args);
52+
k = 0;
53+
while (buffer[k] && (*j) < size - 1)
54+
{
55+
str[*j] = buffer[k];
56+
(*j)++;
57+
k++;
58+
}
59+
}
60+
61+
size_t process_format(const char *format, size_t *i, va_list args,
62+
char *buffer, size_t buffer_size)
63+
{
64+
int len;
65+
66+
len = 0;
67+
if (format[*i] == '%' && format[*i + 1])
68+
{
69+
(*i)++;
70+
len = handle_format(format[*i], args, buffer, buffer_size);
71+
}
72+
else
73+
{
74+
buffer[0] = format[*i];
75+
buffer[1] = '\0';
76+
len = 1;
77+
}
1678
return (len);
1779
}
1880

1981
int ft_vsnprintf(char *str, size_t size, const char *format, va_list args)
2082
{
21-
size_t i = 0, j = 0;
22-
int len = 0;
83+
size_t i;
84+
size_t j;
85+
int len;
2386
char buffer[64];
2487

88+
i = 0;
89+
j = 0;
90+
len = 0;
2591
while (format[i])
2692
{
27-
if (format[i] == '%' && format[i + 1])
28-
{
93+
len += process_format(format, &i, args, buffer, sizeof(buffer));
94+
append_buffer(str, &j, size, buffer);
95+
if (format[i] != '%')
2996
i++;
30-
if (format[i] == 'd') // Handling %d (integer)
31-
{
32-
int num = va_arg(args, int);
33-
len += snprintf(buffer, sizeof(buffer), "%d", num);
34-
}
35-
else if (format[i] == 's') // Handling %s (string)
36-
{
37-
const char *s = va_arg(args, const char *);
38-
len += snprintf(buffer, sizeof(buffer), "%s", s);
39-
}
40-
else if (format[i] == 'c') // Handling %c (char)
41-
{
42-
char c = (char)va_arg(args, int);
43-
len += snprintf(buffer, sizeof(buffer), "%c", c);
44-
}
45-
else
46-
{
47-
buffer[0] = format[i];
48-
buffer[1] = '\0';
49-
len += 1;
50-
}
51-
for (int k = 0; buffer[k] && j < size - 1; k++, j++)
52-
str[j] = buffer[k];
53-
}
54-
else if (j < size - 1)
55-
str[j++] = format[i], len++;
56-
i++;
5797
}
5898
if (size > 0)
5999
str[j] = '\0';
60100
return (len);
61-
}
101+
}
102+
103+
int ft_snprintf(char *str, size_t size, const char *format, ...)
104+
{
105+
va_list args;
106+
int len;
107+
108+
va_start(args, format);
109+
len = ft_vsnprintf(str, size, format, args);
110+
va_end(args);
111+
return (len);
112+
}

libft/ft_strtok.c

+29-27
Original file line numberDiff line numberDiff line change
@@ -6,40 +6,42 @@
66
/* By: jidler <[email protected]> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2024/12/26 15:48:04 by jidler #+# #+# */
9-
/* Updated: 2025/01/26 13:49:40 by jidler ### ########.fr */
9+
/* Updated: 2025/03/09 10:46:21 by jidler ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

1313
#include <stddef.h>
1414

15-
char *ft_strchr(const char *s, int c);
15+
char *ft_strchr(const char *s, int c);
16+
17+
char *find_next_token(char **saveptr, const char *delim)
18+
{
19+
char *token;
20+
21+
while (**saveptr && ft_strchr(delim, **saveptr))
22+
(*saveptr)++;
23+
if (**saveptr == '\0')
24+
return (NULL);
25+
token = *saveptr;
26+
while (**saveptr && ft_strchr(delim, **saveptr) == NULL)
27+
(*saveptr)++;
28+
if (**saveptr)
29+
{
30+
**saveptr = '\0';
31+
(*saveptr)++;
32+
}
33+
else
34+
*saveptr = NULL;
35+
return (token);
36+
}
1637

1738
char *ft_strtok(char *str, const char *delim)
1839
{
19-
static char *saveptr;
20-
char *token;
40+
static char *saveptr;
2141

22-
if (str != NULL) {
42+
if (str)
2343
saveptr = str;
24-
}
25-
if (saveptr == NULL) {
26-
return NULL;
27-
}
28-
while (*saveptr && ft_strchr(delim, *saveptr) != NULL) {
29-
saveptr++;
30-
}
31-
if (*saveptr == '\0') {
32-
return NULL;
33-
}
34-
token = saveptr;
35-
while (*saveptr && ft_strchr(delim, *saveptr) == NULL) {
36-
saveptr++;
37-
}
38-
if (*saveptr) {
39-
*saveptr = '\0';
40-
saveptr++;
41-
} else {
42-
saveptr = NULL;
43-
}
44-
return token;
45-
}
44+
if (!saveptr)
45+
return (NULL);
46+
return (find_next_token(&saveptr, delim));
47+
}

libft/libft.h

+11-11
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
/* ::: :::::::: */
44
/* libft.h :+: :+: :+: */
55
/* +:+ +:+ +:+ */
6-
/* By: pchung <pchung@student.42.fr> +#+ +:+ +#+ */
6+
/* By: jidler <jidler@student.42tokyo.jp> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2024/04/12 16:50:27 by jidler #+# #+# */
9-
/* Updated: 2025/03/09 04:19:43 by pchung ### ########.fr */
9+
/* Updated: 2025/03/09 13:57:00 by jidler ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -17,7 +17,8 @@
1717
# include <stdlib.h>
1818
# include <unistd.h>
1919

20-
int ft_snprintf(char *str, size_t size, const char *format, ...);
20+
int ft_snprintf(char *str, size_t size,
21+
const char *format, ...);
2122
char *ft_strndup(const char *src, size_t n);
2223
char *ft_strncat(char *dest, const char *src, size_t n);
2324
int ft_atoi(const char *str);
@@ -39,7 +40,7 @@ void ft_putendl_fd(char *s, int fd);
3940
void ft_putnbr_fd(int n, int fd);
4041
void ft_putstr_fd(char *s, int fd);
4142
char **ft_split(char const *s, char c);
42-
char *ft_strdup(const char *src);
43+
char *ft_strdup(const char *src);
4344
void ft_striteri(char *s, void (*f)(unsigned int, char *));
4445
char *ft_strjoin(char const *s1, char const *s2);
4546
size_t ft_strlcat(char *dest, char *src, size_t size);
@@ -56,10 +57,11 @@ int ft_tolower(int c);
5657
int ft_toupper(int c);
5758
int ft_strcmp(const char *s1, const char *s2);
5859

59-
char **ft_realloc(char **ptr, size_t old_size, size_t new_size);
60+
char *ft_strncpy(char *dest, const char *src, size_t n);
61+
char **ft_realloc(char **ptr, size_t old_size, size_t new_size);
6062

61-
char *ft_strchr(const char *s, int c);
62-
char *ft_strtok(char *str, const char *delim);
63+
char *ft_strchr(const char *s, int c);
64+
char *ft_strtok(char *str, const char *delim);
6365

6466
typedef struct s_list
6567
{
@@ -77,17 +79,15 @@ void ft_lstclear(t_list **lst, void (*del)(void *));
7779
void ft_lstiter(t_list *lst, void (*f)(void *));
7880
t_list *ft_lstmap(t_list *lst, void *(*f)(void *),
7981
void (*del)(void *));
80-
long ft_strtol(const char *nptr);
81-
82+
long ft_strtol(const char *nptr);
83+
8284
# ifndef BUFFER_SIZE
8385
# define BUFFER_SIZE 50
8486
# endif
8587

8688
int get_nl_index(char *stash);
8789
char *get_next_line(int fd);
8890

89-
90-
9191
typedef struct s_flags
9292
{
9393
int minus;

0 commit comments

Comments
 (0)