summaryrefslogtreecommitdiff
path: root/string
diff options
context:
space:
mode:
Diffstat (limited to 'string')
-rw-r--r--string/bits/string2.h30
-rw-r--r--string/endian.h10
-rw-r--r--string/memory.h4
-rw-r--r--string/tester.c13
4 files changed, 30 insertions, 27 deletions
diff --git a/string/bits/string2.h b/string/bits/string2.h
index e0a8e75311..c2e63b6ebc 100644
--- a/string/bits/string2.h
+++ b/string/bits/string2.h
@@ -79,6 +79,10 @@ __STRING2_COPY_TYPE (8);
# undef __STRING2_COPY_TYPE
#endif
+/* Dereferencing a pointer arg to run sizeof on it fails for the
+ void pointer case, so we use this instead. */
+#define __string2_1bptr_p(x) (((size_t) ((x) + 1) - (size_t) (x)) == 1)
+
/* Set N bytes of S to C. */
#ifndef _HAVE_STRING_ARCH_memset
@@ -93,7 +97,7 @@ __STRING2_COPY_TYPE (8);
#ifndef _HAVE_STRING_ARCH_strcpy
# define strcpy(dest, src) \
(__extension__ (__builtin_constant_p (src) \
- ? (sizeof ((src)[0]) == 1 && strlen (src) + 1 <= 8 \
+ ? (__string2_1bptr_p (src) && strlen (src) + 1 <= 8 \
? __strcpy_small (dest, src, strlen (src) + 1) \
: (char *) memcpy (dest, src, strlen (src) + 1)) \
: strcpy (dest, src)))
@@ -204,7 +208,7 @@ __STRING2_COPY_TYPE (8);
# ifndef _HAVE_STRING_ARCH_stpcpy
# define __stpcpy(dest, src) \
(__extension__ (__builtin_constant_p (src) \
- ? (sizeof ((src)[0]) == 1 && strlen (src) + 1 <= 8 \
+ ? (__string2_1bptr_p (src) && strlen (src) + 1 <= 8 \
? __stpcpy_small (dest, src, strlen (src) + 1) \
: ((char *) __mempcpy (dest, src, strlen (src) + 1) - 1))\
: __stpcpy (dest, src)))
@@ -369,17 +373,17 @@ __STRING2_COPY_TYPE (8);
#ifndef _HAVE_STRING_ARCH_strcmp
# define strcmp(s1, s2) \
(__extension__ (__builtin_constant_p (s1) && __builtin_constant_p (s2) \
- && (sizeof ((s1)[0]) != 1 || strlen (s1) >= 4) \
- && (sizeof ((s2)[0]) != 1 || strlen (s2) >= 4) \
+ && (!__string2_1bptr_p (s1) || strlen (s1) >= 4) \
+ && (!__string2_1bptr_p (s2) || strlen (s2) >= 4) \
? memcmp (s1, s2, (strlen (s1) < strlen (s2) \
? strlen (s1) : strlen (s2)) + 1) \
- : (__builtin_constant_p (s1) && sizeof ((s1)[0]) == 1 \
- && sizeof ((s2)[0]) == 1 && strlen (s1) < 4 \
+ : (__builtin_constant_p (s1) && __string2_1bptr_p (s1) \
+ && __string2_1bptr_p (s2) && strlen (s1) < 4 \
? (__builtin_constant_p (s2) \
? __strcmp_cc (s1, s2, strlen (s1)) \
: __strcmp_cg (s1, s2, strlen (s1))) \
- : (__builtin_constant_p (s2) && sizeof ((s1)[0]) == 1 \
- && sizeof ((s2)[0]) == 1 && strlen (s2) < 4 \
+ : (__builtin_constant_p (s2) && __string2_1bptr_p (s1) \
+ && __string2_1bptr_p (s2) && strlen (s2) < 4 \
? (__builtin_constant_p (s1) \
? __strcmp_cc (s1, s2, strlen (s2)) \
: __strcmp_gc (s1, s2, strlen (s2))) \
@@ -450,7 +454,7 @@ __STRING2_COPY_TYPE (8);
consists entirely of characters not in REJECT. */
#ifndef _HAVE_STRING_ARCH_strcspn
# define strcspn(s, reject) \
- (__extension__ (__builtin_constant_p (reject) && sizeof ((reject)[0]) == 1 \
+ (__extension__ (__builtin_constant_p (reject) && __string2_1bptr_p (reject) \
? ((reject)[0] == '\0' \
? strlen (s) \
: ((reject)[1] == '\0' \
@@ -474,7 +478,7 @@ __strcspn_c1 (__const char *__s, char __reject)
consists entirely of characters in ACCEPT. */
#ifndef _HAVE_STRING_ARCH_strspn
# define strspn(s, accept) \
- (__extension__ (__builtin_constant_p (accept) && sizeof ((accept)[0]) == 1 \
+ (__extension__ (__builtin_constant_p (accept) && __string2_1bptr_p (accept) \
? ((accept)[0] == '\0' \
? 0 \
: ((accept)[1] == '\0' \
@@ -498,7 +502,7 @@ __strspn_c1 (__const char *__s, char __accept)
/* Find the first occurrence in S of any character in ACCEPT. */
#ifndef _HAVE_STRING_ARCH_strpbrk
# define strpbrk(s, accept) \
- (__extension__ (__builtin_constant_p (accept) && sizeof ((accept)[0]) == 1 \
+ (__extension__ (__builtin_constant_p (accept) && __string2_1bptr_p (accept) \
? ((accept)[0] == '\0' \
? NULL \
: ((accept)[1] == '\0' \
@@ -511,7 +515,7 @@ __strspn_c1 (__const char *__s, char __accept)
/* Find the first occurrence of NEEDLE in HAYSTACK. */
#ifndef _HAVE_STRING_ARCH_strstr
# define strstr(haystack, needle) \
- (__extension__ (__builtin_constant_p (needle) && sizeof ((needle)[0]) == 1 \
+ (__extension__ (__builtin_constant_p (needle) && __string2_1bptr_p (needle) \
? ((needle)[0] == '\0' \
? haystack \
: ((needle)[1] == '\0' \
@@ -538,7 +542,7 @@ strnlen (__const char *__string, size_t __maxlen)
# ifndef _HAVE_STRING_ARCH_strsep
# define strsep(s, reject) \
- (__extension__ (__builtin_constant_p (reject) && sizeof ((reject)[0]) == 1 \
+ (__extension__ (__builtin_constant_p (reject) && __string2_1bptr_p (reject) \
? ((reject)[0] != '\0' && (reject)[1] == '\0' \
? __strsep_1c (s, (reject)[0]) \
: __strsep_g (s, reject)) \
diff --git a/string/endian.h b/string/endian.h
index 338c42ec35..03e802f6cb 100644
--- a/string/endian.h
+++ b/string/endian.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -35,10 +35,10 @@
#include <bits/endian.h>
#ifdef __USE_BSD
-#define LITTLE_ENDIAN __LITTLE_ENDIAN
-#define BIG_ENDIAN __BIG_ENDIAN
-#define PDP_ENDIAN __PDP_ENDIAN
-#define BYTE_ORDER __BYTE_ORDER
+# define LITTLE_ENDIAN __LITTLE_ENDIAN
+# define BIG_ENDIAN __BIG_ENDIAN
+# define PDP_ENDIAN __PDP_ENDIAN
+# define BYTE_ORDER __BYTE_ORDER
#endif
#endif /* endian.h */
diff --git a/string/memory.h b/string/memory.h
index 952060d431..d6aaa5994b 100644
--- a/string/memory.h
+++ b/string/memory.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1996, 1997 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -27,7 +27,7 @@
#ifndef _STRING_H
-#include <string.h>
+# include <string.h>
#endif /* string.h */
diff --git a/string/tester.c b/string/tester.c
index 5b7b2f97f9..d74ab72852 100644
--- a/string/tester.c
+++ b/string/tester.c
@@ -695,13 +695,12 @@ test_strsep (void)
{
char text[] = "This,is,a,test";
- char *list = text;
- it = "strsep";
- check (!strcmp ("This", strsep (&list, ",")), 1);
- check (!strcmp ("is", strsep (&list, ",")), 2);
- check (!strcmp ("a", strsep (&list, ",")), 3);
- check (!strcmp ("test", strsep (&list, ",")), 4);
- check (strsep (&list, ",") == NULL, 5);
+ char *list = strdupa (text);
+ equal (strsep (&list, ","), "This", 47);
+ equal (strsep (&list, ","), "is", 48);
+ equal (strsep (&list, ","), "a", 49);
+ equal (strsep (&list, ","), "test", 50);
+ check (strsep (&list, ",") == NULL, 51);
}
}