> What I wanted to get:
> * set of options accepted by fs and syntax of their arguments
> should be visible in source. Explicitly.
> * no cascades of strcmp/strncmp/peeking at individual characters
> by hands.
Yay! You still have the switch() though, and ugly enums.
Since the kernel is tied to gcc anyway, one might as well...
int foofs_parser(/* ... */){
static match_table_t tokens = {
{&&Opt_uid, "uid=%u"},
{&&Opt_gid, "gid=%u"},
{&&Opt_ownmask, "ownmask=%o"},
{&&Opt_othmask, "othmask=%o"},
{&&Opt_err, NULL}
};
/* ... */
while(( p=whatever() ){
goto *(match_token(p, tokens, args)); /* gcc's computed goto */
Opt_uid:
/* code for uid */
continue;
Opt_gid:
/* code for gid */
continue;
Opt_ownmask:
/* code for ownmask */
continue;
Opt_othmask:
/* code for othmask */
continue;
Opt_err:
/* error code */
}
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/