[asterisk-dev] Opinions Needed: Case sensitivity in config file section names

George Joseph george.joseph at fairview5.com
Tue Sep 23 12:42:08 CDT 2014


On Tue, Sep 23, 2014 at 10:05 AM, Richard Mudgett <rmudgett at digium.com>
wrote:

>
>
> On Tue, Sep 23, 2014 at 10:51 AM, George Joseph <
> george.joseph at fairview5.com> wrote:
>
>> On Tue, Sep 23, 2014 at 9:45 AM, George Joseph <
>> george.joseph at fairview5.com> 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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20140923/c2240b00/attachment-0001.html>


More information about the asterisk-dev mailing list