GCC Code Coverage Report


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