summaryrefslogtreecommitdiff
path: root/osinfo
diff options
context:
space:
mode:
authorChristophe Fergeau <cfergeau@redhat.com>2012-12-07 12:31:39 +0100
committerChristophe Fergeau <cfergeau@redhat.com>2012-12-21 11:44:28 +0100
commit72f00ce4673d1f3cc18f8dddd73f75a2a05a306a (patch)
treeb3c9e28284cfa6c759566fa6e0ff47517728e490 /osinfo
parent36e5364c1a3e67f8656bfd2db570717b5d2e6e15 (diff)
OsinfoInstallConfig: Use config-params if set
Now that OsinfoInstallConfig has a 'config-params' property which describes the config parameters when it's set, we can use it when it's available. OsinfoInstallConfigParams can indeed contain a datamap to be used to translate generic libosinfo values to OS-specific values. This commit introduces an osinfo_install_config_get_param_value_list method that will be used in subsequent commits to get these OS-specific values when generating install scripts.
Diffstat (limited to 'osinfo')
-rw-r--r--osinfo/osinfo_install_config.c50
-rw-r--r--osinfo/osinfo_install_config_private.h1
2 files changed, 51 insertions, 0 deletions
diff --git a/osinfo/osinfo_install_config.c b/osinfo/osinfo_install_config.c
index a77317b..e912441 100644
--- a/osinfo/osinfo_install_config.c
+++ b/osinfo/osinfo_install_config.c
@@ -737,6 +737,56 @@ OsinfoInstallConfigParamList *osinfo_install_config_get_config_params(OsinfoInst
return config->priv->config_params;
}
+
+static OsinfoDatamap *
+osinfo_install_config_get_param_datamap(OsinfoInstallConfig *config,
+ const gchar *param_name)
+{
+ OsinfoEntity *entity;
+ OsinfoInstallConfigParam *param;
+
+ if (!config->priv->config_params)
+ return NULL;
+
+ entity = osinfo_list_find_by_id(OSINFO_LIST(config->priv->config_params),
+ param_name);
+ if (entity == NULL) {
+ g_debug("%s is not a known parameter for this config", param_name);
+ return NULL;
+ }
+
+ param = OSINFO_INSTALL_CONFIG_PARAM(entity);;
+ return osinfo_install_config_param_get_value_map(param);
+}
+
+
+GList *
+osinfo_install_config_get_param_value_list(OsinfoInstallConfig *config,
+ const gchar *key)
+{
+ GList *values;
+ GList *it;
+ OsinfoDatamap *map;
+
+ values = osinfo_entity_get_param_value_list(OSINFO_ENTITY(config), key);
+ if (values == NULL)
+ return NULL;
+
+ map = osinfo_install_config_get_param_datamap(config, key);
+ if (map != NULL) {
+ for (it = values; it != NULL; it = it->next) {
+ const char *transformed_value;
+ transformed_value = osinfo_datamap_lookup(map, it->data);
+ if (transformed_value == NULL) {
+ continue;
+ }
+ it->data = (gpointer)transformed_value;
+ }
+ }
+
+ return values;
+}
+
/*
* Local variables:
* indent-tabs-mode: nil
diff --git a/osinfo/osinfo_install_config_private.h b/osinfo/osinfo_install_config_private.h
index 5a1edd3..5ad2162 100644
--- a/osinfo/osinfo_install_config_private.h
+++ b/osinfo/osinfo_install_config_private.h
@@ -28,6 +28,7 @@
void osinfo_install_config_set_config_params(OsinfoInstallConfig *config,
OsinfoInstallConfigParamList *config_params);
+GList *osinfo_install_config_get_param_value_list(OsinfoInstallConfig *config, const gchar *key);
#endif /* __OSINFO_INSTALL_CONFIG_PRIVATE_H__ */
/*