General Public License for more details.
*/
-#include "includes.h"
-#include <errno.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
+#include <stdio.h>
#include "hash_table.h"
#include "pkg.h"
#include "pkg_hash.h"
#include "pkg_parse.h"
#include "opkg_utils.h"
+#include "sprintf_alloc.h"
+#include "file_util.h"
#include "libbb/libbb.h"
void
continue;
}
- if (!pkg->architecture) {
+ if (!pkg->architecture || !pkg->arch_priority) {
char *version_str = pkg_version_str_alloc(pkg);
- opkg_msg(ERROR, "Package %s version %s has no "
- "architecture specified, ignoring.\n",
+ opkg_msg(NOTICE, "Package %s version %s has no "
+ "valid architecture, ignoring.\n",
pkg->name, version_str);
free(version_str);
continue;
return ret;
}
+/*
+ * Load in feed files from the cached "src" and/or "src/gz" locations.
+ */
+int
+pkg_hash_load_feeds(void)
+{
+ pkg_src_list_elt_t *iter;
+ pkg_src_t *src;
+ char *list_file, *lists_dir;
+
+ opkg_msg(INFO, "\n");
+
+ lists_dir = conf->restrict_to_default_dest ?
+ conf->default_dest->lists_dir : conf->lists_dir;
+
+ for (iter = void_list_first(&conf->pkg_src_list); iter;
+ iter = void_list_next(&conf->pkg_src_list, iter)) {
+
+ src = (pkg_src_t *)iter->data;
+
+ sprintf_alloc(&list_file, "%s/%s", lists_dir, src->name);
+
+ if (file_exists(list_file)) {
+ if (pkg_hash_add_from_file(list_file, src, NULL, 0)) {
+ free(list_file);
+ return -1;
+ }
+ }
+ free(list_file);
+ }
+
+ return 0;
+}
+
+/*
+ * Load in status files from the configured "dest"s.
+ */
+int
+pkg_hash_load_status_files(void)
+{
+ pkg_dest_list_elt_t *iter;
+ pkg_dest_t *dest;
+
+ opkg_msg(INFO, "\n");
+
+ for (iter = void_list_first(&conf->pkg_dest_list); iter;
+ iter = void_list_next(&conf->pkg_dest_list, iter)) {
+
+ dest = (pkg_dest_t *)iter->data;
+
+ if (file_exists(dest->status_file_name)) {
+ if (pkg_hash_add_from_file(dest->status_file_name, NULL, dest, 1))
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
static abstract_pkg_t *
abstract_pkg_fetch_by_name(const char * pkg_name)
{
int (*constraint_fcn)(pkg_t *pkg, void *cdata),
void *cdata, int quiet)
{
- int i;
+ int i, j;
int nprovides = 0;
int nmatching = 0;
int wrong_arch_found = 0;
int max_count = 0;
/* count packages matching max arch priority and keep track of last one */
- for (i = 0; i < vec->len; i++) {
- pkg_t *maybe = vec->pkgs[i];
+ for (j=0; j<vec->len; j++) {
+ pkg_t *maybe = vec->pkgs[j];
opkg_msg(DEBUG, "%s arch=%s arch_priority=%d version=%s.\n",
maybe->name, maybe->architecture,
maybe->arch_priority, maybe->version);
pkg_t *
file_hash_get_file_owner(const char *file_name)
{
- return hash_table_get(&conf->file_hash, file_name);
+ if (conf->offline_root) {
+ unsigned int len = strlen(conf->offline_root);
+ if (strncmp(file_name, conf->offline_root, len) == 0) {
+ file_name += len;
+ }
+ }
+
+ return hash_table_get(&conf->file_hash, file_name);
}
void