GCC Code Coverage Report


Directory: ./
File: lib/my/my_printf.c
Date: 2024-06-05 02:24:39
Exec Total Coverage
Lines: 58 58 100.0%
Functions: 5 5 100.0%
Branches: 22 22 100.0%

Line Branch Exec Source
1 /*
2 ** EPITECH PROJECT, 2024
3 ** my_printf
4 ** File description:
5 ** Prints a string (format) with possible flags and format
6 ** in stdout and returns the length the printed string
7 */
8 /**
9 * @file my_printf.c
10 * @brief The file containing the my_printf function
11 * @author Nicolas TORO
12 */
13
14 #include "./my_printf/myprintf.h"
15
16 223 static void find_format(user_t *user,
17 flags_t *flgs, formating_t *formating)
18 {
19 223 int copy = user->i + 1;
20
21 223 formating->nb_format = 0;
22 223 format_first(user, flgs, formating, &copy);
23 223 copy = user->i + 1 + formating->nb_format;
24 223 format_width(user, flgs, formating, &copy);
25 223 copy = user->i + 1 + formating->nb_format;
26 223 format_precision(user, flgs, formating, &copy);
27 223 copy = user->i + 1 + formating->nb_format;
28 223 format_numbers(user, flgs, formating, &copy);
29 223 copy = user->i + 1 + formating->nb_format;
30 223 format_specifier(user, flgs, formating, &copy);
31 223 copy = user->i + 1 + formating->nb_format;
32 223 formating->flag = user->str[copy];
33 223 }
34
35 6 static void not_a_flag(formating_t *formating, user_t *user)
36 {
37 6 write(formating->fd, "%", 1);
38 6 user->total_len = user->total_len + 1;
39
2/2
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
6 if (my_strcmp(formating->final_format, "\0") != 0)
40 4 user->total_len = user->total_len +
41 4 my_putstr_fd(formating->final_format, formating->fd);
42
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 2 times.
6 if (formating->flag != '\0') {
43 4 write(formating->fd, &formating->flag, 1);
44 4 user->total_len = user->total_len + 1;
45 }
46 6 }
47
48 223 static void find_flags(user_t *user, va_list list,
49 formating_t *formating, int *index)
50 {
51 223 flags_t flgs = {.str = "dicspouxXeEfFgGaAbSD%m", .index_flag = 0};
52 int copi;
53
54 223 find_format(user, &flgs, formating);
55 223 copi = user->i + my_strlen(formating->final_format) + 1;
56 223 user->i = user->i + (my_strlen(formating->final_format)) + 1;
57
2/2
✓ Branch 1 taken 2064 times.
✓ Branch 2 taken 6 times.
2070 for (; flgs.index_flag < my_strlen(flgs.str); flgs.index_flag++) {
58
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 2055 times.
2064 if (user->str[copi] == 'n') {
59 9 flag_n(list, formating, user->total_len);
60 217 return;
61 }
62
2/2
✓ Branch 0 taken 208 times.
✓ Branch 1 taken 1847 times.
2055 if (user->str[copi] == flgs.str[flgs.index_flag]) {
63 208 *index = flgs.index_flag;
64 208 return;
65 }
66 }
67 6 not_a_flag(formating, user);
68 6 *index = -1;
69 }
70
71 1742 static void select_display(int fd, user_t *user, va_list *liste)
72 {
73 1742 int index_flag = -1;
74 1742 formating_t formating = {.fd = fd, .liste = liste};
75
76
2/2
✓ Branch 0 taken 223 times.
✓ Branch 1 taken 1519 times.
1742 if (user->str[user->i] == '%')
77 223 find_flags(user, *liste, &formating, &index_flag);
78
2/2
✓ Branch 0 taken 208 times.
✓ Branch 1 taken 1534 times.
1742 if (index_flag != -1)
79 208 user->total_len += FLAGS[index_flag](*liste, &formating);
80
4/4
✓ Branch 0 taken 1736 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 1734 times.
✓ Branch 3 taken 2 times.
1742 if (user->str[user->i] != '%' && user->str[user->i] != '\0'
81
2/2
✓ Branch 0 taken 1519 times.
✓ Branch 1 taken 215 times.
1734 && (user->str[user->i] != formating.flag)) {
82 1519 write(fd, &user->str[user->i], 1);
83 1519 (user->total_len)++;
84 }
85 1742 }
86
87 173 int my_printf(char const *format, ...)
88 {
89 va_list liste;
90 173 user_t user = {.str = format, .total_len = 0};
91
92 173 va_start(liste, format);
93
2/2
✓ Branch 1 taken 1742 times.
✓ Branch 2 taken 173 times.
1915 for (user.i = 0; user.i < my_strlen(user.str); (user.i)++)
94 1742 select_display(1, &user, &liste);
95 173 va_end(liste);
96 173 return user.total_len;
97 }
98