On Fri, Jun 06, 2014 at 12:24:06PM +0100, Emil Velikov wrote:
> On 06/06/14 07:25, Chad Versace wrote:
> > On Sat, May 31, 2014 at 03:22:03AM +0100, Emil Velikov wrote:
> >> Whenever a platform is missing a case statement, the default will
> >> kick in throwing an error and exiting the function.
> > 
> > Ah, but that's not what 'found_platform' is checking for...
> > 
> >> -    if (!found_platform) {
> >> -        wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
> >> -                     "attribute list is missing WAFFLE_PLATFORM");
> >> -        return false;
> >> -    }
> > 
> > ... waffle_init() uses 'found_platform' to check if the user provided
> > WAFFLE_PLATFORM.
> > 
> AFAICS that is handled by the "default" switch case.
> 
> > I admit that waffle_init_parse_attrib_list() is a clumsily written
> > function. It was one of the very first functions in Waffle's codebase.
> > 
> IMHO the code bails out if we've missed (partially or fully) any platform
> and/or if the user has provided a invalid WAFFLE_PLATFORM. Thus we will reach
> the if (!found_platform)... only when the variable is already set (via the
> CASE_DEFINED_PLATFORM macro).
> 
> Perhaps this code is targeting some elaborate use-case which I'm failing to
> see here?

I think you're failing to see the use-case because it's extremely
*unelaborate*.

This block...

    if (!found_platform) {
        wcore_errorf(WAFFLE_ERROR_BAD_ATTRIBUTE,
                     "attribute list is missing WAFFLE_PLATFORM");
        return false;
    }

... catches the case when the user supplies *no* attribute. That is, it
catches these three erroneous cases:

    waffle_init(NULL);
    waffle_init((int32_t[]){});
    waffle_init((int32_t[]){0});

In other words, 'found_platform' detects when codeflow altogether skips
the switch statement.
_______________________________________________
waffle mailing list
waffle@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/waffle

Reply via email to