[PATCH] Add startswith function and use it instead of CONST_STRNEQ.

Alan Modra amodra@gmail.com
Tue Mar 23 00:02:45 GMT 2021


On Mon, Mar 22, 2021 at 05:42:50PM +0100, Martin Liška wrote:
> Anyway for the sim failures. What about directly including <string.h> in bfd-in.h?

That would be OK if we didn't care about really old systems.  See for
example the way bfd/sysdep.h includes string.h.

But all of this horrible old code that likely hasn't been tested is
eons should simply disappear.  Instead binutils should be using the
gnulib import already available in the binutils-gdb repository to
support old systems.  I've had that project on my todo list for quite
a while.  We'd be able to include stdint.h and stdbool.h for example,
throwing away bfd_stdint.h and replacing bfd_boolean with bool.

Meanwhile, this is a tidied version of the patch I sent you last
night, Tom.  If you already have one of your own then please ignore
this.

---
Subject: str-util.h

Defining startswith in bfd.h breaks sim targets that don't happen to
include string.h before bfd.h, and since bfd.h is exported, might
break other projects that use bfd.h.

include/
	* str-util.h: New file.
bfd/
	* sysdep.h: Include str-util.h.
	* bfd-in.h (startswith): Delete.
	* bfd-in2.h: Regenerate.
binutils/
	* sysdep.h: Include str-util.h.
gas/
	* as.h: Include str-util.h.
gdbsupport/
	* common-utils.h: Include str-util.h.
ld/
	* sysdep.h: Include str-util.h.
opcodes/
	* sysdep.h: Include str-util.h.

diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h
index fda9fe0198..92391bb6a3 100644
--- a/bfd/bfd-in.h
+++ b/bfd/bfd-in.h
@@ -554,11 +554,3 @@ struct ecoff_debug_swap;
 struct ecoff_extr;
 struct bfd_link_info;
 struct bfd_link_hash_entry;
-
-/* Return TRUE if the start of STR matches PREFIX, FALSE otherwise.  */
-
-static inline bfd_boolean
-startswith (const char *str, const char *prefix)
-{
-  return strncmp (str, prefix, strlen (prefix)) == 0;
-}
diff --git a/bfd/sysdep.h b/bfd/sysdep.h
index 338d731112..b04847ffc3 100644
--- a/bfd/sysdep.h
+++ b/bfd/sysdep.h
@@ -119,6 +119,8 @@ extern char *strrchr ();
 
 #include "filenames.h"
 
+#include "str-util.h"
+
 #if !HAVE_DECL_FFS
 extern int ffs (int);
 #endif
diff --git a/binutils/sysdep.h b/binutils/sysdep.h
index 183bb01653..022029a3f9 100644
--- a/binutils/sysdep.h
+++ b/binutils/sysdep.h
@@ -78,6 +78,8 @@ extern char *strrchr ();
 
 #include "binary-io.h"
 
+#include "str-util.h"
+
 #if !HAVE_DECL_STPCPY
 extern char *stpcpy (char *, const char *);
 #endif
diff --git a/gas/as.h b/gas/as.h
index d6ac208289..a0346ad062 100644
--- a/gas/as.h
+++ b/gas/as.h
@@ -97,6 +97,8 @@
 /* Define the standard progress macros.  */
 #include "progress.h"
 
+#include "str-util.h"
+
 /* Other stuff from config.h.  */
 #ifdef NEED_DECLARATION_ENVIRON
 extern char **environ;
diff --git a/gdbsupport/common-utils.h b/gdbsupport/common-utils.h
index 1de747f186..65569ffe78 100644
--- a/gdbsupport/common-utils.h
+++ b/gdbsupport/common-utils.h
@@ -45,6 +45,8 @@
 
 #include "gdb_string_view.h"
 
+#include "str-util.h"
+
 /* xmalloc(), xrealloc() and xcalloc() have already been declared in
    "libiberty.h". */
 
diff --git a/include/str-util.h b/include/str-util.h
new file mode 100644
index 0000000000..24aba56563
--- /dev/null
+++ b/include/str-util.h
@@ -0,0 +1,27 @@
+/* String utility functions used by GDB and binutils.
+   Copyright (C) 2021 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef STR_UTIL_H
+#define STR_UTIL_H
+
+/* Return 1 if the start of STR matches PREFIX, 0 otherwise.  */
+
+static inline int
+startswith (const char *str, const char *prefix)
+{
+  return strncmp (str, prefix, strlen (prefix)) == 0;
+}
+#endif
diff --git a/ld/sysdep.h b/ld/sysdep.h
index 206c02c8c5..9e97d2d95b 100644
--- a/ld/sysdep.h
+++ b/ld/sysdep.h
@@ -68,6 +68,8 @@ extern char *strrchr ();
 #include "fopen-same.h"
 #endif
 
+#include "str-util.h"
+
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
 #else
diff --git a/opcodes/sysdep.h b/opcodes/sysdep.h
index bcac6d851c..a0732861b7 100644
--- a/opcodes/sysdep.h
+++ b/opcodes/sysdep.h
@@ -52,6 +52,8 @@
 #endif
 #endif
 
+#include "str-util.h"
+
 #if !HAVE_DECL_STPCPY
 extern char *stpcpy (char *__dest, const char *__src);
 #endif


-- 
Alan Modra
Australia Development Lab, IBM


More information about the Binutils mailing list