From dc627931848ed6af40be4f7d5bdb8e33d28b8333 Mon Sep 17 00:00:00 2001 From: Stefan Tauner Date: Tue, 27 Jan 2015 18:07:50 +0000 Subject: Make strnlen() visible in old versions of glibc Strnlen() is in POSIX 2008 but was a GNU extension up to glibc 2.10 requiring to define _GNU_SOURCE. This fixes compilation on CentOS 4.9. Also, move our implementation of strnlen() that was added to support DJGPP to helpers.c. Corresponding to flashrom svn r1878. Signed-off-by: Stefan Tauner Acked-by: Carl-Daniel Hailfinger --- dmi.c | 17 +++++++---------- flash.h | 3 +++ helpers.c | 10 ++++++++++ 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/dmi.c b/dmi.c index 832d7abb8..c9d904bd8 100644 --- a/dmi.c +++ b/dmi.c @@ -21,6 +21,13 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +/* strnlen is in POSIX but was a GNU extension up to glibc 2.10 */ +#if (__GLIBC__ == 2 && __GLIBC_MINOR__ < 10) || __GLIBC__ < 2 +#define _GNU_SOURCE +#else +#define _POSIX_C_SOURCE 200809L +#endif + #include #include #include @@ -86,16 +93,6 @@ static const struct { }; #if CONFIG_INTERNAL_DMI == 1 -#ifdef __DJGPP__ /* There is no strnlen in DJGPP. FIXME: Move this to a common utility file. */ -size_t strnlen(const char *str, size_t n) -{ - size_t i; - for (i = 0; i < n && str[i] != '\0'; i++) - ; - return i; -} -#endif - static bool dmi_checksum(const uint8_t * const buf, size_t len) { uint8_t sum = 0; diff --git a/flash.h b/flash.h index 56d9e4bce..5fb743dfe 100644 --- a/flash.h +++ b/flash.h @@ -260,6 +260,9 @@ void tolower_string(char *str); #ifdef __MINGW32__ char* strtok_r(char *str, const char *delim, char **nextp); #endif +#if defined(__DJGPP__) +size_t strnlen(const char *str, size_t n); +#endif /* flashrom.c */ extern const char flashrom_version[]; diff --git a/helpers.c b/helpers.c index 5685d299b..7a146c372 100644 --- a/helpers.c +++ b/helpers.c @@ -91,3 +91,13 @@ char* strtok_r(char *str, const char *delim, char **nextp) } #endif +/* There is no strnlen in DJGPP */ +#if defined(__DJGPP__) +size_t strnlen(const char *str, size_t n) +{ + size_t i; + for (i = 0; i < n && str[i] != '\0'; i++) + ; + return i; +} +#endif -- cgit v1.2.3