3
3
/* ::: :::::::: */
4
4
/* ft_snprintf.c :+: :+: :+: */
5
5
/* +:+ +:+ +:+ */
6
- /* By: jidler <jidler @student.42tokyo.jp> +#+ +:+ +#+ */
6
+ /* By: pchung <pchung @student.42.fr> +#+ +:+ +#+ */
7
7
/* +#+#+#+#+#+ +#+ */
8
8
/* Created: 2025/03/09 10:34:37 by jidler #+# #+# */
9
- /* Updated: 2025/03/09 10:45:25 by jidler ### ########.fr */
9
+ /* Updated: 2025/03/09 14:06:22 by pchung ### ########.fr */
10
10
/* */
11
11
/* ************************************************************************** */
12
12
13
13
#include <stdarg.h>
14
+ #include <stddef.h>
14
15
#include <stdio.h>
15
16
#include <stdlib.h>
16
17
#include <unistd.h>
17
- #include <stdarg.h>
18
- #include <stddef.h>
19
- #include <stdio.h>
20
18
21
- int handle_format (char specifier , va_list * args , char * buffer )
19
+ int handle_format (char specifier , va_list args , char * buffer ,
20
+ size_t buffer_size )
22
21
{
23
22
int len ;
24
23
const char * s ;
25
24
char c ;
26
25
27
26
len = 0 ;
28
27
if (specifier == 'd' )
29
- len = snprintf (buffer , 64 , "%d" , va_arg (* args , int ));
28
+ len = snprintf (buffer , buffer_size , "%d" , va_arg (args , int ));
30
29
else if (specifier == 's' )
31
30
{
32
- s = va_arg (* args , const char * );
33
- len = snprintf (buffer , 64 , "%s" , s );
31
+ s = va_arg (args , const char * );
32
+ len = snprintf (buffer , buffer_size , "%s" , s );
34
33
}
35
34
else if (specifier == 'c' )
36
35
{
37
- c = (char )va_arg (* args , int );
38
- len = snprintf (buffer , 64 , "%c" , c );
36
+ c = (char )va_arg (args , int );
37
+ len = snprintf (buffer , buffer_size , "%c" , c );
39
38
}
40
39
else
41
40
{
@@ -59,16 +58,16 @@ void append_buffer(char *str, size_t *j, size_t size, char *buffer)
59
58
}
60
59
}
61
60
62
- size_t process_format (const char * format , size_t * i ,
63
- va_list * args , char * buffer )
61
+ size_t process_format (const char * format , size_t * i , va_list args ,
62
+ char * buffer , size_t buffer_size )
64
63
{
65
64
int len ;
66
65
67
66
len = 0 ;
68
67
if (format [* i ] == '%' && format [* i + 1 ])
69
68
{
70
69
(* i )++ ;
71
- len = handle_format (format [* i ], args , buffer );
70
+ len = handle_format (format [* i ], args , buffer , buffer_size );
72
71
}
73
72
else
74
73
{
@@ -91,9 +90,10 @@ int ft_vsnprintf(char *str, size_t size, const char *format, va_list args)
91
90
len = 0 ;
92
91
while (format [i ])
93
92
{
94
- len += process_format (format , & i , & args , buffer );
93
+ len += process_format (format , & i , args , buffer , sizeof ( buffer ) );
95
94
append_buffer (str , & j , size , buffer );
96
- i ++ ;
95
+ if (format [i ] != '%' )
96
+ i ++ ;
97
97
}
98
98
if (size > 0 )
99
99
str [j ] = '\0' ;
0 commit comments