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);
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 */
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;
# #
#############################################################################*/
+#include <errno.h>
#include <linux/limits.h>
#include <stdlib.h>
#include <string.h>
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;
}