summaryrefslogtreecommitdiff
path: root/string/string.h
diff options
context:
space:
mode:
Diffstat (limited to 'string/string.h')
-rw-r--r--string/string.h28
1 files changed, 15 insertions, 13 deletions
diff --git a/string/string.h b/string/string.h
index a434c3ab81..3cac382529 100644
--- a/string/string.h
+++ b/string/string.h
@@ -181,15 +181,6 @@ extern size_t strlen __P ((__const char *__s));
/* Find the length of STRING, but scan at most MAXLEN characters.
If no '\0' terminator is found in that many characters, return MAXLEN. */
extern size_t strnlen __P ((__const char *__string, size_t __maxlen));
-
-# ifdef __OPTIMIZE__
-extern __inline size_t
-strnlen (__const char *__string, size_t __maxlen)
-{
- __const char *__end = (__const char *) memchr (__string, '\0', __maxlen);
- return __end ? __end - __string : __maxlen;
-}
-# endif
#endif
@@ -272,23 +263,34 @@ extern char *strfry __P ((char *__string));
/* Frobnicate N bytes of S. */
extern __ptr_t memfrob __P ((__ptr_t __s, size_t __n));
-#endif
-#if defined __USE_MISC || !defined basename
+# ifndef basename
/* Return the file name within directory of FILENAME. We don't
declare the function if the `basename' macro is available (defined
in <libgen.h>) which makes the XPG version of this function
available. */
extern char *basename __P ((__const char *__filename));
+# endif
#endif
/* Some functions might be implemented as optimized inline assembler
- functions. */
-#if !defined __NO_STRING_INLINES && defined __OPTIMIZE__
+ functions. Only include this file if we really want them. */
+#if defined __USE_STRING_INLINES && defined __OPTIMIZE__
# include <bits/string.h>
#endif
+
+/* Now provide some generic optimizations. */
+#if defined __GNUC__ && __GNUC__ >= 2 && defined __OPTIMIZE__
+extern __inline size_t
+strnlen (__const char *__string, size_t __maxlen)
+{
+ __const char *__end = (__const char *) memchr (__string, '\0', __maxlen);
+ return __end ? __end - __string : __maxlen;
+}
+#endif
+
__END_DECLS
#endif /* string.h */