diff options
author | Andrew Bartlett <abartlet@samba.org> | 2004-03-09 11:15:44 +0000 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2004-03-09 11:15:44 +0000 |
commit | 32665c36c88d9f650baa33248275b711799fd300 (patch) | |
tree | f939ac21556abcdaf0e551792069966c2d676b87 /source3/lib | |
parent | 151faf6935d54efcc3b5bcf8e60419b490ac460d (diff) | |
download | samba-32665c36c88d9f650baa33248275b711799fd300.tar.gz samba-32665c36c88d9f650baa33248275b711799fd300.tar.bz2 samba-32665c36c88d9f650baa33248275b711799fd300.zip |
Given how core this code is, I figure it should have it's own testsuite.
Big thanks to tpot and mbp for showing how easy it can be to write a simple
unit test, and for providing the STF.
This also changes the strstr_m() code to use strstr_w() (avoiding
duplication) and fixes it so that it passes the STF.
(We now always restart before doing the unicode run, until sombody can
show me why the testsuite is wrong).
Andrew Bartlett
(This used to be commit a893a324f37e6a171719db8ffffe66df31c2dbaa)
Diffstat (limited to 'source3/lib')
-rw-r--r-- | source3/lib/util_str.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/source3/lib/util_str.c b/source3/lib/util_str.c index 7f3c30f61e..b8cf052862 100644 --- a/source3/lib/util_str.c +++ b/source3/lib/util_str.c @@ -1309,6 +1309,11 @@ char *strstr_m(const char *src, const char *findstr) size_t findstr_len = 0; size_t find_w_len; + /* for correctness */ + if (!findstr[0]) { + return src; + } + /* Samba does single character findstr calls a *lot*. */ if (findstr[1] == '\0') return strchr_m(src, *findstr); @@ -1331,7 +1336,9 @@ char *strstr_m(const char *src, const char *findstr) if (!*s) return NULL; -#ifdef BROKEN_UNICODE_COMPOSE_CHARACTERS +#if 1 /* def BROKEN_UNICODE_COMPOSE_CHARACTERS */ + /* 'make check' fails unless we do this */ + /* With compose characters we must restart from the beginning. JRA. */ s = src; #endif @@ -1346,18 +1353,15 @@ char *strstr_m(const char *src, const char *findstr) DEBUG(0,("strstr_m: find malloc fail\n")); return NULL; } - - find_w_len = strlen_w(find_w); - for (p = src_w; (p = strchr_w(p, *find_w)) != NULL; p++) { - if (strncmp_w(p, find_w, find_w_len) == 0) - break; - } + p = strstr_w(src_w, find_w); + if (!p) { SAFE_FREE(src_w); SAFE_FREE(find_w); return NULL; } + *p = 0; if (pull_ucs2_allocate(&s2, src_w) == (size_t)-1) { SAFE_FREE(src_w); |