From 6d3109e8c79303d0a09538df523dd7ad29c6159a Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Mon, 27 Jun 2016 21:10:41 +0800 Subject: [PATCH] Remove implementations of non-ISO libc functions which are present in newlib --- cores/esp8266/core_esp8266_noniso.c | 61 --------------------- cores/esp8266/stdlib_noniso.h | 2 + tests/host/Makefile | 1 + tests/host/common/noniso.c | 85 +++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+), 61 deletions(-) create mode 100644 tests/host/common/noniso.c diff --git a/cores/esp8266/core_esp8266_noniso.c b/cores/esp8266/core_esp8266_noniso.c index c45abd2d9..e79204890 100644 --- a/cores/esp8266/core_esp8266_noniso.c +++ b/cores/esp8266/core_esp8266_noniso.c @@ -29,21 +29,6 @@ #include #include "stdlib_noniso.h" - -int atoi(const char* s) { - return (int) atol(s); -} - -long atol(const char* s) { - char * tmp; - return strtol(s, &tmp, 10); -} - -double atof(const char* s) { - char * tmp; - return strtod(s, &tmp); -} - void reverse(char* begin, char* end) { char *is = begin; char *ie = end - 1; @@ -56,31 +41,6 @@ void reverse(char* begin, char* end) { } } -char* itoa(int value, char* result, int base) { - if(base < 2 || base > 16) { - *result = 0; - return result; - } - - char* out = result; - int quotient = abs(value); - - do { - const int tmp = quotient / base; - *out = "0123456789abcdef"[quotient - (tmp * base)]; - ++out; - quotient = tmp; - } while(quotient); - - // Apply negative sign - if(value < 0) - *out++ = '-'; - - reverse(result, out); - *out = 0; - return result; -} - char* ltoa(long value, char* result, int base) { if(base < 2 || base > 16) { *result = 0; @@ -106,27 +66,6 @@ char* ltoa(long value, char* result, int base) { return result; } -char* utoa(unsigned value, char* result, int base) { - if(base < 2 || base > 16) { - *result = 0; - return result; - } - - char* out = result; - unsigned quotient = value; - - do { - const unsigned tmp = quotient / base; - *out = "0123456789abcdef"[quotient - (tmp * base)]; - ++out; - quotient = tmp; - } while(quotient); - - reverse(result, out); - *out = 0; - return result; -} - char* ultoa(unsigned long value, char* result, int base) { if(base < 2 || base > 16) { *result = 0; diff --git a/cores/esp8266/stdlib_noniso.h b/cores/esp8266/stdlib_noniso.h index 2e8930fbe..636cbf437 100644 --- a/cores/esp8266/stdlib_noniso.h +++ b/cores/esp8266/stdlib_noniso.h @@ -42,6 +42,8 @@ char* ultoa (unsigned long val, char *s, int radix); char* dtostrf (double val, signed char width, unsigned char prec, char *s); +void reverse(char* begin, char* end); + #ifdef __cplusplus } // extern "C" #endif diff --git a/tests/host/Makefile b/tests/host/Makefile index 577de21bf..a59cff406 100644 --- a/tests/host/Makefile +++ b/tests/host/Makefile @@ -37,6 +37,7 @@ MOCK_CPP_FILES := $(addprefix common/,\ MOCK_C_FILES := $(addprefix common/,\ md5.c \ + noniso.c \ ) INC_PATHS += $(addprefix -I, \ diff --git a/tests/host/common/noniso.c b/tests/host/common/noniso.c new file mode 100644 index 000000000..21a26f02e --- /dev/null +++ b/tests/host/common/noniso.c @@ -0,0 +1,85 @@ +/* + noniso.cpp - replacements for non-ISO functions used by Arduino core + Copyright © 2016 Ivan Grokhotkov + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. +*/ + + +#include +#include +#include +#include +#include +#include "stdlib_noniso.h" + + + +char* utoa(unsigned value, char* result, int base) { + if(base < 2 || base > 16) { + *result = 0; + return result; + } + + char* out = result; + unsigned quotient = value; + + do { + const unsigned tmp = quotient / base; + *out = "0123456789abcdef"[quotient - (tmp * base)]; + ++out; + quotient = tmp; + } while(quotient); + + reverse(result, out); + *out = 0; + return result; +} + +char* itoa(int value, char* result, int base) { + if(base < 2 || base > 16) { + *result = 0; + return result; + } + + char* out = result; + int quotient = abs(value); + + do { + const int tmp = quotient / base; + *out = "0123456789abcdef"[quotient - (tmp * base)]; + ++out; + quotient = tmp; + } while(quotient); + + // Apply negative sign + if(value < 0) + *out++ = '-'; + + reverse(result, out); + *out = 0; + return result; +} + +int atoi(const char* s) { + return (int) atol(s); +} + +long atol(const char* s) { + char * tmp; + return strtol(s, &tmp, 10); +} + +double atof(const char* s) { + char * tmp; + return strtod(s, &tmp); +} +