GCC Code Coverage Report


Directory: ./
File: lib/my/my_showmem.c
Date: 2024-06-05 00:29:21
Exec Total Coverage
Lines: 53 53 100.0%
Functions: 7 7 100.0%
Branches: 34 40 85.0%

Line Branch Exec Source
1 /*
2 ** EPITECH PROJECT, 2023
3 ** my_showmem
4 ** File description:
5 ** Prints a memory dump of a string (str) with a defined size
6 */
7
8 #include "my.h"
9
10 1 static void print_address(int line)
11 {
12 1 int len = 1 + line / 16;
13
14
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
7 for (int i = 0; i < 8 - len - 1; i++)
15 6 my_putchar('0');
16 1 my_putnbr_base(line, "0123456789abcedf");
17 1 my_putstr("0: ");
18 1 }
19
20 4 static void check_zero_in_hexadecimal(char c)
21 {
22
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
4 if (c < 16)
23 1 my_putchar('0');
24 4 }
25
26 11 static void check_space(int space)
27 {
28
1/2
✓ Branch 0 taken 11 times.
✗ Branch 1 not taken.
11 if (space != 2)
29 11 my_putstr(" ");
30 11 }
31
32 13 static void check_backslash(char c, int space)
33 {
34
4/4
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 11 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 1 times.
13 if (c == '\b' && space == 0)
35 1 my_putstr("08");
36
3/4
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 11 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
12 else if (c == '\b' && space == 2)
37 1 my_putchar('.');
38 else
39 11 check_space(space);
40 13 }
41
42 1 static void print_hexadecimal_content(char const *str, int size, int line)
43 {
44 1 int end_of_line = 0;
45
46
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 1 times.
17 for (int i = 16 * line; i < 16 * (line + 1); i++) {
47
4/4
✓ Branch 0 taken 15 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 7 times.
✓ Branch 3 taken 8 times.
16 if (i != 16 * line && i % 2 == 0) {
48 7 my_putchar(' ');
49 }
50
6/6
✓ Branch 0 taken 15 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 14 times.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 4 times.
16 if (i == size || str[i] == '\b' || end_of_line == 1) {
51 12 check_backslash(str[i], end_of_line);
52 12 end_of_line = 1;
53 } else {
54 4 check_zero_in_hexadecimal(str[i]);
55 4 my_putnbr_base(str[i], "0123456789abcdef");
56 }
57 }
58 1 my_putchar(' ');
59 1 }
60
61 1 static void print_string_content(char const *str, int size,
62 int line, int *error)
63 {
64
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
5 for (int i = 16 * line; i < 16 * (line + 1); i++) {
65
3/4
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
5 if (i == size || str[i] == '\b') {
66 1 check_backslash(str[i], 2);
67 1 *error = 1;
68 1 break;
69 }
70
3/4
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
4 if (str[i] >= 32 && str[i] <= 126) {
71 3 my_putchar(str[i]);
72 } else {
73 1 my_putchar('.');
74 }
75 }
76 1 }
77
78 1 int my_showmem(char const *str, int size)
79 {
80 1 int number_of_lines = size / 16;
81 1 int error = 0;
82
83
3/4
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 for (int line = 0; line <= number_of_lines && error == 0; line++) {
84 1 print_address(line);
85 1 print_hexadecimal_content(str, size, line);
86 1 print_string_content(str, size, line, &error);
87 1 my_putchar('\n');
88 }
89 1 return 0;
90 }
91