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. --- I've now removed the GOnce hash, this makes the code simpler, but quite different from what was reviewed, resending just this patch for a quick review. Christophe osinfo/osinfo_install_config.c | 50 ++++++++++++++++++++++++++++++++++ osinfo/osinfo_install_config_private.h | 1 + 2 files changed, 51 insertions(+) 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__ */ /* -- 1.8.0.2 _______________________________________________ Libosinfo mailing list Libosinfo@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libosinfo