/* opkg_hash.c - the opkg package management system
Steven M. Ayer
-
+
Copyright (C) 2002 Compaq Computer Corporation
This program is free software; you can redistribute it and/or
/* Each entry in the hash table is an abstract package, which contains
* a list of packages that provide the abstract package.
*/
-
+
ab_pkg = (abstract_pkg_t*) entry;
if (ab_pkg->pkgs) {
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 (replacement_apkg)
- opkg_msg(DEBUG, "replacement_apkg=%s for provider_apkg=%s.\n",
+ opkg_msg(DEBUG, "replacement_apkg=%s for provider_apkg=%s.\n",
replacement_apkg->name, provider_apkg->name);
if (replacement_apkg && (replacement_apkg != provider_apkg)) {
provider_apkg->name);
continue;
}
-
+
/* now check for supported architecture */
{
opkg_msg(DEBUG, "%s arch=%s arch_priority=%d version=%s.\n",
maybe->name, maybe->architecture,
maybe->arch_priority, maybe->version);
- /* We make sure not to add the same package twice. Need to search for the reason why
+ /* We make sure not to add the same package twice. Need to search for the reason why
they show up twice sometimes. */
if ((maybe->arch_priority > 0) && (! pkg_vec_contains(matching_pkgs, maybe))) {
max_count++;
good_pkg_by_name = matching;
/* It has been provided by hand, so it is what user want */
if (matching->provided_by_hand == 1)
- break;
+ break;
}
}
matching->name, prio);
}
}
-
+
}
if (conf->verbosity >= INFO && matching_apkgs->len > 1) {
abstract_pkg_vec_free(matching_apkgs);
abstract_pkg_vec_free(providers);
- if (good_pkg_by_name) { /* We found a good candidate, we will install it */
+ if (good_pkg_by_name) { /* We found a good candidate, we will install it */
return good_pkg_by_name;
}
if (held_pkg) {
if (strcmp(pkg->name, name) == 0)
return 1;
else
- return 0;
+ return 0;
}
static pkg_vec_t *
pkg_vec_t * vec;
int i;
char *version_str = NULL;
-
+
if(!(vec = pkg_vec_fetch_by_name(pkg_name)))
return NULL;
-
+
for(i = 0; i < vec->len; i++) {
version_str = pkg_version_str_alloc(vec->pkgs[i]);
if(!strcmp(version_str, version)) {
if(i == vec->len)
return NULL;
-
+
return vec->pkgs[i];
}
pkg->parent = ab_pkg;
}
+static const char *
+strip_offline_root(const char *file_name)
+{
+ unsigned int len;
+
+ if (conf->offline_root) {
+ len = strlen(conf->offline_root);
+ if (strncmp(file_name, conf->offline_root, len) == 0)
+ file_name += len;
+ }
+
+ return file_name;
+}
+
+void
+file_hash_remove(const char *file_name)
+{
+ file_name = strip_offline_root(file_name);
+ hash_table_remove(&conf->file_hash, file_name);
+}
pkg_t *
file_hash_get_file_owner(const char *file_name)
{
- return hash_table_get(&conf->file_hash, file_name);
+ file_name = strip_offline_root(file_name);
+ return hash_table_get(&conf->file_hash, file_name);
}
void
if (file_name[file_name_len -1] == '/')
return;
- if (conf->offline_root) {
- unsigned int len = strlen(conf->offline_root);
- if (strncmp(file_name, conf->offline_root, len) == 0) {
- file_name += len;
- }
- }
+ file_name = strip_offline_root(file_name);
- hash_table_insert(&conf->file_hash, file_name, owning_pkg);
+ hash_table_insert(&conf->file_hash, file_name, owning_pkg);
if (old_owning_pkg) {
pkg_get_installed_files(old_owning_pkg);