[RFC] strrstr function in libbb failes on some corner cases
Tito
farmatito at tiscali.it
Tue Jun 17 11:52:20 UTC 2008
On Tuesday 17 June 2008 09:43:54 Bernhard Fischer wrote:
> On Mon, Jun 16, 2008 at 09:48:07PM +0200, Tito wrote:
> >On Monday 16 June 2008 09:47:31 Bernhard Fischer wrote:
> >> On Mon, Jun 16, 2008 at 08:45:18AM +0200, Tito wrote:
> >> >On Monday 16 June 2008 06:33:35 you wrote:
>
> >> >> char* strrstr(const char *haystack, const char *needle)
> >> >> {
> >> >> char *r = NULL;
> >> >>
> >> >> if (!needle[0])
> >> >> return r;
> >> >> while (1) {
> >> >> char *p = strstr(haystack, needle);
> >> >> if (!p)
> >> >> return r;
> >> >> r = p;
> >> >> haystack = p + 1;
>
> >Hi, just for fun,
> >one more variant that seems to pass the tests as modified (for "")
> >
> >char* strrstr(const char *haystack, const char *needle)
> >{
> > char *s = NULL;
> >
> > while (*haystack) {
> > s = (strstr(haystack++, needle)) ? : s;
> > }
> > return s;
> >}
> >
> >but size on my system is the same as Denys' version.... :(
> >
> >scripts/bloat-o-meter busybox_old busybox_unstripped
> >function old new delta
> >strrstr 53 42 -11
> >------------------------------------------------------------------------------
> >(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-11) Total: -11 bytes
>
> Tito, can you pick one (your decision) and send me the full file
> (including your nice testcases)?
> TIA and cheers,
>
HI,
Attached you can find a test.c file with both strrstr, mine and Denys', they show little
differences on "" vs. "" test case.
The test cases are improved and checked against the real strstr for consistency.
As you and Denys are more experienced it is up yo you to decide what to do.
Ciao,
Tito
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.c
Type: text/x-csrc
Size: 2983 bytes
Desc: not available
Url : http://lists.busybox.net/pipermail/busybox/attachments/20080617/85615543/attachment-0002.c
More information about the busybox
mailing list