summaryrefslogtreecommitdiff
path: root/main/junk
diff options
context:
space:
mode:
Diffstat (limited to 'main/junk')
-rw-r--r--main/junk398
1 files changed, 398 insertions, 0 deletions
diff --git a/main/junk b/main/junk
new file mode 100644
index 000000000..d5f060d24
--- /dev/null
+++ b/main/junk
@@ -0,0 +1,398 @@
+if (!strcmp(newpig.name,"dpkg"))
+fprintf(stderr,"flags %o recordavailable %o config %s|%s ver %s|%s stat %d\n",
+ flags,pdb_recordavailable,newpig.configversion,newpig.configrevision,
+ newpifp->version,newpifp->revision,newpig.status);
+
+
+ if (pkg->want != want_install && f_alsoselect) {
+ printf("Selecting previously deselected package %s.\n",pkg->name);
+ pkg->want= want_install;
+ } else if (pkg->want == want_unknown && pkg->priority <= pri_standard &&
+ fc_autoselect) {
+ printf("Package %s is %s, selecting it by default.\n",pkg->name,
+ priorityinfos[pkg->priority].name);
+ pkg->want= want_install;
+ } else if (pkg->want != want_install) {
+ printf("Skipping deselected package %s.\n",pkg->name);
+ pop_cleanup(ehflag_normaltidy);
+ return;
+ }
+
+
+
+int terminate_catchsignallist[]= { SIGINT, SIGTERM, 0 };
+int noterminal_catchsignallist[]= { SIGHUP, SIGPIPE, 0 };
+
+volatile int quitting= 0;
+
+static void terminate_sighandler(void) {
+
+
+void terminate_catchsignals(void) {
+ int i;
+ struct sigaction catchsig;
+
+ catchsig.sa_handler= terminate_signalhandler;
+ sigemptyset(&catchsig.sa_mask);
+ for (i=0; terminate_catchsignallist[i]; i++)
+ sigaddset(&catchsig.sa_mask,terminate_catchsignallist[i]);
+ for (i=0; noterminal_catchsignallist[i]; i++)
+ sigaddset(&catchsig.sa_mask,noterminal_catchsignallist[i]);
+ catchsig.sa_flags= 0;
+
+ for (i=0; terminate_catchsignallist[i]; i++)
+ if (sigaction(terminate_catchsignallist[i],&catchsig,0))
+ ohshite("unable to set up signal handler for %s",
+ strsignal(terminate_catchsignallist[i]));
+
+ catchsig.sa_handler= noterminal_signalhandler;
+
+ for (i=0; noterminal_catchsignallist[i]; i++)
+ if (sigaction(noterminal_catchsignallist[i],&catchsig,0))
+ ohshite("unable to set up signal handler for %s",
+ strsignal(noterminal_catchsignallist[i]));
+}
+
+
+
+#!/bin/sh -
+
+set -e
+
+cd /var/lib/dpkg
+
+# This won't check for unpacked packages if we're upgrading
+# from a *really* old dpkg, but they probably didn't do
+# conffiles right anyway.
+perl -000 -ne 'print $1 if m/^Package:\s+(\S+\n)/im &&
+ $1 ne "dpkg\n" &&
+ m/^Status:.*unpacked/im' \
+ /var/lib/dpkg/status >/tmp/bp.$$
+if test -s /tmp/bp.$$
+then
+ echo '
+WARNING -- SOME PACKAGES IN "UNPACKED" STATE
+
+Due to a change in the filenames used for installed vs. newly-distributed
+configuration files it is NOT SAFE to upgrade to this version of dpkg
+from
+
+
+ undef %hash; @configfr= @configf= ();
+ for $_ (split(/\n/,$st_pk2v{$package,'conffiles'})) {
+ s/^ //; next unless length($_);
+ if (!m/^(\S+) (-|newconffile|nonexistent|[0-9a-f]{32})$/) {
+ &warn("$arg: ignoring bad stuff in old conffiles field \`$_'");
+ next;
+ }
+ unshift(@configfr,$1); push(@configf,$1);
+ $hash{$1}= $2;
+ }
+
+
+
+ undef %oldhash; @configf=();
+ for $_ (split(/\n/,$st_pk2v{$package,'conffiles'})) {
+ s/^ //; next unless length($_);
+ if (!m/^(\S+) (-|newconffile|nonexistent|[0-9a-f]{32})$/) {
+ &warn("$arg: ignoring bad stuff in old conffiles field \`$_'");
+ next;
+ }
+ $oldhash{$1}= $2; push(@configf,$1);
+ &debug("old hash of $1 is $2");
+ }
+ undef %newhash;
+
+
+
+ fextract= fdopen(p1[0],"r");
+
+ varbufinit(&thisname);
+ while ((c= fgetc(fextract)) != EOF) {
+ if (c != '\n') {
+ varbufaddc(&thisdirname,c);
+ continue;
+ }
+ varbufaddc(&thisdirname,0);
+ /* Right, this next part gets done for each file (or directory) in the
+ * archive of the new version of the package:
+ */
+ thisfile= filedatarecord(&filedata,thisname.buf);
+ thisfile->nstat= ifdnew_inarchive;
+ varbufreset(&thisname);
+ }
+ if (ferror(fextract)) ohshite("failed read from " BACKEND " extract pipe");
+ if (thisname.used) ohshit("partial filename in output from " BACKEND " extract");
+ if (fclose(fextract)) ohshite("failed to close" BACKEND " extract pipe");
+ waitsubproc(c1,BACKEND " extract archive",0);
+
+ /* Save new file list, new conffiles &c */
+
+ if (chdir(instdir)) ohshite("unable to change to installation root directory"
+ " for archive extract `%.250s'",instdir);
+ execlp(BACKEND, BACKEND,"--control",filename,cidir,(char*)0);
+ ohshite("failed to exec " BACKEND " to extract control information");
+
+ /*** continue here ***/
+
+void remove_with_backup(pkginfo *pkg, struct installingfiledata **ifdlisthead) {
+ if (f_noact) {
+ printf("(would back up files in `%s', renaming each * to *" DPKGTEMPEXT ")\n",
+ pkg->name);
+ return;
+ }
+ filesinpackagerev(pkg, &filelist);
+ for (barefile= filelist; barefile; barefile= barefile->next) {
+ thisfile= filedatarecord(ifdlisthead,barefile->name);
+ initostat(thisfile);
+ if (thisfile->ncoff) continue;
+
+ switch (thisfile->ostat) {
+ case ifdold_directory:
+ push_cleanup(, co_olddirectory, ...);
+ break;
+
+ case ifdold_none:
+ break;
+
+ case ifdold_file:
+ l= strlen(barefile->name);
+ toremove= m_malloc(instdirlen + l + 1);
+ strcpy(toremove,instdir); strcpy(toremove+instdirlen,barefile->name);
+ tempname= m_malloc(instdirlen + l + sizeof(DPKGTEMPEXT) + 1);
+ strcpy(tempname,toremove); strcpy(tempname+instdirlen+l,DPKGTEMPEXT);
+ ename= toremove + instdirlen;
+ tename= tempname + instdirlen;
+
+ if (rename(toremove.buf, tempname.buf))
+ ohshite("unable to back up file-to-be-removed `%.250s'", tename);
+ push_cleanup(cu_backupfile, co_backupfile,
+ ..., toremove,tempname);
+ break;
+
+ default:
+ abort();
+ }
+ }
+}
+
+ case ifdold_directory:
+ for (inwhich= findfile(toremove); inwhich; inwhich= inwhich->more)
+ for (pkgsp= inwhich->pkgs; *pkgsp; pkgsp++)
+ switch ((*pkgsp)->clientdata->istobe) {
+ case itb_normal:
+ goto exit_both_loops_and_the_switch_at_once;
+ case itb_remove:
+ case itb_installnew:
+ /* We're removing or replacing this package, so that doesn't count.
+ * For packages that we replace the caller will remove the directories
+ * in the new version from the list of those to delete.
+ */
+ break;
+ default:
+ abort();
+ }
+ exit_both_loops_and_the_switch_at_once:
+
+ if (!inwhich) { /* Find it anywhere else ? */
+ struct fileinlist newdir;
+ newdir= m_malloc(sizeof(struct fileinlist));
+ newdir->name= m_malloc(strlen(ename));
+ strcpy((*addirs)->name,ename);
+ newdir->next= 0;
+ *adddirs= newdir;
+ adddirs= &newdir->next;
+ }
+ free(tempname); free(toremove);
+ continue;
+ }
+
+
+
+ l= strlen(pkg->name);
+ infdir= m_malloc(admindirlen + sizeof(INFODIR) + l + 50);
+ strcpy(infdir,admindir);
+ strcpy(infdir+admindirlen,"/" INFODIR);
+ strcpy(infdir+admindirlen+sizeof(INFODIR), pkg->name);
+ infdir[admindirlen+sizeof(INFODIR)+l-1]= '.';
+ infdirrest= infdir + admindirlen+sizeof(INFODIR)+l;
+ strcpy(infdirrest, LISTFILE);
+ strcpy(infdirrest+sizeof(LISTFILE)-1,".new");
+
+ for (thisfile= filelist; thisfile; thisfile= thisfile->next) {
+ for (thisconff= conflictor->installed.conffiles;
+ thisconff && strcmp(thisconff->name,thisfile->name);
+ thisconff= thisconff->next);
+ if (thisconff) continue;
+ varbufreset(&toremove);
+ varbufaddstr(&toremove, instdir);
+ varbufaddstr(&toremove, "/");
+ ename= toremove.buf + toremove.used;
+ varbufaddstr(&toremove, thisfile->name);
+ varbufaddc(&toremove, 0);
+ if (unlink(toremove.buf)) {
+ if (errno == EISDIR) {
+ if (rmdir(toremove.buf) && errno != ENOTEMPTY)
+ ohshite("%.250s: cannot remove directory `%.250s'",
+ conflictor->name, ename);
+ } else if (errno != ENOENT) {
+ ohshite("%.250s: cannot remove `%.250s'", conflictor->name, ename);
+ }
+ }
+ varbufaddstr(&toremove, DPKGTEMPEXT);
+ varbufaddc(&toremove, 0);
+ if (unlink(toremove.buf) && errno != ENOENT)
+ ohshite("%.250s: cannot remove old backup file `%.250s'",
+ conflictor->name, ename);
+ }
+
+
+ if (versionsatisfied(possi, &possi->ed.installed, &whynot)) present=1;
+ *const relatestrings[]= { "may be more useful with", "recommends",
+ "requires", "conflicts with", "provides" },
+
+
+ if (possi
+
+
+ varbufaddstr(&why, dep->up->name);
+ return 1;
+ }
+ }
+ varbufaddstr(&why, dep->up->name);
+ return 1;
+ }
+
+ ||
+ dep->up
+ questionstatus=
+ questionstatus= dep->up->clientdata->istobe ==
+ if (up->
+
+,
+ if (questionstatus->status == stat_notinstalled ||
+ questionstatus->status == stat_configfiles) return 0;
+ switch (dep->type) {
+ case dep_conflicts: reln= " conflicts with "; break;
+ case dep_depends: reln= " depends on "; break;
+ default: return 1;
+ }
+
+ varbufaddstr(whynot, dep->up->name);
+ varbufaddstr(whynot, reln);
+ reln= " ";
+
+ for (possi= dep->list; possi; possi= possi->next) {
+ varbufaddstr(whynot, reln);
+ varbufaddstr(whynot, possi->ed->name);
+ switch (possi->verrel) {
+ case dvr_none: reln= 0; break;
+ case dvr_later: reln= " (>"; break;
+ case dvr_earlier: reln= " (<"; break;
+ case dvr_exact: reln= " (="; break;
+ default: abort();
+ }
+ if (reln) {
+ varbufaddstr(whynot, reln);
+ varbufaddstr(whynot, possi->version);
+ if (possi->revision && *possi->revision) {
+ varbufaddc(whynot,'-');
+ varbufaddstr(whynot,possi->revision);
+ }
+ varbufaddc(whynot,')');
+ }
+ reln= " or ";
+ } }
+ }
+
+ if (!*linebuf) {
+ /* If the package wasn't installed at all, and we haven't said
+ * yet why this isn't satisfied, we should say so now.
+ */
+ sprintf(linebuf, " %.250s is not installed.\n", possi->ed->name);
+ varbufaddstr(whynot, linebuf);
+ }
+ }
+ }
+ /* OK so far - now check for Providers. */
+
+ /* Don't say anything about this yet - it might be a virtual package.
+ * Later on, if nothing has put anything in linebuf, we know that it
+ * isn't and issue a diagnostic then.
+ */
+ *linebuf= 0;
+ break;
+ default:
+ sprintf(linebuf, " %.250s is %s.\n",
+ possi->ed->name, );
+ break;
+ }
+ break;
+ default:
+ abort();
+ }
+
+
+
+ if (possi->ed->clientdata->istobe == itb_install) continue;
+ default:
+ break;
+
+
+ /* fixme: what about things provided by the package(s)
+ * which we are about to install ? For these we
+ * have to use ->available.depended.
+ */
+ varbufaddc(whynot, ' ');
+ varbufaddstr(whynot, provider->up->up->name);
+ varbufaddstr(whynot, " provides ");
+ varbufaddstr(whynot, possi->ed->name);
+ }
+ }
+
+ sprintf(linebuf, " No package %.250s
+
+ provider->up->up->status == stat_configfiles) {
+ varbufaddstr(whynot, " but is not present.\n");
+ } else {
+ varbufaddstr(whynot, " and is present.\n");
+ present=1;
+ }
+ break;
+ case itb_install:
+ varbufaddstr(whynot, " and is to be installed.\n");
+ present=1;
+ break;
+ var
+
+ varbufaddc(whynot, ' ');
+
+ varbufaddstr(whynot, possi->ed->name);
+ varbufaddstr(whynot, " is to be removed.\n");
+ break;
+ case itb_normal:
+ varbufaddstr(whynot, possi->ed->name);
+ varbufaddstr(whynot, " is ");
+ if (dep->up->status == stat_installed) {
+ if (versionsatisfied(possi, &possi->ed.installed, whynot)) return 1;
+ varbufaddstr(&why, " version");
+
+ varbufaddstr(&why, "
+ varbufaddstr(&why, " is not present.\n");
+ } else {
+ varbufaddstr(whynot, statusstrings[dep->ed->status]);
+ varbufaddstr(whynot, possi->ed->name);
+ varbufaddstr(whynot, " is present");
+ }
+ break;
+ case itb_installnew:
+ varbufaddstr(whynot, possi->ed->name);
+ varbufaddstr(whynot, " is to be installed");
+ if (versionsatisfied(possi, &possi->ed.available, whynot)) present=1;
+ default:
+ abort();
+ }
+ }
+ if (dep->type == dep_conflicts ? present : !present) return 0;
+ varbufreset(whynot); return 1;
+}