From: Michael Tremer Date: Tue, 27 Apr 2021 12:38:00 +0000 (+0000) Subject: package: Refactor pakfire_package_join_evr and make it private X-Git-Tag: 0.9.28~1285^2~216 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e42b5960aaecfe2b88720190e4bfe8b17179adc2;p=pakfire.git package: Refactor pakfire_package_join_evr and make it private Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/include/pakfire/package.h b/src/libpakfire/include/pakfire/package.h index 2e3f1dfe1..ee6f51bd5 100644 --- a/src/libpakfire/include/pakfire/package.h +++ b/src/libpakfire/include/pakfire/package.h @@ -44,7 +44,6 @@ const char* pakfire_package_get_name(PakfirePackage pkg); void pakfire_package_set_name(PakfirePackage pkg, const char* name); const char* pakfire_package_get_evr(PakfirePackage pkg); void pakfire_package_set_evr(PakfirePackage pkg, const char* evr); -char* pakfire_package_join_evr(const char* e, const char* v, const char* r); const char* pakfire_package_get_arch(PakfirePackage pkg); void pakfire_package_set_arch(PakfirePackage pkg, const char* arch); @@ -155,6 +154,8 @@ PakfirePackage pakfire_package_create_from_solvable(Pakfire pakfire, Id id); Id pakfire_package_id(PakfirePackage pkg); int pakfire_package_is_source(PakfirePackage pkg); +char* pakfire_package_join_evr(const char* e, const char* v, const char* r); + #endif #endif /* PAKFIRE_PACKAGE_H */ diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index c25038730..b430d38cb 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -195,7 +195,6 @@ global: pakfire_package_get_uuid; pakfire_package_get_vendor; pakfire_package_is_installed; - pakfire_package_join_evr; pakfire_package_ref; pakfire_package_set_arch; pakfire_package_set_build_host; diff --git a/src/libpakfire/package.c b/src/libpakfire/package.c index cb1d64317..fd370d464 100644 --- a/src/libpakfire/package.c +++ b/src/libpakfire/package.c @@ -18,6 +18,7 @@ # # #############################################################################*/ +#include #include #include #include @@ -231,21 +232,29 @@ PAKFIRE_EXPORT void pakfire_package_set_evr(PakfirePackage pkg, const char* evr) s->evr = pool_str2id(pool, evr, 1); } -PAKFIRE_EXPORT char* pakfire_package_join_evr(const char* e, const char* v, const char* r) { - size_t l = strlen(v) + strlen(r) + 2; +char* pakfire_package_join_evr(const char* e, const char* v, const char* r) { + char* buffer = NULL; - // Do not include epoch when it is zero - if (strncmp(e, "0", strlen("0")) == 0) { - e = NULL; - } else { - l += strlen(e); + // Check for valid input + if (!e || !v || !r) { + errno = EINVAL; + return NULL; } - char* buffer = malloc(l + 1); - if (e) - snprintf(buffer, l + 1, "%s:%s-%s", e, v, r); - else - snprintf(buffer, l + 1, "%s-%s", v, r); + // Skip any zeroes in epoch + while (*e && *e == '0') + e++; + + // Format string with epoch + if (*e) { + if (asprintf(&buffer, "%s:%s-%s", e, v, r) < 0) + return NULL; + + // Or format it without epoch + } else { + if (asprintf(&buffer, "%s-%s", v, r) < 0) + return NULL; + } return buffer; }