[PATCH] fix last corner case in strrstr.c
Tito
farmatito at tiscali.it
Tue Jun 17 12:38:38 PDT 2008
Hi,
current implementation fails to be coherent with real strstr()
on the last test case:
./test
'baaabaaab' vs. 'aaa' : PASSED
'baaabaaaab' vs. 'aaa' : PASSED
'baaabaab' vs. 'aaa' : PASSED
'aaa' vs. 'aaa' : PASSED
'aaa' vs. 'a' : PASSED
'aaa' vs. 'bbb' : PASSED
'a' vs. 'aaa' : PASSED
'aaa' vs. '' : PASSED
'' vs. 'aaa' : PASSED
'' vs. '' : FAILED
this patch fixes this with no size increase:
./test
'baaabaaab' vs. 'aaa' : PASSED
'baaabaaaab' vs. 'aaa' : PASSED
'baaabaab' vs. 'aaa' : PASSED
'aaa' vs. 'aaa' : PASSED
'aaa' vs. 'a' : PASSED
'aaa' vs. 'bbb' : PASSED
'a' vs. 'aaa' : PASSED
'aaa' vs. '' : PASSED
'' vs. 'aaa' : PASSED
'' vs. '' : PASSED
./scripts/bloat-o-meter busybox_old busybox_unstripped
function old new delta
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/0 up/down: 0/0) Total: 0 bytes
Function is changed to:
char *strrstr(const char *haystack, const char *needle)
{
char *r = NULL;
do {
char *p = strstr(haystack, needle);
if (p)
r = p;
} while (*haystack++);
return r;
}
The contra is that it is probably a little more cpu intensive :)
Please apply if you like it.
Ciao,
Tito
-------------- next part --------------
A non-text attachment was scrubbed...
Name: strrstr.patch
Type: text/x-diff
Size: 711 bytes
Desc: not available
Url : http://busybox.net/lists/busybox/attachments/20080617/5f272f54/attachment.patch
More information about the busybox
mailing list