diff options
author | Michael Vogt <mvo@ubuntu.com> | 2014-11-05 17:48:11 +0100 |
---|---|---|
committer | Michael Vogt <mvo@ubuntu.com> | 2014-11-05 17:48:11 +0100 |
commit | 3e68f7e41022790619c698a32390a5256fadba7c (patch) | |
tree | d9a9e08517ecedc342177512921a2fba43615fa1 /apt-pkg/deb/dpkgpm.cc | |
parent | 6e2261d0f250406058d66b360080aa986953ae19 (diff) | |
parent | 28460cb27846b2437010b08adf10bde18e370974 (diff) |
Merge branch 'debian/sid' into debian/experimental
Conflicts:
debian/changelog
Diffstat (limited to 'apt-pkg/deb/dpkgpm.cc')
-rw-r--r-- | apt-pkg/deb/dpkgpm.cc | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 95fae9a28..0cded32e1 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -55,6 +55,18 @@ using namespace std; +APT_PURE static unsigned int +EnvironmentSize() +{ + unsigned int size = 0; + char **envp = environ; + + while (*envp != NULL) + size += strlen (*envp++) + 1; + + return size; +} + class pkgDPkgPMPrivate { public: @@ -1230,8 +1242,15 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress) fd_set rfds; struct timespec tv; - unsigned int const MaxArgs = _config->FindI("Dpkg::MaxArgs",8*1024); - unsigned int const MaxArgBytes = _config->FindI("Dpkg::MaxArgBytes",32*1024); + // FIXME: do we really need this limit when we have MaxArgBytes? + unsigned int const MaxArgs = _config->FindI("Dpkg::MaxArgs",32*1024); + + // try to figure out the max environment size + int OSArgMax = sysconf(_SC_ARG_MAX); + if(OSArgMax < 0) + OSArgMax = 32*1024; + OSArgMax -= EnvironmentSize() - 2*1024; + unsigned int const MaxArgBytes = _config->FindI("Dpkg::MaxArgBytes", OSArgMax); bool const NoTriggers = _config->FindB("DPkg::NoTriggers", false); if (RunScripts("DPkg::Pre-Invoke") == false) |