Re: [PATCH 17/28] attr: expose validity check for attribute names

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Oct 11, 2016 at 10:28 AM, Brandon Williams <bmwill@xxxxxxxxxx> wrote:
> On 10/10, Stefan Beller wrote:
>> From: Junio C Hamano <gitster@xxxxxxxxx>
>> -static int invalid_attr_name(const char *name, int namelen)
>> +int attr_name_valid(const char *name, size_t namelen)
>>  {
>>       /*
>>        * Attribute name cannot begin with '-' and must consist of
>>        * characters from [-A-Za-z0-9_.].
>>        */
>>       if (namelen <= 0 || *name == '-')
>> -             return -1;
>> +             return 0;
>>       while (namelen--) {
>>               char ch = *name++;
>>               if (! (ch == '-' || ch == '.' || ch == '_' ||
>>                      ('0' <= ch && ch <= '9') ||
>>                      ('a' <= ch && ch <= 'z') ||
>>                      ('A' <= ch && ch <= 'Z')) )
>> -                     return -1;
>> +                     return 0;
>>       }
>> -     return 0;
>> +     return -1;
>> +}
>
> Whats the reason behind returning -1 for a valid attr name vs 1?
>

Usually we prefer negative values for errors, whereas 0,1,2...
is used for actual return values.

If you're not really interested in the value, but rather "does it work at all?"
you can use it via

    if (function() < 0)
        die_errno("function has error");

Otherwise you'd do a

    int value = function();
    if (value < 0)
        die(...);

    switch(value) {
    default:
    case 0:
        doZeroThing(); break;
    case 1:
        doOtherThing();
    }

At first I thought the two different return path for -1 are different
error classes (one being just a minor error compared to the other),
but they are not, so having the same code there makes sense.

So I think we could change it to +1 in this instance, as a non zero
value would just indicate the attr name is not valid, but not necessarily
an error.



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]