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.
Signed-off-by: Stefan Tauner <stefan.tauner(a)alumni.tuwien.ac.at>
---
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 832d7ab..c9d904b 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 <strings.h>
#include <string.h>
#include <ctype.h>
@@ -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 56d9e4b..5fb743d 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 5685d29..7a146c3 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
--
Kind regards, Stefan Tauner