General Public License for more details.
*/
-#include "config.h"
-
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void pkg_deinit(pkg_t * pkg)
{
+ int rem;
+ struct blob_attr *cur;
compound_depend_t *deps, *dep;
+ void *ptr;
if (pkg->name)
free(pkg->name);
pkg->state_flag = SF_OK;
pkg->state_status = SS_NOT_INSTALLED;
- deps = pkg_get_ptr(pkg, PKG_DEPENDS);
+ blob_for_each_attr(cur, pkg->blob.head, rem) {
+ switch (blob_id(cur)) {
+ case PKG_DEPENDS:
+ case PKG_CONFLICTS:
+ deps = pkg_get_ptr(pkg, blob_id(cur));
- if (deps) {
- for (dep = deps; dep->type; dep++)
- compound_depend_deinit(dep);
+ if (deps) {
+ for (dep = deps; dep->type; dep++)
+ compound_depend_deinit(dep);
- free(deps);
- pkg_set_ptr(pkg, PKG_DEPENDS, NULL);
- }
+ free(deps);
+ }
+
+ pkg_set_ptr(pkg, blob_id(cur), NULL);
+ break;
- deps = pkg_get_ptr(pkg, PKG_CONFLICTS);
+ case PKG_REPLACES:
+ case PKG_PROVIDES:
+ ptr = pkg_get_ptr(pkg, blob_id(cur));
- if (deps) {
- for (dep = deps; dep->type; dep++)
- compound_depend_deinit(dep);
+ if (ptr)
+ free(ptr);
+
+ pkg_set_ptr(pkg, blob_id(cur), NULL);
+ break;
- free(deps);
- pkg_set_ptr(pkg, PKG_CONFLICTS, NULL);
+ case PKG_CONFFILES:
+ ptr = pkg_get_ptr(pkg, blob_id(cur));
+
+ if (ptr) {
+ conffile_list_deinit(ptr);
+ free(ptr);
+ }
+
+ pkg_set_ptr(pkg, blob_id(cur), NULL);
+ break;
+ }
}
//conffile_list_deinit(&pkg->conffiles);
pkg_free_installed_files(pkg);
pkg->essential = 0;
- //blob_buf_free(&pkg->blob);
+ blob_buf_free(&pkg->blob);
}
int pkg_init_from_file(pkg_t * pkg, const char *filename)
pkg_init(pkg);
+ if (!(pkg->state_flag & SF_NEED_DETAIL)) {
+ opkg_msg(DEBUG, "applying abpkg flag to %s\n", filename);
+ pkg->state_flag |= SF_NEED_DETAIL;
+ }
+
pkg_set_string(pkg, PKG_LOCAL_FILENAME, filename);
tmp = xstrdup(filename);
if (!ab || !ab[0] || !ab[1]) {
pkg_set_ptr(oldpkg, PKG_PROVIDES, pkg_get_ptr(newpkg, PKG_PROVIDES));
pkg_set_ptr(newpkg, PKG_PROVIDES, NULL);
+
+ if (ab)
+ free(ab);
}
if (!pkg_get_ptr(oldpkg, PKG_CONFLICTS)) {
ab_pkg = pkg_get_ptr(pkg, PKG_PROVIDES);
if (ab_pkg && ab_pkg[0] && ab_pkg[1]) {
fprintf(fp, "Provides:");
- for (i = 0, ab_pkg++; *ab_pkg; i++, ab_pkg++) {
- fprintf(fp, "%s %s", i == 0 ? "" : ",",
- (*ab_pkg)->name);
- ab_pkg++;
+ for (i = 1; ab_pkg[i]; i++) {
+ fprintf(fp, "%s %s", i == 1 ? "" : ",",
+ ab_pkg[i]->name);
}
fprintf(fp, "\n");
}
if (p) {
fprintf(fp, "Section: %s\n", p);
}
-#if defined HAVE_SHA256
} else if (strcasecmp(field, "SHA256sum") == 0) {
p = pkg_get_string(pkg, PKG_SHA256SUM);
if (p) {
fprintf(fp, "SHA256sum: %s\n", p);
}
-#endif
} else if (strcasecmp(field, "Size") == 0) {
i = pkg_get_int(pkg, PKG_SIZE);
if (i) {