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
/* 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. */
/* 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(int dontCloseThisFd)
{
// Fork off the process
pid_t Process = fork();
{
// Fork off the process
pid_t Process = fork();
// Close all of our FDs - just in case
for (int K = 3; K != 40; K++)
// 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);
void SetCloseExec(int Fd,bool Close);
void SetNonBlock(int Fd,bool Block);
bool WaitFd(int Fd,bool write = false,unsigned long timeout = 0);
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(int dontCloseThisFd=-1);
bool ExecWait(pid_t Pid,const char *Name,bool Reap = false);
// File string manipulators
bool ExecWait(pid_t Pid,const char *Name,bool Reap = false);
// File string manipulators
// DPkgPM::Go - Run the sequence /*{{{*/
// ---------------------------------------------------------------------
/* This globs the operations and calls dpkg */
// DPkgPM::Go - Run the sequence /*{{{*/
// ---------------------------------------------------------------------
/* This globs the operations and calls dpkg */
+bool pkgDPkgPM::Go(int status_fd)
{
unsigned int MaxArgs = _config->FindI("Dpkg::MaxArgs",8*1024);
unsigned int MaxArgBytes = _config->FindI("Dpkg::MaxArgBytes",32*1024);
{
unsigned int MaxArgs = _config->FindI("Dpkg::MaxArgs",8*1024);
unsigned int MaxArgBytes = _config->FindI("Dpkg::MaxArgBytes",32*1024);
+ // 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:
switch (I->Op)
{
case Item::Remove:
sighandler_t old_SIGINT = signal(SIGINT,SIG_IGN);
// Fork dpkg
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)
// This is the child
if (Child == 0)
virtual bool Install(PkgIterator Pkg,string File);
virtual bool Configure(PkgIterator Pkg);
virtual bool Remove(PkgIterator Pkg,bool Purge = false);
virtual bool Install(PkgIterator Pkg,string File);
virtual bool Configure(PkgIterator Pkg);
virtual bool Remove(PkgIterator Pkg,bool Purge = false);
+ virtual bool Go(int status_fd=-1);
virtual void Reset();
public:
virtual void Reset();
public:
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 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:
virtual void Reset() {};
public:
apt (0.6.30) unstable; urgency=low
* Add ppc64 to buildlib/archtable
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
--
apt (0.6.29) hoary; urgency=low
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "Server closed the connection"
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 ""
msgid "Read error"
msgstr ""
msgid "Could not get lock %s"
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 ""
#, 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 ""
#, 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 ""
#, 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 ""
#, 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 ""
#, 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 ""
#, 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 ""
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 ""
#, 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 ""
msgid "Problem closing the file"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:584
+#: apt-pkg/contrib/fileutl.cc:585
msgid "Problem unlinking the file"
msgstr ""
msgid "Problem unlinking the file"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:595
+#: apt-pkg/contrib/fileutl.cc:596
msgid "Problem syncing the file"
msgstr ""
msgid "Problem syncing the file"
msgstr ""