Fix off-by-one errors

This commit is contained in:
Timo Schmidt 2023-03-24 20:28:05 +01:00
parent 3472f4a1b1
commit 897db56dec
1 changed files with 11 additions and 5 deletions

View File

@ -6,7 +6,7 @@
/* By: tischmid <marvin@42.fr> +#+ +:+ +#+ */ /* By: tischmid <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/03/21 05:44:01 by tischmid #+# #+# */ /* Created: 2023/03/21 05:44:01 by tischmid #+# #+# */
/* Updated: 2023/03/24 01:40:48 by tischmid ### ########.fr */ /* Updated: 2023/03/24 20:27:15 by tischmid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -46,7 +46,10 @@ int ft_strlen(char *str)
void print_addr_vals(void *addr, unsigned int width, int hex, char *delim) void print_addr_vals(void *addr, unsigned int width, int hex, char *delim)
{ {
while (width-- > 0) unsigned int i;
i = -1;
while (++i < width)
{ {
if (hex) if (hex)
print_hex(*(unsigned char *) addr, 2); print_hex(*(unsigned char *) addr, 2);
@ -54,7 +57,7 @@ void print_addr_vals(void *addr, unsigned int width, int hex, char *delim)
write(1, addr, 1); write(1, addr, 1);
else else
write(1, ".", 1); write(1, ".", 1);
if ((!hex || (hex && width % 2 == 0)) && *delim) if ((!hex || (hex && i % 2 == 1)) && *delim)
write(1, delim, 1); write(1, delim, 1);
addr++; addr++;
} }
@ -72,12 +75,14 @@ void *ft_print_memory(void *addr, unsigned int size)
{ {
if (size - (++lines) * WIDTH < 16) if (size - (++lines) * WIDTH < 16)
width = size - lines * WIDTH; width = size - lines * WIDTH;
if (!width)
break ;
print_hex((ULL) addr, 16); print_hex((ULL) addr, 16);
write(1, ":", 1); write(1, ":", 1);
write(1, DELIMITER, 1); write(1, DELIMITER, 1);
print_addr_vals(addr, width, 1, DELIMITER); print_addr_vals(addr, width, 1, DELIMITER);
missing_chars = (WIDTH - width) * (2 + ft_strlen(DELIMITER)); missing_chars = (WIDTH - width) * (2 + ft_strlen(DELIMITER));
missing_chars -= (WIDTH - width + 1) / 2; missing_chars -= (WIDTH - width) / 2;
while (missing_chars-- > 0) while (missing_chars-- > 0)
write(1, DELIMITER, 1); write(1, DELIMITER, 1);
print_addr_vals(addr, width, 0, ""); print_addr_vals(addr, width, 0, "");
@ -106,7 +111,8 @@ void *ft_print_memory(void *addr, unsigned int size)
int main(void) int main(void)
{ {
char *ptr = STR; char *ptr = STR;
ft_print_memory(ptr, 92); for (int i = 0; i < 33; ++i)
ft_print_memory(ptr, i);
return (0); return (0);
} }
*/ //// */ ////