print_address.c
1 /* ************************************************************************** */ 2 /* */ 3 /* ::: :::::::: */ 4 /* print_address.c :+: :+: :+: */ 5 /* +:+ +:+ +:+ */ 6 /* By: gychoi <gychoi@student.42seoul.kr> +#+ +:+ +#+ */ 7 /* +#+#+#+#+#+ +#+ */ 8 /* Created: 2022/09/09 21:42:55 by gychoi #+# #+# */ 9 /* Updated: 2022/09/13 14:25:56 by gychoi ### ########.fr */ 10 /* */ 11 /* ************************************************************************** */ 12 13 #include "ft_printf.h" 14 15 int print_address_recursive(unsigned long long num, char *base) 16 { 17 int printed; 18 int ret; 19 20 printed = 0; 21 if (num >= 16) 22 printed += print_address_recursive(num / 16, base); 23 ret = (int)write(1, &base[num % 16], 1); 24 if (ret < 0) 25 return (-1); 26 printed += ret; 27 return (printed); 28 } 29 30 int print_address(void *p) 31 { 32 unsigned long long daddr; 33 int printed; 34 int ret; 35 36 if (p == 0) 37 { 38 ret = (int)write(1, "0x0", 3); 39 if (ret < 0) 40 return (-1); 41 return (ret); 42 } 43 printed = 0; 44 daddr = (unsigned long long)p; 45 ret = (int)write(1, "0x", 2); 46 if (ret < 0) 47 return (-1); 48 printed += ret; 49 ret = print_address_recursive(daddr, "0123456789abcdef"); 50 if (ret < 0) 51 return (-1); 52 printed += ret; 53 return (printed); 54 }