From: Michael Tremer Date: Fri, 16 Apr 2021 15:06:12 +0000 (+0000) Subject: pakfire: Read distro configuration from file X-Git-Tag: 0.9.28~1285^2~346 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9ee15ddb473186cbc174ec33c92a8cad976fcd87;p=pakfire.git pakfire: Read distro configuration from file Signed-off-by: Michael Tremer --- diff --git a/contrib/config/distros/ipfire3.conf b/contrib/config/distros/ipfire3.conf index 25edb3b6e..f0eb8c4aa 100644 --- a/contrib/config/distros/ipfire3.conf +++ b/contrib/config/distros/ipfire3.conf @@ -2,14 +2,15 @@ # Configuration of IPFire 3. [distro] -name = IPFire -release = 3 -slogan = An Open Source Firewall Solution. +name = IPFire +id = ipfire +version_id = 3 +codename = -vendor = IPFire Project -contact = ipfire-3@ipfire.org +vendor = IPFire Project +slogan = An Open Source Firewall Solution -source_dl = https://source.ipfire.org/source-3.x/ +source_dl = https://source.ipfire.org/source-3.x/ [repo:stable] description = IPFire 3 - Stable repository. diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index dbedffc0f..4792305a9 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -86,8 +86,9 @@ struct _Pakfire { char pretty_name[256]; char name[64]; char id[32]; - char version[32]; - char version_id[32]; + char version[64]; + char version_codename[32]; + char version_id[8]; } distro; }; @@ -396,6 +397,45 @@ static int pakfire_safety_checks(Pakfire pakfire) { return 0; } +static int pakfire_config_import_distro(Pakfire pakfire) { + // 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); + + // ID + const char* id = pakfire_config_get(pakfire->config, "distro", "id", NULL); + if (id) + pakfire_string_set(pakfire->distro.id, id); + + // 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); + + // Codename + const char* codename = pakfire_config_get(pakfire->config, "distro", "codename", NULL); + if (codename) + pakfire_string_set(pakfire->distro.version_codename, codename); + + // 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); + + // Fill in pretty name + pakfire_string_format(pakfire->distro.pretty_name, "%s %s", + pakfire->distro.name, pakfire->distro.version); + + return 0; +} + static int pakfire_read_config(Pakfire pakfire, const char* path) { char* default_path = NULL; @@ -424,6 +464,11 @@ static int pakfire_read_config(Pakfire pakfire, const char* path) { if (r) goto ERROR; + // Import distro configuration + r = pakfire_config_import_distro(pakfire); + if (r) + goto ERROR; + ERROR: fclose(f); @@ -484,6 +529,8 @@ static int pakfire_read_os_release(Pakfire pakfire) { r = pakfire_string_set(pakfire->distro.id, val); else if (strcmp(key, "VERSION") == 0) r = pakfire_string_set(pakfire->distro.version, val); + else if (strcmp(key, "VERSION_CODENAME") == 0) + r = pakfire_string_set(pakfire->distro.version_codename, val); else if (strcmp(key, "VERSION_ID") == 0) r = pakfire_string_set(pakfire->distro.version_id, val); else