diff options
Diffstat (limited to 'ccan/str')
26 files changed, 0 insertions, 967 deletions
diff --git a/ccan/str/LICENSE b/ccan/str/LICENSE deleted file mode 120000 index b7951da..0000000 --- a/ccan/str/LICENSE +++ /dev/null @@ -1 +0,0 @@ -../../licenses/CC0
\ No newline at end of file diff --git a/ccan/str/_info b/ccan/str/_info deleted file mode 100644 index b579525..0000000 --- a/ccan/str/_info +++ /dev/null @@ -1,52 +0,0 @@ -#include "config.h" -#include <stdio.h> -#include <string.h> - -/** - * str - string helper routines - * - * This is a grab bag of functions for string operations, designed to enhance - * the standard string.h. - * - * Note that if you define CCAN_STR_DEBUG, you will get extra compile - * checks on common misuses of the following functions (they will now - * be out-of-line, so there is a runtime penalty!). - * - * strstr, strchr, strrchr: - * Return const char * if first argument is const (gcc only). - * - * isalnum, isalpha, isascii, isblank, iscntrl, isdigit, isgraph, - * islower, isprint, ispunct, isspace, isupper, isxdigit: - * Static and runtime check that input is EOF or an *unsigned* - * char, as per C standard (really!). - * - * Example: - * #include <stdio.h> - * #include <ccan/str/str.h> - * - * int main(int argc, char *argv[]) - * { - * if (argc > 1 && streq(argv[1], "--verbose")) - * printf("verbose set\n"); - * if (argc > 1 && strstarts(argv[1], "--")) - * printf("Some option set\n"); - * if (argc > 1 && strends(argv[1], "cow-powers")) - * printf("Magic option set\n"); - * return 0; - * } - * - * License: CC0 (Public domain) - * Author: Rusty Russell <rusty@rustcorp.com.au> - */ -int main(int argc, char *argv[]) -{ - if (argc != 2) - return 1; - - if (strcmp(argv[1], "depends") == 0) { - printf("ccan/build_assert\n"); - return 0; - } - - return 1; -} diff --git a/ccan/str/debug.c b/ccan/str/debug.c deleted file mode 100644 index 8c51944..0000000 --- a/ccan/str/debug.c +++ /dev/null @@ -1,108 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#include "config.h" -#include <ccan/str/str_debug.h> -#include <assert.h> -#include <ctype.h> -#include <string.h> - -#ifdef CCAN_STR_DEBUG -/* Because we mug the real ones with macros, we need our own wrappers. */ -int str_isalnum(int i) -{ - assert(i >= -1 && i < 256); - return isalnum(i); -} - -int str_isalpha(int i) -{ - assert(i >= -1 && i < 256); - return isalpha(i); -} - -int str_isascii(int i) -{ - assert(i >= -1 && i < 256); - return isascii(i); -} - -#if HAVE_ISBLANK -int str_isblank(int i) -{ - assert(i >= -1 && i < 256); - return isblank(i); -} -#endif - -int str_iscntrl(int i) -{ - assert(i >= -1 && i < 256); - return iscntrl(i); -} - -int str_isdigit(int i) -{ - assert(i >= -1 && i < 256); - return isdigit(i); -} - -int str_isgraph(int i) -{ - assert(i >= -1 && i < 256); - return isgraph(i); -} - -int str_islower(int i) -{ - assert(i >= -1 && i < 256); - return islower(i); -} - -int str_isprint(int i) -{ - assert(i >= -1 && i < 256); - return isprint(i); -} - -int str_ispunct(int i) -{ - assert(i >= -1 && i < 256); - return ispunct(i); -} - -int str_isspace(int i) -{ - assert(i >= -1 && i < 256); - return isspace(i); -} - -int str_isupper(int i) -{ - assert(i >= -1 && i < 256); - return isupper(i); -} - -int str_isxdigit(int i) -{ - assert(i >= -1 && i < 256); - return isxdigit(i); -} - -#undef strstr -#undef strchr -#undef strrchr - -char *str_strstr(const char *haystack, const char *needle) -{ - return strstr(haystack, needle); -} - -char *str_strchr(const char *haystack, int c) -{ - return strchr(haystack, c); -} - -char *str_strrchr(const char *haystack, int c) -{ - return strrchr(haystack, c); -} -#endif diff --git a/ccan/str/str.c b/ccan/str/str.c deleted file mode 100644 index a9245c1..0000000 --- a/ccan/str/str.c +++ /dev/null @@ -1,13 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#include <ccan/str/str.h> - -size_t strcount(const char *haystack, const char *needle) -{ - size_t i = 0, nlen = strlen(needle); - - while ((haystack = strstr(haystack, needle)) != NULL) { - i++; - haystack += nlen; - } - return i; -} diff --git a/ccan/str/str.h b/ccan/str/str.h deleted file mode 100644 index d919b84..0000000 --- a/ccan/str/str.h +++ /dev/null @@ -1,228 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_STR_H -#define CCAN_STR_H -#include "config.h" -#include <string.h> -#include <stdbool.h> -#include <limits.h> -#include <ctype.h> - -/** - * streq - Are two strings equal? - * @a: first string - * @b: first string - * - * This macro is arguably more readable than "!strcmp(a, b)". - * - * Example: - * if (streq(somestring, "")) - * printf("String is empty!\n"); - */ -#define streq(a,b) (strcmp((a),(b)) == 0) - -/** - * strstarts - Does this string start with this prefix? - * @str: string to test - * @prefix: prefix to look for at start of str - * - * Example: - * if (strstarts(somestring, "foo")) - * printf("String %s begins with 'foo'!\n", somestring); - */ -#define strstarts(str,prefix) (strncmp((str),(prefix),strlen(prefix)) == 0) - -/** - * strends - Does this string end with this postfix? - * @str: string to test - * @postfix: postfix to look for at end of str - * - * Example: - * if (strends(somestring, "foo")) - * printf("String %s end with 'foo'!\n", somestring); - */ -static inline bool strends(const char *str, const char *postfix) -{ - if (strlen(str) < strlen(postfix)) - return false; - - return streq(str + strlen(str) - strlen(postfix), postfix); -} - -/** - * stringify - Turn expression into a string literal - * @expr: any C expression - * - * Example: - * #define PRINT_COND_IF_FALSE(cond) \ - * ((cond) || printf("%s is false!", stringify(cond))) - */ -#define stringify(expr) stringify_1(expr) -/* Double-indirection required to stringify expansions */ -#define stringify_1(expr) #expr - -/** - * strcount - Count number of (non-overlapping) occurrences of a substring. - * @haystack: a C string - * @needle: a substring - * - * Example: - * assert(strcount("aaa aaa", "a") == 6); - * assert(strcount("aaa aaa", "ab") == 0); - * assert(strcount("aaa aaa", "aa") == 2); - */ -size_t strcount(const char *haystack, const char *needle); - -/** - * STR_MAX_CHARS - Maximum possible size of numeric string for this type. - * @type_or_expr: a pointer or integer type or expression. - * - * This provides enough space for a nul-terminated string which represents the - * largest possible value for the type or expression. - * - * Note: The implementation adds extra space so hex values or negative - * values will fit (eg. sprintf(... "%p"). ) - * - * Example: - * char str[STR_MAX_CHARS(int)]; - * - * sprintf(str, "%i", 7); - */ -#define STR_MAX_CHARS(type_or_expr) \ - ((sizeof(type_or_expr) * CHAR_BIT + 8) / 9 * 3 + 2 \ - + STR_MAX_CHARS_TCHECK_(type_or_expr)) - -#if HAVE_TYPEOF -/* Only a simple type can have 0 assigned, so test that. */ -#define STR_MAX_CHARS_TCHECK_(type_or_expr) \ - (sizeof(({ typeof(type_or_expr) x = 0; x; }))*0) -#else -#define STR_MAX_CHARS_TCHECK_(type_or_expr) 0 -#endif - -/** - * cisalnum - isalnum() which takes a char (and doesn't accept EOF) - * @c: a character - * - * Surprisingly, the standard ctype.h isalnum() takes an int, which - * must have the value of EOF (-1) or an unsigned char. This variant - * takes a real char, and doesn't accept EOF. - */ -static inline bool cisalnum(char c) -{ - return isalnum((unsigned char)c); -} -static inline bool cisalpha(char c) -{ - return isalpha((unsigned char)c); -} -static inline bool cisascii(char c) -{ - return isascii((unsigned char)c); -} -#if HAVE_ISBLANK -static inline bool cisblank(char c) -{ - return isblank((unsigned char)c); -} -#endif -static inline bool ciscntrl(char c) -{ - return iscntrl((unsigned char)c); -} -static inline bool cisdigit(char c) -{ - return isdigit((unsigned char)c); -} -static inline bool cisgraph(char c) -{ - return isgraph((unsigned char)c); -} -static inline bool cislower(char c) -{ - return islower((unsigned char)c); -} -static inline bool cisprint(char c) -{ - return isprint((unsigned char)c); -} -static inline bool cispunct(char c) -{ - return ispunct((unsigned char)c); -} -static inline bool cisspace(char c) -{ - return isspace((unsigned char)c); -} -static inline bool cisupper(char c) -{ - return isupper((unsigned char)c); -} -static inline bool cisxdigit(char c) -{ - return isxdigit((unsigned char)c); -} - -#include <ccan/str/str_debug.h> - -/* These checks force things out of line, hence they are under DEBUG. */ -#ifdef CCAN_STR_DEBUG -#include <ccan/build_assert/build_assert.h> - -/* These are commonly misused: they take -1 or an *unsigned* char value. */ -#undef isalnum -#undef isalpha -#undef isascii -#undef isblank -#undef iscntrl -#undef isdigit -#undef isgraph -#undef islower -#undef isprint -#undef ispunct -#undef isspace -#undef isupper -#undef isxdigit - -/* You can use a char if char is unsigned. */ -#if HAVE_BUILTIN_TYPES_COMPATIBLE_P && HAVE_TYPEOF -#define str_check_arg_(i) \ - ((i) + BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(typeof(i), \ - char) \ - || (char)255 > 0)) -#else -#define str_check_arg_(i) (i) -#endif - -#define isalnum(i) str_isalnum(str_check_arg_(i)) -#define isalpha(i) str_isalpha(str_check_arg_(i)) -#define isascii(i) str_isascii(str_check_arg_(i)) -#if HAVE_ISBLANK -#define isblank(i) str_isblank(str_check_arg_(i)) -#endif -#define iscntrl(i) str_iscntrl(str_check_arg_(i)) -#define isdigit(i) str_isdigit(str_check_arg_(i)) -#define isgraph(i) str_isgraph(str_check_arg_(i)) -#define islower(i) str_islower(str_check_arg_(i)) -#define isprint(i) str_isprint(str_check_arg_(i)) -#define ispunct(i) str_ispunct(str_check_arg_(i)) -#define isspace(i) str_isspace(str_check_arg_(i)) -#define isupper(i) str_isupper(str_check_arg_(i)) -#define isxdigit(i) str_isxdigit(str_check_arg_(i)) - -#if HAVE_TYPEOF -/* With GNU magic, we can make const-respecting standard string functions. */ -#undef strstr -#undef strchr -#undef strrchr - -/* + 0 is needed to decay array into pointer. */ -#define strstr(haystack, needle) \ - ((typeof((haystack) + 0))str_strstr((haystack), (needle))) -#define strchr(haystack, c) \ - ((typeof((haystack) + 0))str_strchr((haystack), (c))) -#define strrchr(haystack, c) \ - ((typeof((haystack) + 0))str_strrchr((haystack), (c))) -#endif -#endif /* CCAN_STR_DEBUG */ - -#endif /* CCAN_STR_H */ diff --git a/ccan/str/str_debug.h b/ccan/str/str_debug.h deleted file mode 100644 index 92c10c4..0000000 --- a/ccan/str/str_debug.h +++ /dev/null @@ -1,30 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_STR_DEBUG_H -#define CCAN_STR_DEBUG_H - -/* #define CCAN_STR_DEBUG 1 */ - -#ifdef CCAN_STR_DEBUG -/* Because we mug the real ones with macros, we need our own wrappers. */ -int str_isalnum(int i); -int str_isalpha(int i); -int str_isascii(int i); -#if HAVE_ISBLANK -int str_isblank(int i); -#endif -int str_iscntrl(int i); -int str_isdigit(int i); -int str_isgraph(int i); -int str_islower(int i); -int str_isprint(int i); -int str_ispunct(int i); -int str_isspace(int i); -int str_isupper(int i); -int str_isxdigit(int i); - -char *str_strstr(const char *haystack, const char *needle); -char *str_strchr(const char *s, int c); -char *str_strrchr(const char *s, int c); -#endif /* CCAN_STR_DEBUG */ - -#endif /* CCAN_STR_DEBUG_H */ diff --git a/ccan/str/test/compile_fail-STR_MAX_CHARS.c b/ccan/str/test/compile_fail-STR_MAX_CHARS.c deleted file mode 100644 index 8e0fd2e..0000000 --- a/ccan/str/test/compile_fail-STR_MAX_CHARS.c +++ /dev/null @@ -1,23 +0,0 @@ -#include <ccan/str/str.h> - -struct s { - int val; -}; - -int main(void) -{ - struct s -#ifdef FAIL -#if !HAVE_TYPEOF - #error We need typeof to check STR_MAX_CHARS. -#endif -#else - /* A pointer is OK. */ - * -#endif - val; - char str[STR_MAX_CHARS(val)]; - - str[0] = '\0'; - return str[0] ? 0 : 1; -} diff --git a/ccan/str/test/compile_fail-isalnum.c b/ccan/str/test/compile_fail-isalnum.c deleted file mode 100644 index 5d98958..0000000 --- a/ccan/str/test/compile_fail-isalnum.c +++ /dev/null @@ -1,23 +0,0 @@ -#define CCAN_STR_DEBUG 1 -#include <ccan/str/str.h> - -int main(int argc, char *argv[]) -{ - (void)argc; -#ifdef FAIL -#if !HAVE_BUILTIN_TYPES_COMPATIBLE_P || !HAVE_TYPEOF -#error We need typeof to check isalnum. -#endif - char -#else - unsigned char -#endif - c = argv[0][0]; - -#ifdef FAIL - /* Fake fail on unsigned char platforms. */ - BUILD_ASSERT((char)255 < 0); -#endif - - return isalnum(c); -} diff --git a/ccan/str/test/compile_fail-isalpha.c b/ccan/str/test/compile_fail-isalpha.c deleted file mode 100644 index 33d3655..0000000 --- a/ccan/str/test/compile_fail-isalpha.c +++ /dev/null @@ -1,23 +0,0 @@ -#define CCAN_STR_DEBUG 1 -#include <ccan/str/str.h> - -int main(int argc, char *argv[]) -{ - (void)argc; -#ifdef FAIL -#if !HAVE_BUILTIN_TYPES_COMPATIBLE_P || !HAVE_TYPEOF -#error We need typeof to check isalpha. -#endif - char -#else - unsigned char -#endif - c = argv[0][0]; - -#ifdef FAIL - /* Fake fail on unsigned char platforms. */ - BUILD_ASSERT((char)255 < 0); -#endif - - return isalpha(c); -} diff --git a/ccan/str/test/compile_fail-isascii.c b/ccan/str/test/compile_fail-isascii.c deleted file mode 100644 index 3946e0b..0000000 --- a/ccan/str/test/compile_fail-isascii.c +++ /dev/null @@ -1,23 +0,0 @@ -#define CCAN_STR_DEBUG 1 -#include <ccan/str/str.h> - -int main(int argc, char *argv[]) -{ - (void)argc; -#ifdef FAIL -#if !HAVE_BUILTIN_TYPES_COMPATIBLE_P || !HAVE_TYPEOF -#error We need typeof to check isascii. -#endif - char -#else - unsigned char -#endif - c = argv[0][0]; - -#ifdef FAIL - /* Fake fail on unsigned char platforms. */ - BUILD_ASSERT((char)255 < 0); -#endif - - return isascii(c); -} diff --git a/ccan/str/test/compile_fail-isblank.c b/ccan/str/test/compile_fail-isblank.c deleted file mode 100644 index e14b0d7..0000000 --- a/ccan/str/test/compile_fail-isblank.c +++ /dev/null @@ -1,27 +0,0 @@ -#define CCAN_STR_DEBUG 1 -#include <ccan/str/str.h> - -int main(int argc, char *argv[]) -{ - (void)argc; -#ifdef FAIL -#if !HAVE_BUILTIN_TYPES_COMPATIBLE_P || !HAVE_TYPEOF || !HAVE_ISBLANK -#error We need typeof to check isblank. -#endif - char -#else - unsigned char -#endif - c = argv[0][0]; - -#ifdef FAIL - /* Fake fail on unsigned char platforms. */ - BUILD_ASSERT((char)255 < 0); -#endif - -#if HAVE_ISBLANK - return isblank(c); -#else - return c; -#endif -} diff --git a/ccan/str/test/compile_fail-iscntrl.c b/ccan/str/test/compile_fail-iscntrl.c deleted file mode 100644 index f9abf1d..0000000 --- a/ccan/str/test/compile_fail-iscntrl.c +++ /dev/null @@ -1,23 +0,0 @@ -#define CCAN_STR_DEBUG 1 -#include <ccan/str/str.h> - -int main(int argc, char *argv[]) -{ - (void)argc; -#ifdef FAIL -#if !HAVE_BUILTIN_TYPES_COMPATIBLE_P || !HAVE_TYPEOF -#error We need typeof to check iscntrl. -#endif - char -#else - unsigned char -#endif - c = argv[0][0]; - -#ifdef FAIL - /* Fake fail on unsigned char platforms. */ - BUILD_ASSERT((char)255 < 0); -#endif - - return iscntrl(c); -} diff --git a/ccan/str/test/compile_fail-isdigit.c b/ccan/str/test/compile_fail-isdigit.c deleted file mode 100644 index a3ee439..0000000 --- a/ccan/str/test/compile_fail-isdigit.c +++ /dev/null @@ -1,23 +0,0 @@ -#define CCAN_STR_DEBUG 1 -#include <ccan/str/str.h> - -int main(int argc, char *argv[]) -{ - (void)argc; -#ifdef FAIL -#if !HAVE_BUILTIN_TYPES_COMPATIBLE_P || !HAVE_TYPEOF -#error We need typeof to check isdigit. -#endif - char -#else - unsigned char -#endif - c = argv[0][0]; - -#ifdef FAIL - /* Fake fail on unsigned char platforms. */ - BUILD_ASSERT((char)255 < 0); -#endif - - return isdigit(c); -} diff --git a/ccan/str/test/compile_fail-islower.c b/ccan/str/test/compile_fail-islower.c deleted file mode 100644 index 8f5c456..0000000 --- a/ccan/str/test/compile_fail-islower.c +++ /dev/null @@ -1,23 +0,0 @@ -#define CCAN_STR_DEBUG 1 -#include <ccan/str/str.h> - -int main(int argc, char *argv[]) -{ - (void)argc; -#ifdef FAIL -#if !HAVE_BUILTIN_TYPES_COMPATIBLE_P || !HAVE_TYPEOF -#error We need typeof to check islower. -#endif - char -#else - unsigned char -#endif - c = argv[0][0]; - -#ifdef FAIL - /* Fake fail on unsigned char platforms. */ - BUILD_ASSERT((char)255 < 0); -#endif - - return islower(c); -} diff --git a/ccan/str/test/compile_fail-isprint.c b/ccan/str/test/compile_fail-isprint.c deleted file mode 100644 index 85ed028..0000000 --- a/ccan/str/test/compile_fail-isprint.c +++ /dev/null @@ -1,23 +0,0 @@ -#define CCAN_STR_DEBUG 1 -#include <ccan/str/str.h> - -int main(int argc, char *argv[]) -{ - (void)argc; -#ifdef FAIL -#if !HAVE_BUILTIN_TYPES_COMPATIBLE_P || !HAVE_TYPEOF -#error We need typeof to check isprint. -#endif - char -#else - unsigned char -#endif - c = argv[0][0]; - -#ifdef FAIL - /* Fake fail on unsigned char platforms. */ - BUILD_ASSERT((char)255 < 0); -#endif - - return isprint(c); -} diff --git a/ccan/str/test/compile_fail-ispunct.c b/ccan/str/test/compile_fail-ispunct.c deleted file mode 100644 index 09d4279..0000000 --- a/ccan/str/test/compile_fail-ispunct.c +++ /dev/null @@ -1,23 +0,0 @@ -#define CCAN_STR_DEBUG 1 -#include <ccan/str/str.h> - -int main(int argc, char *argv[]) -{ - (void)argc; -#ifdef FAIL -#if !HAVE_BUILTIN_TYPES_COMPATIBLE_P || !HAVE_TYPEOF -#error We need typeof to check ispunct. -#endif - char -#else - unsigned char -#endif - c = argv[0][0]; - -#ifdef FAIL - /* Fake fail on unsigned char platforms. */ - BUILD_ASSERT((char)255 < 0); -#endif - - return ispunct(c); -} diff --git a/ccan/str/test/compile_fail-isspace.c b/ccan/str/test/compile_fail-isspace.c deleted file mode 100644 index 798cfcd..0000000 --- a/ccan/str/test/compile_fail-isspace.c +++ /dev/null @@ -1,23 +0,0 @@ -#define CCAN_STR_DEBUG 1 -#include <ccan/str/str.h> - -int main(int argc, char *argv[]) -{ - (void)argc; -#ifdef FAIL -#if !HAVE_BUILTIN_TYPES_COMPATIBLE_P || !HAVE_TYPEOF -#error We need typeof to check isspace. -#endif - char -#else - unsigned char -#endif - c = argv[0][0]; - -#ifdef FAIL - /* Fake fail on unsigned char platforms. */ - BUILD_ASSERT((char)255 < 0); -#endif - - return isspace(c); -} diff --git a/ccan/str/test/compile_fail-isupper.c b/ccan/str/test/compile_fail-isupper.c deleted file mode 100644 index 56f5dee..0000000 --- a/ccan/str/test/compile_fail-isupper.c +++ /dev/null @@ -1,23 +0,0 @@ -#define CCAN_STR_DEBUG 1 -#include <ccan/str/str.h> - -int main(int argc, char *argv[]) -{ - (void)argc; -#ifdef FAIL -#if !HAVE_BUILTIN_TYPES_COMPATIBLE_P || !HAVE_TYPEOF -#error We need typeof to check isupper. -#endif - char -#else - unsigned char -#endif - c = argv[0][0]; - -#ifdef FAIL - /* Fake fail on unsigned char platforms. */ - BUILD_ASSERT((char)255 < 0); -#endif - - return isupper(c); -} diff --git a/ccan/str/test/compile_fail-isxdigit.c b/ccan/str/test/compile_fail-isxdigit.c deleted file mode 100644 index ea4d526..0000000 --- a/ccan/str/test/compile_fail-isxdigit.c +++ /dev/null @@ -1,23 +0,0 @@ -#define CCAN_STR_DEBUG 1 -#include <ccan/str/str.h> - -int main(int argc, char *argv[]) -{ - (void)argc; -#ifdef FAIL -#if !HAVE_BUILTIN_TYPES_COMPATIBLE_P || !HAVE_TYPEOF -#error We need typeof to check isxdigit. -#endif - char -#else - unsigned char -#endif - c = argv[0][0]; - -#ifdef FAIL - /* Fake fail on unsigned char platforms. */ - BUILD_ASSERT((char)255 < 0); -#endif - - return isxdigit(c); -} diff --git a/ccan/str/test/compile_fail-strchr.c b/ccan/str/test/compile_fail-strchr.c deleted file mode 100644 index bdaf034..0000000 --- a/ccan/str/test/compile_fail-strchr.c +++ /dev/null @@ -1,18 +0,0 @@ -#define CCAN_STR_DEBUG 1 -#include <ccan/str/str.h> - -int main(void) -{ -#ifdef FAIL -#if !HAVE_TYPEOF - #error We need typeof to check strstr. -#endif -#else - const -#endif - char *ret; - const char *str = "hello"; - - ret = strchr(str, 'l'); - return ret ? 0 : 1; -} diff --git a/ccan/str/test/compile_fail-strrchr.c b/ccan/str/test/compile_fail-strrchr.c deleted file mode 100644 index 57fba0e..0000000 --- a/ccan/str/test/compile_fail-strrchr.c +++ /dev/null @@ -1,18 +0,0 @@ -#define CCAN_STR_DEBUG 1 -#include <ccan/str/str.h> - -int main(void) -{ -#ifdef FAIL -#if !HAVE_TYPEOF - #error We need typeof to check strstr. -#endif -#else - const -#endif - char *ret; - const char *str = "hello"; - - ret = strrchr(str, 'l'); - return ret ? 0 : 1; -} diff --git a/ccan/str/test/compile_fail-strstr.c b/ccan/str/test/compile_fail-strstr.c deleted file mode 100644 index 7bd8ac2..0000000 --- a/ccan/str/test/compile_fail-strstr.c +++ /dev/null @@ -1,18 +0,0 @@ -#define CCAN_STR_DEBUG 1 -#include <ccan/str/str.h> - -int main(void) -{ -#ifdef FAIL -#if !HAVE_TYPEOF - #error We need typeof to check strstr. -#endif -#else - const -#endif - char *ret; - const char *str = "hello"; - - ret = strstr(str, "hell"); - return ret ? 0 : 1; -} diff --git a/ccan/str/test/compile_ok-STR_MAX_CHARS-static.c b/ccan/str/test/compile_ok-STR_MAX_CHARS-static.c deleted file mode 100644 index bc6aff7..0000000 --- a/ccan/str/test/compile_ok-STR_MAX_CHARS-static.c +++ /dev/null @@ -1,8 +0,0 @@ -#include <ccan/str/str.h> - -int main(void) -{ - static char str[STR_MAX_CHARS(int)]; - - return str[0] ? 0 : 1; -} diff --git a/ccan/str/test/debug.c b/ccan/str/test/debug.c deleted file mode 100644 index 4bd384f..0000000 --- a/ccan/str/test/debug.c +++ /dev/null @@ -1,5 +0,0 @@ -/* We can't use the normal "#include the .c file" trick, since this is - contaminated by str.h's macro overrides. So we put it in all tests - like this. */ -#define CCAN_STR_DEBUG 1 -#include <ccan/str/debug.c> diff --git a/ccan/str/test/run-STR_MAX_CHARS.c b/ccan/str/test/run-STR_MAX_CHARS.c deleted file mode 100644 index fa45bad..0000000 --- a/ccan/str/test/run-STR_MAX_CHARS.c +++ /dev/null @@ -1,59 +0,0 @@ -#include <ccan/str/str.h> -#include <stdlib.h> -#include <stdio.h> -#include <ccan/tap/tap.h> -#include <stdint.h> - -int main(void) -{ - char str[1000]; - struct { - uint8_t u1byte; - int8_t s1byte; - uint16_t u2byte; - int16_t s2byte; - uint32_t u4byte; - int32_t s4byte; - uint64_t u8byte; - int64_t s8byte; - void *ptr; - } types; - - plan_tests(13); - - memset(&types, 0xFF, sizeof(types)); - - /* Hex versions */ - sprintf(str, "0x%llx", (unsigned long long)types.u1byte); - ok1(strlen(str) < STR_MAX_CHARS(types.u1byte)); - sprintf(str, "0x%llx", (unsigned long long)types.u2byte); - ok1(strlen(str) < STR_MAX_CHARS(types.u2byte)); - sprintf(str, "0x%llx", (unsigned long long)types.u4byte); - ok1(strlen(str) < STR_MAX_CHARS(types.u4byte)); - sprintf(str, "0x%llx", (unsigned long long)types.u8byte); - ok1(strlen(str) < STR_MAX_CHARS(types.u8byte)); - - /* Decimal versions */ - sprintf(str, "%u", types.u1byte); - ok1(strlen(str) < STR_MAX_CHARS(types.u1byte)); - sprintf(str, "%d", types.s1byte); - ok1(strlen(str) < STR_MAX_CHARS(types.s1byte)); - sprintf(str, "%u", types.u2byte); - ok1(strlen(str) < STR_MAX_CHARS(types.u2byte)); - sprintf(str, "%d", types.s2byte); - ok1(strlen(str) < STR_MAX_CHARS(types.s2byte)); - sprintf(str, "%u", types.u4byte); - ok1(strlen(str) < STR_MAX_CHARS(types.u4byte)); - sprintf(str, "%d", types.s4byte); - ok1(strlen(str) < STR_MAX_CHARS(types.s4byte)); - sprintf(str, "%llu", (unsigned long long)types.u8byte); - ok1(strlen(str) < STR_MAX_CHARS(types.u8byte)); - sprintf(str, "%lld", (long long)types.s8byte); - ok1(strlen(str) < STR_MAX_CHARS(types.s8byte)); - - /* Pointer version. */ - sprintf(str, "%p", types.ptr); - ok1(strlen(str) < STR_MAX_CHARS(types.ptr)); - - return exit_status(); -} diff --git a/ccan/str/test/run.c b/ccan/str/test/run.c deleted file mode 100644 index 9917fe7..0000000 --- a/ccan/str/test/run.c +++ /dev/null @@ -1,106 +0,0 @@ -#include <ccan/str/str.h> -#include <ccan/str/str.c> -#include <stdlib.h> -#include <stdio.h> -#include <ccan/tap/tap.h> - -#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0])) - -static const char *substrings[] = { "far", "bar", "baz", "b", "ba", "z", "ar", - NULL }; - -#define NUM_SUBSTRINGS (ARRAY_SIZE(substrings) - 1) - -static char *strdup_rev(const char *s) -{ - char *ret = strdup(s); - unsigned int i; - - for (i = 0; i < strlen(s); i++) - ret[i] = s[strlen(s) - i - 1]; - return ret; -} - -int main(void) -{ - unsigned int i, j, n; - char *strings[NUM_SUBSTRINGS * NUM_SUBSTRINGS]; - - n = 0; - for (i = 0; i < NUM_SUBSTRINGS; i++) { - for (j = 0; j < NUM_SUBSTRINGS; j++) { - strings[n] = malloc(strlen(substrings[i]) - + strlen(substrings[j]) + 1); - sprintf(strings[n++], "%s%s", - substrings[i], substrings[j]); - } - } - - plan_tests(n * n * 5 + 16); - for (i = 0; i < n; i++) { - for (j = 0; j < n; j++) { - unsigned int k, identical = 0; - char *reva, *revb; - - /* Find first difference. */ - for (k = 0; strings[i][k]==strings[j][k]; k++) { - if (k == strlen(strings[i])) { - identical = 1; - break; - } - } - - if (identical) - ok1(streq(strings[i], strings[j])); - else - ok1(!streq(strings[i], strings[j])); - - /* Postfix test should be equivalent to prefix - * test on reversed string. */ - reva = strdup_rev(strings[i]); - revb = strdup_rev(strings[j]); - - if (!strings[i][k]) { - ok1(strstarts(strings[j], strings[i])); - ok1(strends(revb, reva)); - } else { - ok1(!strstarts(strings[j], strings[i])); - ok1(!strends(revb, reva)); - } - if (!strings[j][k]) { - ok1(strstarts(strings[i], strings[j])); - ok1(strends(reva, revb)); - } else { - ok1(!strstarts(strings[i], strings[j])); - ok1(!strends(reva, revb)); - } - free(reva); - free(revb); - } - } - - for (i = 0; i < n; i++) - free(strings[i]); - - ok1(streq(stringify(NUM_SUBSTRINGS), - "((sizeof(substrings) / sizeof(substrings[0])) - 1)")); - ok1(streq(stringify(ARRAY_SIZE(substrings)), - "(sizeof(substrings) / sizeof(substrings[0]))")); - ok1(streq(stringify(i == 0), "i == 0")); - - ok1(strcount("aaaaaa", "b") == 0); - ok1(strcount("aaaaaa", "a") == 6); - ok1(strcount("aaaaaa", "aa") == 3); - ok1(strcount("aaaaaa", "aaa") == 2); - ok1(strcount("aaaaaa", "aaaa") == 1); - ok1(strcount("aaaaaa", "aaaaa") == 1); - ok1(strcount("aaaaaa", "aaaaaa") == 1); - ok1(strcount("aaa aaa", "b") == 0); - ok1(strcount("aaa aaa", "a") == 6); - ok1(strcount("aaa aaa", "aa") == 2); - ok1(strcount("aaa aaa", "aaa") == 2); - ok1(strcount("aaa aaa", "aaaa") == 0); - ok1(strcount("aaa aaa", "aaaaa") == 0); - - return exit_status(); -} |
