return parse_option(current, optarg, negate);
return parse_option(current, style, optarg, argc, argv, next, negate);
arg_match_long(struct getargs *args,	       char **argv, int style, int *next){    char *optarg = NULL;    int negate = 0;    int partial_match = 0;    struct getargs *partial = NULL;    struct getargs *current = NULL;    struct getargs *arg;    int argv_len;    char *p, *q;    if (style & ARG_LONGARG) {	q = *argv + 2;	*next = 0;    } else if (style & ARG_TRANSLONG) {	q = *argv + 1;	*next = 0;    } else {	*next = 0;	q = *argv;    }    argv_len = strlen(q);    p = strchr (q, '=');    if (p != NULL)	argv_len = p - q;    for (arg = args; arg->type ; arg++) {	if(arg->long_name) {	    int len = strlen(arg->long_name);	    char *p = q;	    int p_len = argv_len;	    negate = 0;	    for (;;) {		if (strncmp (arg->long_name, p, len) == 0) {		    current = arg;		    if (style & ARG_TRANSLONG) {			if (ISFLAG(arg)) {			    optarg = "";			    *next = 0;			} else if (*(argv +1)) {			    optarg = *(argv + 1);			    *next = 1;			} else			    optarg = "";		    } else if(p[len] == '\0')			optarg = p + len;		    else			optarg = p + len + 1;		} else if (strncmp (arg->long_name,				    p,				    p_len) == 0) {		    ++partial_match;		    partial = arg;		    if (style & ARG_TRANSLONG) {			if (ISFLAG(arg)) {			    optarg = "";			    *next = 0;			} else if (*(argv + 1)) {			    optarg = *(argv + 1);			    *next = 1;			} else			    optarg = "";		    } else			optarg  = p + p_len +1 ;		} else if (ISFLAG(arg) && strncmp (p, "no-", 3) == 0) {		    negate = !negate;		    p += 3;		    p_len -= 3;		    continue;		}		break;	    }	    if (current)		break;	}    }    if (current == NULL) {	if (partial_match == 1)	    current = partial;	else	    return ARG_ERR_NO_MATCH;    }    if(*optarg == '\0' && !ISFLAG(current))	return ARG_ERR_NO_MATCH;    return parse_option(current, optarg, negate);}