[PATCH] fix last corner case in strrstr.c

Tito farmatito at tiscali.it
Tue Jun 17 19:38:38 UTC 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://lists.busybox.net/pipermail/busybox/attachments/20080617/5f272f54/attachment.bin 


More information about the busybox mailing list