char *old_version, *new_version;
pkg = pkg_new();
- if (pkg == NULL) {
- return ENOMEM;
- }
err = pkg_init_from_file(pkg, filename);
if (err) {
} 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);
}
}
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;i<old_pkg->depends_count;i++) {
found = 0;
for (j=0;j<pkg->depends_count;j++) {
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)
{
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();
/* 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;
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;
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;
return 0;
}
-static int remove_obsolete_maintainer_scripts(opkg_conf_t *conf, pkg_t *pkg, pkg_t *old_pkg)
-{
- int i;
- int err = 0;
- char *globpattern;
- glob_t globbuf;
- if (0) {
- if (!pkg->dest) {
- opkg_message(conf, OPKG_ERROR, "%s: no dest for package %s\n", __FUNCTION__, pkg->name);
- return -1;
- }
- sprintf_alloc(&globpattern, "%s/%s.*", pkg->dest->info_dir, pkg->name);
- err = glob(globpattern, 0, NULL, &globbuf);
- free(globpattern);
- if (err) {
- return err;
- }
- /* XXXX this should perhaps only remove the ones that are not overwritten in new package. Jamey 11/11/2003 */
- for (i = 0; i < globbuf.gl_pathc; i++) {
- opkg_message(conf, OPKG_DEBUG, "Removing control file %s from old_pkg %s\n",
- globbuf.gl_pathv[i], old_pkg->name);
- if (!conf->noaction)
- unlink(globbuf.gl_pathv[i]);
- }
- globfree(&globbuf);
- }
- return err;
-}
-
static int install_maintainer_scripts(opkg_conf_t *conf, pkg_t *pkg, pkg_t *old_pkg)
{
int ret;
char *prefix;
- if (old_pkg)
- remove_obsolete_maintainer_scripts(conf, pkg, old_pkg);
sprintf_alloc(&prefix, "%s.", pkg->name);
ret = pkg_extract_control_files_to_dir_with_prefix(pkg,
pkg->dest->info_dir,