From: "Templar Viper" <templarviper@hotmail.com>
> From: "Thomas Arp" <t_arp@stofanet.dk>
> > From: "Templar Viper" <templarviper@HOTMAIL.COM>
> > > Here is the function:
> > >
> > > int wordok(char *argument, bool call)
> > > {
<snip>
> > - strlcpy(temp, argument, sizeof(temp));
> > /* this loop copies 'argument' into temp without *s */
> > + for (; *p && p - argument < sizeof(temp);) {
> > + if (*p == ' ' || *p == '\t')
> > + continue;
> > + *q++ = *p++;
> > + }
> > + *q = '\0';
> This is an infinite loop methinks. When called with a space, circle jumps
> to 100% cpu usage and doesn't repond anymore, and needs to be killed.
>
Yeah, of course. It was mailer code, too. the p++ should go in the
loop header instead of the body;
+ for (; *p && p - argument < sizeof(temp);p++) {
+ if (*p == ' ' || *p == '\t')
+ continue;
+ *q++ = *p;
+ }
+ *q = '\0';
> <Rest of function>
>
> > You didn't send a copy of search_replace(), so I'll not bother with
> > that one. This is implementation should run in O(M+(N*N*M)).
>
> Here is search_replace, I didn't write this myself, I found it somewhere
> on the developer site instead.
<snip of search_replace() calling str_strr 3 times>
void search_replace(char *txt, char *find, char *replace)
{
int findlen, replacelen;
char *p, *q;
if (!txt || !*txt)
return;
if(NULL == (p = strcasestr(txt, find)))
return;
findlen = strlen(find);
replacelen = strlen(replace);
if ((strlen(txt) + replacelen - findlen + 1) > MAX_INPUT_LENGTH)
return;
memmove(q = p+replacelen, p+findlen, strlen(p+findlen)+1);
memcpy(p, replace, replacelen);
/*
* search for more occurences
* q is now pointing to the first char after the replace.
*/
search_replace(q, find, replace);
}
This recursive function will replace all occurences of 'find' with
'replace'. And without using too many expensive strcat and strlen
ops.
Welcor
--
+---------------------------------------------------------------+
| FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
| Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
| Newbie List: http://groups.yahoo.com/group/circle-newbies/ |
+---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 06/26/03 PDT