From 244e2d9cd325af32ef126c0d59e8e75650f5654a Mon Sep 17 00:00:00 2001
From: Ian Lance Taylor <iant@google.com>
Date: Thu, 4 Oct 2012 15:16:09 +0000
Subject: [PATCH] dwarf.c: If the system header files do not declare strnlen,
 provide our own version.

	* dwarf.c: If the system header files do not declare strnlen,
	provide our own version.

From-SVN: r192082
---
 libbacktrace/ChangeLog |  5 +++++
 libbacktrace/dwarf.c   | 18 ++++++++++++++++--
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/libbacktrace/ChangeLog b/libbacktrace/ChangeLog
index 88a7eb0ba8e1..528b49302049 100644
--- a/libbacktrace/ChangeLog
+++ b/libbacktrace/ChangeLog
@@ -1,3 +1,8 @@
+2012-10-04  Ian Lance Taylor  <iant@google.com>
+
+	* dwarf.c: If the system header files do not declare strnlen,
+	provide our own version.
+
 2012-10-03  Ian Lance Taylor  <iant@google.com>
 
 	* dwarf.c (read_uleb128): Fix overflow test.
diff --git a/libbacktrace/dwarf.c b/libbacktrace/dwarf.c
index 25973cb76218..4e13fc541ee9 100644
--- a/libbacktrace/dwarf.c
+++ b/libbacktrace/dwarf.c
@@ -44,8 +44,22 @@ POSSIBILITY OF SUCH DAMAGE.  */
 #include "internal.h"
 
 #if !defined(HAVE_DECL_STRNLEN) || !HAVE_DECL_STRNLEN
-/* The function is defined in libiberty if needed.  */
-extern size_t strnlen (const char *, size_t);
+
+/* If strnlen is not declared, provide our own version.  */
+
+static size_t
+xstrnlen (const char *s, size_t maxlen)
+{
+  size_t i;
+
+  for (i = 0; i < maxlen; ++i)
+    if (s[i] == '\0')
+      break;
+  return i;
+}
+
+#define strnlen xstrnlen
+
 #endif
 
 /* A buffer to read DWARF info.  */
-- 
GitLab