From 05433bcbe81a2d3ce41361a0e519b2c22875e0bf Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 18 Oct 2024 15:31:36 +0000 Subject: [PATCH] pakfire: Catch errors when loading distro information Signed-off-by: Michael Tremer --- src/libpakfire/pakfire.c | 83 +++++++++++++++++++++++++++++++--------- 1 file changed, 64 insertions(+), 19 deletions(-) diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index 4ca2e01c1..8f2c203fa 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -587,50 +587,95 @@ const char* pakfire_get_distro_tag(struct pakfire* pakfire) { } static int pakfire_config_import_distro(struct pakfire* pakfire) { + int r; + // Nothing to do if there is no distro section if (!pakfire_config_has_section(pakfire->config, "distro")) return 0; // Name const char* name = pakfire_config_get(pakfire->config, "distro", "name", NULL); - if (name) - pakfire_string_set(pakfire->distro.name, name); + if (name) { + r = pakfire_string_set(pakfire->distro.name, name); + if (r < 0) { + CTX_ERROR(pakfire->ctx, "Could not set distro name: %s\n", strerror(-r)); + return r; + } + } // ID const char* id = pakfire_config_get(pakfire->config, "distro", "id", NULL); - if (id) - pakfire_string_set(pakfire->distro.id, id); + if (id) { + r = pakfire_string_set(pakfire->distro.id, id); + if (r < 0) { + CTX_ERROR(pakfire->ctx, "Could not set distro ID: %s\n", strerror(-r)); + return r; + } + } // Version ID const char* version_id = pakfire_config_get(pakfire->config, "distro", "version_id", NULL); - if (version_id) - pakfire_string_set(pakfire->distro.version_id, version_id); + if (version_id) { + r = pakfire_string_set(pakfire->distro.version_id, version_id); + if (r < 0) { + CTX_ERROR(pakfire->ctx, "Could not set distro version ID: %s\n", strerror(-r)); + return r; + } + } // Codename const char* codename = pakfire_config_get(pakfire->config, "distro", "codename", NULL); - if (codename) - pakfire_string_set(pakfire->distro.version_codename, codename); + if (codename) { + r = pakfire_string_set(pakfire->distro.version_codename, codename); + if (r < 0) { + CTX_ERROR(pakfire->ctx, "Could not set distro codename: %s\n", strerror(-r)); + return r; + } + } // Fill in version - if (*pakfire->distro.version_codename) - pakfire_string_format(pakfire->distro.version, "%s (%s)", - pakfire->distro.version_id, pakfire->distro.version_codename); - else - pakfire_string_set(pakfire->distro.version, pakfire->distro.version_id); + if (*pakfire->distro.version_codename) { + r = pakfire_string_format(pakfire->distro.version, "%s (%s)", + pakfire->distro.version_id, pakfire->distro.version_codename); + if (r < 0) { + CTX_ERROR(pakfire->ctx, "Could not set distro version: %s\n", strerror(-r)); + return r; + } + } else { + r = pakfire_string_set(pakfire->distro.version, pakfire->distro.version_id); + if (r < 0) { + CTX_ERROR(pakfire->ctx, "Could not set distro version: %s\n", strerror(-r)); + return r; + } + } // Fill in pretty name - pakfire_string_format(pakfire->distro.pretty_name, "%s %s", - pakfire->distro.name, pakfire->distro.version); + r = pakfire_string_format(pakfire->distro.pretty_name, "%s %s", + pakfire->distro.name, pakfire->distro.version); + if (r < 0) { + CTX_ERROR(pakfire->ctx, "Could not set distro pretty name: %s\n", strerror(-r)); + return r; + } // Vendor const char* vendor = pakfire_config_get(pakfire->config, "distro", "vendor", NULL); - if (vendor) - pakfire_string_set(pakfire->distro.vendor, vendor); + if (vendor) { + r = pakfire_string_set(pakfire->distro.vendor, vendor); + if (r < 0) { + CTX_ERROR(pakfire->ctx, "Could not set distro vendor: %s\n", strerror(-r)); + return r; + } + } // Slogan const char* slogan = pakfire_config_get(pakfire->config, "distro", "slogan", NULL); - if (slogan) - pakfire_string_set(pakfire->distro.slogan, slogan); + if (slogan) { + r = pakfire_string_set(pakfire->distro.slogan, slogan); + if (r < 0) { + CTX_ERROR(pakfire->ctx, "Could not set distro slogan: %s\n", strerror(-r)); + return r; + } + } return 0; } -- 2.39.5