X-Git-Url: https://git.librecmc.org/?p=oweals%2Fopkg-lede.git;a=blobdiff_plain;f=libopkg%2Fopkg_install.c;h=a76322d12358aa45ca8bf89374e0b37ec5c0459d;hp=a67129e5fb2bdf49fa8c21db963bba8e83fcaeb3;hb=4c22d4a7b34aeea993310a65c6c4c15a15df5646;hpb=f0fe187f841a29675317835723c3591b149fdeb1 diff --git a/libopkg/opkg_install.c b/libopkg/opkg_install.c index a67129e..a76322d 100644 --- a/libopkg/opkg_install.c +++ b/libopkg/opkg_install.c @@ -86,9 +86,6 @@ int opkg_install_from_file(opkg_conf_t *conf, const char *filename) char *old_version, *new_version; pkg = pkg_new(); - if (pkg == NULL) { - return ENOMEM; - } err = pkg_init_from_file(pkg, filename); if (err) { @@ -206,6 +203,8 @@ opkg_error_t opkg_install_by_name(opkg_conf_t *conf, const char *pkg_name) } else if (cmp < 0) { new->dest = old->dest; old->state_want = SW_DEINSTALL; /* Here probably the problem for bug 1277 */ + free(old_version); + free(new_version); } } @@ -581,14 +580,13 @@ static int pkg_remove_orphan_dependent(opkg_conf_t *conf, pkg_t *pkg, pkg_t *old int i, j, found; char *buf, *d_str; pkg_t *p; + if (!old_pkg) return 0; - if (!pkg) { - fprintf(stderr, "pkg shall not be NULL here. please send to the bugzilla!! [%s %d]\n", __FILE__, __LINE__); - return -1; - } + if (old_pkg->depends_count == 0) return 0; + for (i=0;idepends_count;i++) { found = 0; for (j=0;jdepends_count;j++) { @@ -684,12 +682,6 @@ int pkg_remove_installed_replacees_unwind(opkg_conf_t *conf, pkg_vec_t *replacee return 0; } -int caught_sigint = 0; -static void opkg_install_pkg_sigint_handler(int sig) -{ - caught_sigint = sig; -} - /* compares versions of pkg and old_pkg, returns 0 if OK to proceed with installation of pkg, 1 otherwise */ static int opkg_install_check_downgrade(opkg_conf_t *conf, pkg_t *pkg, pkg_t *old_pkg, int message) { @@ -914,6 +906,9 @@ int opkg_install_pkg(opkg_conf_t *conf, pkg_t *pkg, int from_upgrade) if (conf->nodeps == 0) { err = satisfy_dependencies_for(conf, pkg); if (err) { return OPKG_INSTALL_ERR_DEPENDENCIES; } + if (pkg->state_status == SS_UNPACKED) + /* Circular dependency has installed it for us. */ + return 0; } replacees = pkg_vec_alloc(); @@ -922,16 +917,10 @@ int opkg_install_pkg(opkg_conf_t *conf, pkg_t *pkg, int from_upgrade) /* this next section we do with SIGINT blocked to prevent inconsistency between opkg database and filesystem */ { sigset_t newset, oldset; - sighandler_t old_handler = NULL; - int use_signal = 0; - caught_sigint = 0; - if (use_signal) { - old_handler = signal(SIGINT, opkg_install_pkg_sigint_handler); - } else { - sigemptyset(&newset); - sigaddset(&newset, SIGINT); - sigprocmask(SIG_BLOCK, &newset, &oldset); - } + + sigemptyset(&newset); + sigaddset(&newset, SIGINT); + sigprocmask(SIG_BLOCK, &newset, &oldset); opkg_state_changed++; pkg->state_flag |= SF_FILELIST_CHANGED; @@ -1025,10 +1014,7 @@ int opkg_install_pkg(opkg_conf_t *conf, pkg_t *pkg, int from_upgrade) opkg_message(conf, OPKG_INFO, "Done.\n"); - if (use_signal) - signal(SIGINT, old_handler); - else - sigprocmask(SIG_UNBLOCK, &newset, &oldset); + sigprocmask(SIG_UNBLOCK, &newset, &oldset); pkg_vec_free (replacees); return 0; @@ -1054,10 +1040,8 @@ int opkg_install_pkg(opkg_conf_t *conf, pkg_t *pkg, int from_upgrade) opkg_message(conf, OPKG_INFO, "Failed.\n"); - if (use_signal) - signal(SIGINT, old_handler); - else - sigprocmask(SIG_UNBLOCK, &newset, &oldset); + + sigprocmask(SIG_UNBLOCK, &newset, &oldset); pkg_vec_free (replacees); return OPKG_ERR_UNKNOWN;