On Tue, Sep 23, 2014 at 10:05 AM, Richard Mudgett <[email protected]> wrote:
> > > On Tue, Sep 23, 2014 at 10:51 AM, George Joseph < > [email protected]> wrote: > >> On Tue, Sep 23, 2014 at 9:45 AM, George Joseph < >> [email protected]> wrote: >> >>> I've been working on some changes for config.c and in the process I've >>> found 5 instances of someone attempting to do "cat->name == category_name" >>> instead of "strcmp(cat->name, category_name)". Example: >>> >>> /* try exact match first, then case-insensitive match */ >>> for (cat = config->root; cat; cat = cat->next) { >>> if (cat->name == category_name && (ignored || !cat->ignored)) >>> return cat; >>> } >>> >>> for (cat = config->root; cat; cat = cat->next) { >>> if (!strcasecmp(cat->name, category_name) && (ignored || !cat->ignored)) >>> return cat; >>> } >>> >>> The result is that the case sensitive match never succeeds and it's >>> always the case insensitive match that's run. >>> >>> My question is... Should I fix these so the case sensitive match works >>> and runs first or just remove the first loop so the match is always >>> case-insensitive? I'm hoping the latter not only because it makes the >>> code simpler but because that's how it's worked for years and suddenly >>> making the match case sensitive might cause unexpected problems. >>> >>> Thoughts? >>> >>> Forgot to mention...There are other places in the code where the >> comparison is always case-insensitive. >> > > I was under the impression that the code was done this way > initially to avoid doing a string comparison. Though, I'm not > sure avoiding the string comparison really buys much in the > way of performance anyway. > > Another reason is if you have several sections named [foo] > and you need to resume with the same [foo] section as last > time. > > Richard > > This works only in ast_category_browse where the pointer you're passing in is almost always a pointer you received from the last call to ast_category_browse. It's almost never going to work in ast_category_get because you're probably passing in a constant or a pointer to some other memory location housing the name.
-- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- asterisk-dev mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/asterisk-dev
