char path[PATH_MAX];
};
-static int pakfire_package_add_self_provides(struct pakfire* pakfire,
- struct pakfire_package* pkg, const char* name, const char* evr) {
- char* buffer = NULL;
+static Solvable* get_solvable(struct pakfire_package* pkg) {
+ Pool* pool = pakfire_get_solv_pool(pkg->pakfire);
+
+ return pool_id2solvable(pool, pkg->id);
+}
+
+static int pakfire_package_dep2id(const enum pakfire_package_key key,
+ Id* id, Id* marker) {
+ switch (key) {
+ case PAKFIRE_PKG_PROVIDES:
+ *id = SOLVABLE_PROVIDES;
+ *marker = -SOLVABLE_FILEMARKER;
+ break;
+
+ case PAKFIRE_PKG_PREREQUIRES:
+ *id = SOLVABLE_REQUIRES;
+ *marker = SOLVABLE_PREREQMARKER;
+ break;
+
+ case PAKFIRE_PKG_REQUIRES:
+ *id = SOLVABLE_REQUIRES;
+ *marker = -SOLVABLE_PREREQMARKER;
+ break;
+
+ case PAKFIRE_PKG_CONFLICTS:
+ *id = SOLVABLE_CONFLICTS;
+ break;
+
+ case PAKFIRE_PKG_OBSOLETES:
+ *id = SOLVABLE_OBSOLETES;
+ break;
+
+ case PAKFIRE_PKG_RECOMMENDS:
+ *id = SOLVABLE_RECOMMENDS;
+ break;
+
+ case PAKFIRE_PKG_SUGGESTS:
+ *id = SOLVABLE_SUGGESTS;
+ break;
+
+ case PAKFIRE_PKG_SUPPLEMENTS:
+ *id = SOLVABLE_SUPPLEMENTS;
+ break;
+
+ case PAKFIRE_PKG_ENHANCES:
+ *id = SOLVABLE_ENHANCES;
+ break;
+
+ // This operation is not possible for any other types
+ default:
+ errno = EINVAL;
+ return 1;
+ }
+
+ return 0;
+}
+
+static int pakfire_package_add_depid(struct pakfire_package* pkg,
+ const enum pakfire_package_key key, Id dep) {
+ Solvable* s = get_solvable(pkg);
int r;
- // Format the relation
- r = asprintf(&buffer, "%s = %s", name, evr);
- if (r < 0)
+ Id id = ID_NULL;
+ Id marker = ID_NULL;
+
+ // Translate the dependency type
+ r = pakfire_package_dep2id(key, &id, &marker);
+ if (r)
return r;
- // Add it to the package
- r = pakfire_package_add_dep(pkg, PAKFIRE_PKG_PROVIDES, buffer);
+ // Append to the dependency array
+ solvable_add_deparray(s, id, dep, marker);
- free(buffer);
+ return 0;
+}
- return r;
+static int pakfire_package_add_self_provides(struct pakfire_package* pkg) {
+ // Fetch the solvable
+ Solvable* s = get_solvable(pkg);
+ if (!s)
+ return 1;
+
+ // Get the self-provides ID
+ Id dep = solvable_selfprovidedep(s);
+
+ // Add it to the package
+ return pakfire_package_add_depid(pkg, PAKFIRE_PKG_PROVIDES, dep);
}
int pakfire_package_create_from_solvable(struct pakfire_package** package,
}
// Add self-provides
- r = pakfire_package_add_self_provides(pakfire, *package, name, evr);
+ r = pakfire_package_add_self_provides(*package);
if (r) {
ERROR(pakfire, "Could not create self-provides: %m\n");
goto ERROR;
return pakfire_ref(pkg->pakfire);
}
-static Solvable* get_solvable(struct pakfire_package* pkg) {
- Pool* pool = pakfire_get_solv_pool(pkg->pakfire);
-
- return pool_id2solvable(pool, pkg->id);
-}
-
PAKFIRE_EXPORT int pakfire_package_eq(struct pakfire_package* pkg1, struct pakfire_package* pkg2) {
return pkg1->id == pkg2->id;
}
// Dependencies
-static int pakfire_package_dep2id(const enum pakfire_package_key key,
- Id* id, Id* marker) {
- switch (key) {
- case PAKFIRE_PKG_PROVIDES:
- *id = SOLVABLE_PROVIDES;
- *marker = -SOLVABLE_FILEMARKER;
- break;
-
- case PAKFIRE_PKG_PREREQUIRES:
- *id = SOLVABLE_REQUIRES;
- *marker = SOLVABLE_PREREQMARKER;
- break;
-
- case PAKFIRE_PKG_REQUIRES:
- *id = SOLVABLE_REQUIRES;
- *marker = -SOLVABLE_PREREQMARKER;
- break;
-
- case PAKFIRE_PKG_CONFLICTS:
- *id = SOLVABLE_CONFLICTS;
- break;
-
- case PAKFIRE_PKG_OBSOLETES:
- *id = SOLVABLE_OBSOLETES;
- break;
-
- case PAKFIRE_PKG_RECOMMENDS:
- *id = SOLVABLE_RECOMMENDS;
- break;
-
- case PAKFIRE_PKG_SUGGESTS:
- *id = SOLVABLE_SUGGESTS;
- break;
-
- case PAKFIRE_PKG_SUPPLEMENTS:
- *id = SOLVABLE_SUPPLEMENTS;
- break;
-
- case PAKFIRE_PKG_ENHANCES:
- *id = SOLVABLE_ENHANCES;
- break;
-
- // This operation is not possible for any other types
- default:
- errno = EINVAL;
- return 1;
- }
-
- return 0;
-}
-
PAKFIRE_EXPORT char** pakfire_package_get_deps(struct pakfire_package* pkg,
const enum pakfire_package_key key) {
Solvable* s = get_solvable(pkg);
int pakfire_package_add_dep(struct pakfire_package* pkg,
const enum pakfire_package_key key, const char* dep) {
- Solvable* s = get_solvable(pkg);
- int r;
-
- Id id = ID_NULL;
- Id marker = ID_NULL;
-
- r = pakfire_package_dep2id(key, &id, &marker);
- if (r)
- return r;
-
// Parse the dependency
- Id depid = pakfire_str2dep(pkg->pakfire, dep);
+ Id id = pakfire_str2dep(pkg->pakfire, dep);
// Silently ignore any invalid dependencies
- if (!depid)
+ if (!id)
return 0;
- // Append to the dependency array
- solvable_add_deparray(s, id, depid, marker);
-
- return 0;
+ return pakfire_package_add_depid(pkg, key, id);
}
PAKFIRE_EXPORT int pakfire_package_get_reverse_requires(struct pakfire_package* pkg,