PAKFIRE_PKG_VENDOR,
PAKFIRE_PKG_DISTRO,
PAKFIRE_PKG_MAINTAINER,
+ PAKFIRE_PKG_FILENAME,
};
int pakfire_package_create(struct pakfire_package** package, struct pakfire* pakfire,
enum pakfire_digest_types* type, size_t* length);
int pakfire_package_set_digest(struct pakfire_package* pkg,
enum pakfire_digest_types type, const unsigned char* digest, const size_t length);
-const char* pakfire_package_get_filename(struct pakfire_package* pkg);
const char* pakfire_package_get_path(struct pakfire_package* pkg);
void pakfire_package_set_path(struct pakfire_package* pkg, const char* path);
-void pakfire_package_set_filename(struct pakfire_package* pkg, const char* filename);
int pakfire_package_is_installed(struct pakfire_package* pkg);
size_t pakfire_package_get_downloadsize(struct pakfire_package* pkg);
void pakfire_package_set_downloadsize(struct pakfire_package* pkg, size_t downloadsize);
}
}
+// Removes epoch
+static const char* evr2vr(const char* evr) {
+ const char* p = evr;
+
+ // Skip any leading digits
+ for (; *p >= '0' && *p <= '9'; p++);
+
+ // If after the leading digits, we found :, we return the rest of the string
+ if (p != evr && *p == ':')
+ return ++p;
+
+ return evr;
+}
+
+static const char* pakfire_package_make_filename(struct pakfire_package* pkg) {
+ int r;
+
+ if (!*pkg->filename) {
+ const char* name = pakfire_package_get_string(pkg, PAKFIRE_PKG_NAME);
+ const char* evr = pakfire_package_get_string(pkg, PAKFIRE_PKG_EVR);
+ const char* arch = pakfire_package_get_string(pkg, PAKFIRE_PKG_ARCH);
+
+ if (!name || !evr || !arch)
+ return NULL;
+
+ const char* vr = evr2vr(evr);
+ if (!vr)
+ return NULL;
+
+ r = pakfire_string_format(pkg->filename, "%s-%s.%s.pfm", name, vr, arch);
+ if (r)
+ return NULL;
+ }
+
+ return pkg->filename;
+}
+
PAKFIRE_EXPORT const char* pakfire_package_get_string(
struct pakfire_package* pkg, const enum pakfire_package_key key) {
const char* ret = NULL;
case PAKFIRE_PKG_MAINTAINER:
ret = solvable_lookup_str(s, SOLVABLE_PACKAGER);
break;
+
+ case PAKFIRE_PKG_FILENAME:
+ ret = solvable_lookup_str(s, SOLVABLE_MEDIAFILE);
+
+ // Generate the filename if not set
+ if (!ret)
+ ret = pakfire_package_make_filename(pkg);
+ break;
}
return ret;
case PAKFIRE_PKG_MAINTAINER:
id = SOLVABLE_PACKAGER;
break;
+
+ case PAKFIRE_PKG_FILENAME:
+ id = SOLVABLE_MEDIAFILE;
+ break;
}
// Check if we have found a valid ID
}
static int pakfire_package_make_cache_path(struct pakfire_package* pkg) {
- const char* filename = pakfire_package_get_filename(pkg);
+ const char* filename = pakfire_package_get_string(pkg, PAKFIRE_PKG_FILENAME);
enum pakfire_digest_types digest_type = PAKFIRE_DIGEST_UNDEFINED;
size_t digest_length = 0;
if (!*pkg->path) {
const char* base = pakfire_package_get_string(pkg, SOLVABLE_MEDIABASE);
if (base) {
- const char* filename = pakfire_package_get_filename(pkg);
+ const char* filename = pakfire_package_get_string(pkg, PAKFIRE_PKG_FILENAME);
if (!filename)
return NULL;
pakfire_string_set(pkg->path, path);
}
-// Removes epoch
-static const char* evr2vr(const char* evr) {
- const char* p = evr;
-
- // Skip any leading digits
- for (; *p >= '0' && *p <= '9'; p++);
-
- // If after the leading digits, we found :, we return the rest of the string
- if (p != evr && *p == ':')
- return ++p;
-
- return evr;
-}
-
-static const char* pakfire_package_make_filename(struct pakfire_package* pkg) {
- if (!*pkg->filename) {
- const char* name = pakfire_package_get_string(pkg, PAKFIRE_PKG_NAME);
- const char* evr = pakfire_package_get_string(pkg, PAKFIRE_PKG_EVR);
- const char* arch = pakfire_package_get_string(pkg, PAKFIRE_PKG_ARCH);
-
- if (!name || !evr || !arch)
- return NULL;
-
- const char* vr = evr2vr(evr);
-
- pakfire_string_format(pkg->filename, "%s-%s.%s.pfm", name, vr, arch);
- }
-
- return pkg->filename;
-}
-
-PAKFIRE_EXPORT const char* pakfire_package_get_filename(struct pakfire_package* pkg) {
- const char* filename = pakfire_package_get_string(pkg, SOLVABLE_MEDIAFILE);
-
- // Generate the filename if not set
- if (!filename)
- filename = pakfire_package_make_filename(pkg);
-
- return filename;
-}
-
-PAKFIRE_EXPORT void pakfire_package_set_filename(struct pakfire_package* pkg, const char* filename) {
- pakfire_package_set_string(pkg, SOLVABLE_MEDIAFILE, filename);
-}
-
PAKFIRE_EXPORT int pakfire_package_is_installed(struct pakfire_package* pkg) {
Pool* pool = pakfire_get_solv_pool(pkg->pakfire);
Solvable* s = get_solvable(pkg);