param_type = EXTCAP_PARAM_FILE_MUSTEXIST;
} else if (g_ascii_strcasecmp(arg, "fileext") == 0) {
param_type = EXTCAP_PARAM_FILE_EXTENSION;
+ } else if (g_ascii_strcasecmp(arg, "group") == 0) {
+ param_type = EXTCAP_PARAM_GROUP;
} else if (g_ascii_strcasecmp(arg, "name") == 0) {
param_type = EXTCAP_PARAM_NAME;
} else if (g_ascii_strcasecmp(arg, "enabled") == 0) {
param_type = EXTCAP_PARAM_ENABLED;
} else if (g_ascii_strcasecmp(arg, "parent") == 0) {
param_type = EXTCAP_PARAM_PARENT;
+ } else if (g_ascii_strcasecmp(arg, "reload") == 0) {
+ param_type = EXTCAP_PARAM_RELOAD;
} else if (g_ascii_strcasecmp(arg, "required") == 0) {
param_type = EXTCAP_PARAM_REQUIRED;
} else if (g_ascii_strcasecmp(arg, "save") == 0) {
g_free(a->placeholder);
g_free(a->fileextension);
g_free(a->regexp);
+ g_free(a->group);
g_free(a->device_name);
if (a->range_start != NULL)
}
void extcap_free_arg_list(GList *a) {
- g_list_foreach(a, (GFunc)extcap_free_arg, NULL);
- g_list_free(a);
+ g_list_free_full(a, (GDestroyNotify)extcap_free_arg);
}
static gint glist_find_numbered_arg(gconstpointer listelem, gconstpointer needle) {
g_list_free(sentences);
}
+static extcap_value *extcap_parse_value_sentence(extcap_token_sentence *s) {
+ extcap_value *value = NULL;
+ gchar *param_value = NULL;
+
+ int tint = 0;
+
+ if (s == NULL)
+ return value;
+
+ if (g_ascii_strcasecmp(s->sentence, "value") == 0) {
+
+ if ((param_value = (gchar *)g_hash_table_lookup(s->param_list, ENUM_KEY(EXTCAP_PARAM_ARG)))
+ == NULL) {
+ printf("no arg in VALUE sentence\n");
+ return NULL;
+ }
+
+ if (sscanf(param_value, "%d", &tint) != 1) {
+ printf("invalid arg in VALUE sentence\n");
+ return NULL;
+ }
+
+ value = g_new0(extcap_value, 1);
+ value->arg_num = tint;
+
+ if ((param_value = (gchar *)g_hash_table_lookup(s->param_list, ENUM_KEY(EXTCAP_PARAM_VALUE)))
+ == NULL) {
+ /* printf("no value in VALUE sentence\n"); */
+ extcap_free_value(value);
+ return NULL;
+ }
+ value->call = g_strdup(param_value);
+
+ if ((param_value = (gchar *)g_hash_table_lookup(s->param_list, ENUM_KEY(EXTCAP_PARAM_DISPLAY)))
+ == NULL) {
+ /* printf("no display in VALUE sentence\n"); */
+ extcap_free_value(value);
+ return NULL;
+ }
+ value->display = g_strdup(param_value);
+
+ if ((param_value = (gchar *)g_hash_table_lookup(s->param_list, ENUM_KEY(EXTCAP_PARAM_PARENT)))
+ != NULL) {
+ value->parent = g_strdup(param_value);
+ }
+
+ if ((param_value = (gchar *)g_hash_table_lookup(s->param_list, ENUM_KEY(EXTCAP_PARAM_DEFAULT)))
+ != NULL) {
+ /* printf("found default value\n"); */
+ value->is_default = g_regex_match_simple(EXTCAP_BOOLEAN_REGEX, param_value, G_REGEX_CASELESS, (GRegexMatchFlags)0);
+ }
+
+ if ((param_value = (gchar *)g_hash_table_lookup(s->param_list, ENUM_KEY(EXTCAP_PARAM_ENABLED)))
+ != NULL) {
+ value->enabled = g_regex_match_simple(EXTCAP_BOOLEAN_REGEX, param_value, G_REGEX_CASELESS, (GRegexMatchFlags)0);
+ }
+ }
+
+ return value;
+}
+
static extcap_arg *extcap_parse_arg_sentence(GList *args, extcap_token_sentence *s) {
gchar *param_value = NULL;
extcap_arg *target_arg = NULL;
extcap_value *value = NULL;
GList *entry = NULL;
- int tint;
+
extcap_sentence_type sent = EXTCAP_SENTENCE_UNKNOWN;
if (s == NULL)
target_arg->regexp = g_strdup(param_value);
}
+ if ((param_value = (gchar *)g_hash_table_lookup(s->param_list, ENUM_KEY(EXTCAP_PARAM_GROUP)))
+ != NULL) {
+ target_arg->group = g_strdup(param_value);
+ }
+
if ((param_value = (gchar *)g_hash_table_lookup(s->param_list, ENUM_KEY(EXTCAP_PARAM_REQUIRED)))
!= NULL) {
target_arg->is_required = g_regex_match_simple(EXTCAP_BOOLEAN_REGEX, param_value, G_REGEX_CASELESS, (GRegexMatchFlags)0);
target_arg->save = g_regex_match_simple(EXTCAP_BOOLEAN_REGEX, param_value, G_REGEX_CASELESS, (GRegexMatchFlags)0);
}
+ if ((param_value = (gchar *)g_hash_table_lookup(s->param_list, ENUM_KEY(EXTCAP_PARAM_RELOAD)))
+ != NULL) {
+ target_arg->reload = g_regex_match_simple(EXTCAP_BOOLEAN_REGEX, param_value, G_REGEX_CASELESS, (GRegexMatchFlags)0);
+ }
+
if ((param_value = (gchar *)g_hash_table_lookup(s->param_list, ENUM_KEY(EXTCAP_PARAM_RANGE)))
!= NULL) {
gchar *cp = g_strstr_len(param_value, -1, ",");
}
} else if (sent == EXTCAP_SENTENCE_VALUE) {
- if ((param_value = (gchar *)g_hash_table_lookup(s->param_list, ENUM_KEY(EXTCAP_PARAM_ARG)))
- == NULL) {
- printf("no arg in VALUE sentence\n");
- return NULL;
- }
-
- if (sscanf(param_value, "%d", &tint) != 1) {
- printf("invalid arg in VALUE sentence\n");
- return NULL;
- }
-
- if ((entry = g_list_find_custom(args, &tint, glist_find_numbered_arg))
- == NULL) {
- printf("couldn't find arg %d in list for VALUE sentence\n", tint);
- return NULL;
- }
-
- value = g_new0(extcap_value, 1);
- value->arg_num = tint;
+ value = extcap_parse_value_sentence(s);
- if ((param_value = (gchar *)g_hash_table_lookup(s->param_list, ENUM_KEY(EXTCAP_PARAM_VALUE)))
- == NULL) {
- /* printf("no value in VALUE sentence\n"); */
- extcap_free_value(value);
- return NULL;
- }
- value->call = g_strdup(param_value);
-
- if ((param_value = (gchar *)g_hash_table_lookup(s->param_list, ENUM_KEY(EXTCAP_PARAM_DISPLAY)))
+ if ((entry = g_list_find_custom(args, &value->arg_num, glist_find_numbered_arg))
== NULL) {
- /* printf("no display in VALUE sentence\n"); */
- extcap_free_value(value);
+ printf("couldn't find arg %d in list for VALUE sentence\n", value->arg_num);
return NULL;
}
- value->display = g_strdup(param_value);
-
- if ((param_value = (gchar *)g_hash_table_lookup(s->param_list, ENUM_KEY(EXTCAP_PARAM_PARENT)))
- != NULL) {
- value->parent = g_strdup(param_value);
- }
-
- if ((param_value = (gchar *)g_hash_table_lookup(s->param_list, ENUM_KEY(EXTCAP_PARAM_DEFAULT)))
- != NULL) {
- /* printf("found default value\n"); */
- value->is_default = g_regex_match_simple(EXTCAP_BOOLEAN_REGEX, param_value, G_REGEX_CASELESS, (GRegexMatchFlags)0);
- }
-
- if ((param_value = (gchar *)g_hash_table_lookup(s->param_list, ENUM_KEY(EXTCAP_PARAM_ENABLED)))
- != NULL) {
- value->enabled = g_regex_match_simple(EXTCAP_BOOLEAN_REGEX, param_value, G_REGEX_CASELESS, (GRegexMatchFlags)0);
- }
((extcap_arg *) entry->data)->values = g_list_append(
((extcap_arg *) entry->data)->values, value);
return result;
}
+GList *extcap_parse_values(gchar *output) {
+ GList *result = NULL;
+ GList *walker = NULL;
+ GList *temp = NULL;
+
+ walker = extcap_tokenize_sentences(output);
+ temp = walker;
+
+ while (walker) {
+ extcap_value *ra = NULL;
+ extcap_token_sentence *sentence = (extcap_token_sentence *)walker->data;
+
+ if ((ra = extcap_parse_value_sentence(sentence)) != NULL)
+ result = g_list_append(result, (gpointer) ra);
+
+ walker = g_list_next(walker);
+ }
+
+ extcap_free_tokenized_sentences(temp);
+
+ return result;
+}
+
static extcap_interface *extcap_parse_interface_sentence(extcap_token_sentence *s) {
extcap_sentence_type sent = EXTCAP_SENTENCE_UNKNOWN;
gchar *param_value = NULL;