GCC Code Coverage Report


Directory: ./
File: lib/my/my_printf.c
Date: 2024-06-05 00:36:48
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 348 static void find_format(user_t *user,
17 flags_t *flgs, formating_t *formating)
18 {
19 348 int copy = user->i + 1;
20
21 348 formating->nb_format = 0;
22 348 format_first(user, flgs, formating, &copy);
23 348 copy = user->i + 1 + formating->nb_format;
24 348 format_width(user, flgs, formating, &copy);
25 348 copy = user->i + 1 + formating->nb_format;
26 348 format_precision(user, flgs, formating, &copy);
27 348 copy = user->i + 1 + formating->nb_format;
28 348 format_numbers(user, flgs, formating, &copy);
29 348 copy = user->i + 1 + formating->nb_format;
30 348 format_specifier(user, flgs, formating, &copy);
31 348 copy = user->i + 1 + formating->nb_format;
32 348 formating->flag = user->str[copy];
33 348 }
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 348 static void find_flags(user_t *user, va_list list,
49 formating_t *formating, int *index)
50 {
51 348 flags_t flgs = {.str = "dicspouxXeEfFgGaAbSD%m", .index_flag = 0};
52 int copi;
53
54 348 find_format(user, &flgs, formating);
55 348 copi = user->i + my_strlen(formating->final_format) + 1;
56 348 user->i = user->i + (my_strlen(formating->final_format)) + 1;
57
2/2
✓ Branch 1 taken 2666 times.
✓ Branch 2 taken 6 times.
2672 for (; flgs.index_flag < my_strlen(flgs.str); flgs.index_flag++) {
58
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 2657 times.
2666 if (user->str[copi] == 'n') {
59 9 flag_n(list, formating, user->total_len);
60 342 return;
61 }
62
2/2
✓ Branch 0 taken 333 times.
✓ Branch 1 taken 2324 times.
2657 if (user->str[copi] == flgs.str[flgs.index_flag]) {
63 333 *index = flgs.index_flag;
64 333 return;
65 }
66 }
67 6 not_a_flag(formating, user);
68 6 *index = -1;
69 }
70
71 2516 static void select_display(int fd, user_t *user, va_list *liste)
72 {
73 2516 int index_flag = -1;
74 2516 formating_t formating = {.fd = fd, .liste = liste};
75
76
2/2
✓ Branch 0 taken 348 times.
✓ Branch 1 taken 2168 times.
2516 if (user->str[user->i] == '%')
77 348 find_flags(user, *liste, &formating, &index_flag);
78
2/2
✓ Branch 0 taken 333 times.
✓ Branch 1 taken 2183 times.
2516 if (index_flag != -1)
79 333 user->total_len += FLAGS[index_flag](*liste, &formating);
80
4/4
✓ Branch 0 taken 2510 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2508 times.
✓ Branch 3 taken 2 times.
2516 if (user->str[user->i] != '%' && user->str[user->i] != '\0'
81
2/2
✓ Branch 0 taken 2168 times.
✓ Branch 1 taken 340 times.
2508 && (user->str[user->i] != formating.flag)) {
82 2168 write(fd, &user->str[user->i], 1);
83 2168 (user->total_len)++;
84 }
85 2516 }
86
87 339 int my_printf(char const *format, ...)
88 {
89 va_list liste;
90 339 user_t user = {.str = format, .total_len = 0};
91
92 339 va_start(liste, format);
93
2/2
✓ Branch 1 taken 2516 times.
✓ Branch 2 taken 339 times.
2855 for (user.i = 0; user.i < my_strlen(user.str); (user.i)++)
94 2516 select_display(1, &user, &liste);
95 339 va_end(liste);
96 339 return user.total_len;
97 }
98