[PATCH v2 1/3] dtc: Refactor character literal parsing code

Anton Staaf robotboy at google.com
Fri Sep 9 02:06:13 EST 2011


On Wed, Sep 7, 2011 at 8:22 PM, David Gibson
<david at gibson.dropbear.id.au> wrote:
> On Wed, Sep 07, 2011 at 04:15:38PM -0700, Anton Staaf wrote:
>> Move the parsing of hex, octal and escaped characters from data.c
>> to util.c where it can be used for character literal parsing within
>> strings as well as for stand alone C style character literals.
>
> [snip]
>> +char get_oct_char(const char *s, int *i)
>
> Probably make these static, since I can't really see a use for them
> other than in the escape processing code.

Yup, will do.

>> +{
>> +     char x[4];
>> +     char *endx;
>> +     long val;
>> +
>> +     x[3] = '\0';
>> +     strncpy(x, s + *i, 3);
>> +
>> +     val = strtol(x, &endx, 8);
>> +
>> +     assert(endx > x);
>> +
>> +     (*i) += endx - x;
>> +     return val;
>> +}
>> +
>> +char get_hex_char(const char *s, int *i)
>> +{
>> +     char x[3];
>> +     char *endx;
>> +     long val;
>> +
>> +     x[2] = '\0';
>> +     strncpy(x, s + *i, 2);
>> +
>> +     val = strtol(x, &endx, 16);
>> +     if (!(endx  > x))
>> +             die("\\x used with no following hex digits\n");
>> +
>> +     (*i) += endx - x;
>> +     return val;
>> +}
>> +
>> +char get_escape_char(const char *s, int *i)
>
> Yes, splitting this function off is quite nice.
>
> [snip]
>> +char get_escape_char_exact(const char *s, int len)
>> +{
>> +     int     j = 1; //skip intial "\"
>> +     char    c = get_escape_char(s, &j);
>> +
>> +     if (j != len)
>> +             die("Extra characters at end of character literal '%s' "
>> +                 "(%d != %d)\n", s, j, len);
>> +
>> +     return c;
>> +}
>
> This I'm not a fan of.  Handling erroneous input with a die() in a
> low-level helper like this is pretty nasty (I know there are other
> instances of it).  I'd prefer to see the action handling the error in
> the caller though, where it's better equipped to know a reasonable way
> of informing the user.

Can do, this behavior was copied from another _exact function, I'll
switch to doing the check in the parser rule.

Thanks,
    Anton

> Some more on error handling in comments on your next patch.
>
> --
> David Gibson                    | I'll have my music baroque, and my code
> david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
>                                | _way_ _around_!
> http://www.ozlabs.org/~dgibson
>


More information about the devicetree-discuss mailing list