]> git.ipfire.org Git - pakfire.git/commitdiff
pakfire: Catch errors when loading distro information
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 18 Oct 2024 15:31:36 +0000 (15:31 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 18 Oct 2024 15:31:36 +0000 (15:31 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/pakfire.c

index 4ca2e01c16b41b3bcb6f8e3d64a0d2973ad181e8..8f2c203fa5bc541e27029410f5ff7c09e3c17d8b 100644 (file)
@@ -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;
 }