From 7bde6411b1b82cafd997df8ac222e82280a6e786 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Fri, 20 May 2022 09:13:49 +0000 Subject: using sprintf on host for itoa (avoids code duplication iwht libc-freestanding.c) --- miniany/libc-hosted.c | 49 ++++++++++--------------------------------------- 1 file changed, 10 insertions(+), 39 deletions(-) diff --git a/miniany/libc-hosted.c b/miniany/libc-hosted.c index e599b1d..f602de1 100644 --- a/miniany/libc-hosted.c +++ b/miniany/libc-hosted.c @@ -29,46 +29,17 @@ int putnl( void ) return puts( "" ); } -/* TODO: duplicate of functions in libc-freestanding.c */ - -static void strreverse( char *s ) -{ - char *end = s + strlen( s ) - 1; - - while( s < end ) { - *s ^= *end; - *end ^= *s; - *s ^= *end; - s++; - end--; - } -} - char *itoa( int v, char *s, int base ) { - static char digit[] = "0123456789ABCDEF"; - int sign = 0; - char *p = s; - - if( base < 2 || base > 16 ) { - return NULL; + switch( base ) { + case 10: + sprintf( s, "%d", v ); + return s; + case 16: + sprintf( s, "%x", v ); + return s; + + default: + return NULL; } - - if( v < 0 ) { - v = -v; - sign = 1; - } - - do { - *p++ = digit[v % base]; - } while( ( v /= base ) > 0 ); - - if( sign ) { - *p++ = '-'; - } - *p = '\0'; - - strreverse( s ); - - return s; } -- cgit v1.2.3-54-g00ecf