rem: free(opts[i].value); opts[i].value = strdup(eq+1);
add: g_free(opts[i].value); opts[i].value = g_strdup(eq+1);
context: static int process_option(char *arg, struct opt opts[], int case_sensitive){    int i;    char *eq = strchr(arg, '=');    if (eq)        *eq = '\0';    for (i = 0; opts[i].optname != NULL; i++) {        if (case_sensitive) {            if (strcmp(opts[i].optname, arg) == 0)                break;        } else if (strcasecmp(opts[i].optname, arg) == 0)            break;    }    if (opts[i].optname == NULL) {        if (eq)            *eq = '=';        return 0;    }    opts[i].present = 1;    if (eq) {        if (opts[i].value)            free(opts[i].value);        opts[i].value = strdup(eq+1);    }    return 1;}