1
/* $Id: strstr_P.c,v 1.1 2007/03/01 13:12:09 dmix Exp $ */
5
# define strstr_P strstr
11
void Check (int line, const char *s1, const char *s2, int expect)
16
if (strlen_P(s1) > sizeof(t1) - 1)
19
p = strstr_P (t1, s2);
20
if ((!p && expect == -1) || (p == t1 + expect))
23
printf ("\nLine %d: expect: %d, result: %d\n",
24
line, expect, (p ? p - t1 : -1));
25
if (line > 255) line = 255;
27
exit (p ? p - t1 : -1);
32
#define CHECK(s1, s2, expect) do { \
33
Check (__LINE__, PSTR(s1), PSTR(s2), expect); \
40
CHECK ("12345", "", 0);
43
CHECK ("ababac", "abac", 2);
45
/* 'needle' of 1 byte long */
49
CHECK ("abcbef", "a", 0);
51
CHECK (".a.", "a", 1);
52
CHECK ("ABCDEFGH", "H", 7);
54
/* 'needle' of 2 bytes long */
56
CHECK ("13", "12", -1);
57
CHECK ("32", "12", -1);
58
CHECK ("12", "12", 0);
59
CHECK ("123", "12", 0);
60
CHECK ("012", "12", 1);
61
CHECK ("01200", "12", 1);
63
/* partially mathing */
64
CHECK ("a_ab_abc_abcd_abcde", "abcdef", -1);
65
CHECK ("a_ab_abc_abcd_abcde_abcdef", "abcdef", 20);
66
CHECK ("aababcabcdabcde", "abcdef", -1);
67
CHECK ("aababcabcdabcdeabcdef", "abcdef", 15);
70
CHECK ("abaabaaabaaaab", "aaaaab", -1);
71
CHECK ("abaabaaabaaaabaaaaab", "aaaaab", 14);
73
/* A first match is returned. */
74
CHECK ("_foo_foo", "foo", 1);
76
/* Case is importent. */