static int handle_argument(const char *var, const char *val, struct cmdarg *cmdargs) { // compare var against array of recognized arguments for(int i = 0; cmdargs[i].arg != NULL; i++) { struct cmdarg *a = &cmdargs[i]; if(!strncmp(var, a->arg, strlen(a->arg))) { switch(a->type) { case ArgType_Int: return handle_int(a->var.integer, val); case ArgType_UInt: return handle_uint(a->var.uinteger, val); case ArgType_Bool: return handle_bool(a->var.boolean, val); case ArgType_Custom: return a->var.handler(var, val); default: assert(!"Unknown type %d in kernel argument array!"); return -1; } } } return 0; }
ssize_t handle_binary(char **format, va_list *args, t_arg *arg) { uintmax_t nbr; (void)format; nbr = get_unsigned_from_length(args, arg); return (handle_uint(nbr, arg, "01", "0b")); }