From 007dc9e082687e65a7ed89fc416bab05eaa5f96f Mon Sep 17 00:00:00 2001 From: Matt Zimmerman Date: Wed, 19 Jan 2005 08:25:10 +0000 Subject: Merge michael.vogt@canonical.com--2004/apt--status-fd--0 Patches applied: * michael.vogt@canonical.com--2004--laptop/apt--status-fd--0--base-0 tag of apt@packages.debian.org/apt--main--0--patch-32 * michael.vogt@canonical.com--2004--laptop/apt--status-fd--0--patch-1 * michael.vogt@canonical.com--2004--laptop/apt--status-fd--0--patch-2 * changed version of the library * michael.vogt@canonical.com--2004--laptop/apt--status-fd--0--patch-3 * merged with matt again * michael.vogt@canonical.com--2004--laptop/apt--status-fd--0--patch-4 * merged with apt--main--0 and fixed permissions in po/ * michael.vogt@canonical.com--2004/apt--status-fd--0--patch-1 tag of michael.vogt@canonical.com--2004--laptop/apt--status-fd--0--patch-4 * michael.vogt@canonical.com--2004/apt--status-fd--0--patch-2 * merged with matt's tree * michael.vogt@canonical.com--2004/apt--status-fd--0--patch-3 * removed a stupid "<<<" merge in the changelog * michael.vogt@canonical.com--2004/apt--status-fd--0--patch-4 * star-merged with apt@packages.debian.org/apt--main--0 * michael.vogt@canonical.com--2004/apt--status-fd--0--patch-5 * removed the "pre-fork/post-fork" change and put it into it's own branch, star-merged with matt so that it applies cleanly * michael.vogt@canonical.com--2004/apt--status-fd--0--patch-6 * cleaned a incorrect log-file merge * michael.vogt@canonical.com--2004/apt--status-fd--0--patch-7 * removed a conflict in =tagging-method * michael.vogt@canonical.com--2004/apt--status-fd--0--patch-8 * cleaned up the delta so that it no longer contains unreleated whitespace changes --- apt-pkg/contrib/fileutl.cc | 5 +++-- apt-pkg/contrib/fileutl.h | 2 +- apt-pkg/deb/dpkgpm.cc | 19 +++++++++++++++++-- apt-pkg/deb/dpkgpm.h | 2 +- apt-pkg/packagemanager.h | 2 +- debian/changelog | 4 +++- po/apt-all.pot | 26 +++++++++++++------------- 7 files changed, 39 insertions(+), 21 deletions(-) diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index 7c9f5c0dd..92181472c 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -306,7 +306,7 @@ bool WaitFd(int Fd,bool write,unsigned long timeout) /* This is used if you want to cleanse the environment for the forked child, it fixes up the important signals and nukes all of the fds, otherwise acts like normal fork. */ -pid_t ExecFork() +pid_t ExecFork(int dontCloseThisFd) { // Fork off the process pid_t Process = fork(); @@ -329,7 +329,8 @@ pid_t ExecFork() // Close all of our FDs - just in case for (int K = 3; K != 40; K++) - fcntl(K,F_SETFD,FD_CLOEXEC); + if(K != dontCloseThisFd) + fcntl(K,F_SETFD,FD_CLOEXEC); } return Process; diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h index 041aa3309..4716e261e 100644 --- a/apt-pkg/contrib/fileutl.h +++ b/apt-pkg/contrib/fileutl.h @@ -87,7 +87,7 @@ string SafeGetCWD(); void SetCloseExec(int Fd,bool Close); void SetNonBlock(int Fd,bool Block); bool WaitFd(int Fd,bool write = false,unsigned long timeout = 0); -pid_t ExecFork(); +pid_t ExecFork(int dontCloseThisFd=-1); bool ExecWait(pid_t Pid,const char *Name,bool Reap = false); // File string manipulators diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 85d46edba..61c48dcbb 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -326,7 +326,7 @@ bool pkgDPkgPM::RunScriptsWithPkgs(const char *Cnf) // DPkgPM::Go - Run the sequence /*{{{*/ // --------------------------------------------------------------------- /* This globs the operations and calls dpkg */ -bool pkgDPkgPM::Go() +bool pkgDPkgPM::Go(int status_fd) { unsigned int MaxArgs = _config->FindI("Dpkg::MaxArgs",8*1024); unsigned int MaxArgBytes = _config->FindI("Dpkg::MaxArgBytes",32*1024); @@ -367,6 +367,17 @@ bool pkgDPkgPM::Go() } } + // if we got a status_fd argument, we pass it to apt + char status_fd_buf[20]; + if(status_fd > 0) + { + Args[n++] = "--status-fd"; + Size += strlen(Args[n-1]); + snprintf(status_fd_buf,20,"%i",status_fd); + Args[n++] = status_fd_buf; + Size += strlen(Args[n-1]); + } + switch (I->Op) { case Item::Remove: @@ -440,7 +451,11 @@ bool pkgDPkgPM::Go() sighandler_t old_SIGINT = signal(SIGINT,SIG_IGN); // Fork dpkg - pid_t Child = ExecFork(); + pid_t Child; + if(status_fd > 0) + Child = ExecFork(status_fd); + else + Child = ExecFork(); // This is the child if (Child == 0) diff --git a/apt-pkg/deb/dpkgpm.h b/apt-pkg/deb/dpkgpm.h index 5d60b32d2..b59b9dc93 100644 --- a/apt-pkg/deb/dpkgpm.h +++ b/apt-pkg/deb/dpkgpm.h @@ -45,7 +45,7 @@ class pkgDPkgPM : public pkgPackageManager virtual bool Install(PkgIterator Pkg,string File); virtual bool Configure(PkgIterator Pkg); virtual bool Remove(PkgIterator Pkg,bool Purge = false); - virtual bool Go(); + virtual bool Go(int status_fd=-1); virtual void Reset(); public: diff --git a/apt-pkg/packagemanager.h b/apt-pkg/packagemanager.h index ba84c5ed7..43f2c4ace 100644 --- a/apt-pkg/packagemanager.h +++ b/apt-pkg/packagemanager.h @@ -68,7 +68,7 @@ class pkgPackageManager : protected pkgCache::Namespace virtual bool Install(PkgIterator /*Pkg*/,string /*File*/) {return false;}; virtual bool Configure(PkgIterator /*Pkg*/) {return false;}; virtual bool Remove(PkgIterator /*Pkg*/,bool /*Purge*/=false) {return false;}; - virtual bool Go() {return true;}; + virtual bool Go(int statusFd=-1) {return true;}; virtual void Reset() {}; public: diff --git a/debian/changelog b/debian/changelog index d0dae01d2..6731bd3d2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,7 +1,9 @@ apt (0.6.30) unstable; urgency=low * Add ppc64 to buildlib/archtable - + * Merge michael.vogt@canonical.com--2004/apt--status-fd--0 + - Support preserving dpkg status file descriptor, to support + better integration with synaptic -- apt (0.6.29) hoary; urgency=low diff --git a/po/apt-all.pot b/po/apt-all.pot index dfafb2c4f..4d0e15658 100644 --- a/po/apt-all.pot +++ b/po/apt-all.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2004-12-23 12:36+0100\n" +"POT-Creation-Date: 2004-12-20 10:20+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1495,7 +1495,7 @@ msgstr "" msgid "Server closed the connection" msgstr "" -#: methods/ftp.cc:338 methods/rsh.cc:190 apt-pkg/contrib/fileutl.cc:452 +#: methods/ftp.cc:338 methods/rsh.cc:190 apt-pkg/contrib/fileutl.cc:453 msgid "Read error" msgstr "" @@ -1895,54 +1895,54 @@ msgstr "" msgid "Could not get lock %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:358 +#: apt-pkg/contrib/fileutl.cc:359 #, c-format msgid "Waited, for %s but it wasn't there" msgstr "" -#: apt-pkg/contrib/fileutl.cc:368 +#: apt-pkg/contrib/fileutl.cc:369 #, c-format msgid "Sub-process %s received a segmentation fault." msgstr "" -#: apt-pkg/contrib/fileutl.cc:371 +#: apt-pkg/contrib/fileutl.cc:372 #, c-format msgid "Sub-process %s returned an error code (%u)" msgstr "" -#: apt-pkg/contrib/fileutl.cc:373 +#: apt-pkg/contrib/fileutl.cc:374 #, c-format msgid "Sub-process %s exited unexpectedly" msgstr "" -#: apt-pkg/contrib/fileutl.cc:417 +#: apt-pkg/contrib/fileutl.cc:418 #, c-format msgid "Could not open file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:473 +#: apt-pkg/contrib/fileutl.cc:474 #, c-format msgid "read, still have %lu to read but none left" msgstr "" -#: apt-pkg/contrib/fileutl.cc:491 +#: apt-pkg/contrib/fileutl.cc:492 msgid "Write error" msgstr "" -#: apt-pkg/contrib/fileutl.cc:503 +#: apt-pkg/contrib/fileutl.cc:504 #, c-format msgid "write, still have %lu to write but couldn't" msgstr "" -#: apt-pkg/contrib/fileutl.cc:578 +#: apt-pkg/contrib/fileutl.cc:579 msgid "Problem closing the file" msgstr "" -#: apt-pkg/contrib/fileutl.cc:584 +#: apt-pkg/contrib/fileutl.cc:585 msgid "Problem unlinking the file" msgstr "" -#: apt-pkg/contrib/fileutl.cc:595 +#: apt-pkg/contrib/fileutl.cc:596 msgid "Problem syncing the file" msgstr "" -- cgit v1.2.3