From e7004659f2ad64878d45ea216d92aa9ab7347999 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Thu, 9 Apr 2020 12:21:07 +0200 Subject: [PATCH] Import Debian version 2.0.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit apt (2.0.2) unstable; urgency=medium [ Boyuan Yang ] * Simplified Chinese program translation update (Closes: #955023) [ Frans Spiesschaert ] * Dutch program translation update (Closes: #955505) [ Marco Ippolito ] * Fix gramma in apt(8): "by append(+ing) a" (Closes: #955412) [ Chris Leick ] * German manpage translation update * Fix "string match{ing,es}" and whitespace typo in apt-patterns(7) [ Julian Andres Klode ] * test/integration/apt.pem: Regenerate with SHA2 hashes to make the test work with stricter gnutls in Ubuntu which rejects SHA1 * ubuntu: http: Add non-interactive to user agent if run by systemd (LP: #1825000) apt (2.0.1) unstable; urgency=medium [ David Kalnischkies ] * Don't crash pattern matching sections if pkg has no section * Parse last line in deb file correctly by adding a newline [ Julian Andres Klode ] * apt-helper: Add analyze-pattern helper * Add color highlighting to E:/W:/N: prefixes (Closes: #953527) [ Алексей Шилин ] * Russian program translation update (Closes: #953804) apt (2.0.0) unstable; urgency=medium * Upload to unstable - Happy APT 2.0 day! * GetLock: No strerror if it's just another process holding the lock * Show absolute time while waiting for lock instead of %, rework message apt (1.9.12) experimental; urgency=medium * pkgcache: Add operator bool() to map_pointer * (temporarily) unhide pkgDPkgPM again to have python-apt compile apt (1.9.11) experimental; urgency=medium [ Tomáš Janoušek ] * bash completion: Add autopurge command [ Tris Emmy Wilson ] * apt-mark: don't lie about successful marks [ Julian Andres Klode ] * apt(8): Wait for lock (Closes: #754103) * policy: Implement pinning by source package (Closes: #166032) * Initialize libgcrypt on first use (Closes: #949074) * Fix various compiler warnings * Bump ABI to 6.0; update symbols file; cleanup ABI: - Merge various function overloads together - Make stuff that should be virtual virtual - Default to hidden visibility * Code removals: - Use a 32-bit djb VersionHash instead of CRC-16 - Remove CRC-16 implementation * Hardening: - tagfile: Check if memchr() returned null before using - tagfile: Check out-of-bounds access to Tags vector * Cache improvements: - Type safe cache: Replace map_pointer_t with map_pointer - Extensibility: Add d-pointers to groups, packages, versions, and files - Prepare for package hashtable removal: Swap locations of hashtables [ Nis Martensen ] * apt-pkg/srcrecords.cc: 'source' means 'deb-src' in error message [ David Kalnischkies ] * Parse records including empty tag names correctly apt (1.9.10) experimental; urgency=medium [ David Kalnischkies ] * Fix remaining usec vs sec time-delta calculation typos. Thanks to Trent W. Buck for initial patch (Closes: #950776) [ Julian Andres Klode ] * seccomp: Allow time64 variants (>402,<415) of allowed syscalls (Closes: #951012) * debian/control: Bump libseccomp-dev Build-Depends to >= 2.4.2 * seccomp: Allow recvmmsg_time64() and futex_time64() * policy: Add SetPriority() methods * Revert "Add a Packages-Require-Authorization Release file field" [ Michael Vogt ] * doc: remove "WIP" from apt.8.xml apt (1.9.9) experimental; urgency=medium * Widen regular expressions for versioned kernel packages (LP: #1607845) * Implement short patterns (patterns starting with ~) apt (1.9.8) experimental; urgency=medium * pkgcache.cc: Mix PACKAGE_VERSION into the cache hash * mmap: Do not look for empty pool unless we need to * apt-verbatim.ent: Update ubuntu-codename from disco to focal * NewGroup: Create GrpIterator after allocation (fix segfault) apt (1.9.7) experimental; urgency=medium * Trim trailing whitespace (thanks lintian-brush) * NewProvidesAllArch: Check if group is empty before using it. This caused automake-1.16 to not be provided by automake anymore, because apt wanted to add provides to packages in an empty automake-1.16 group. LP: #1859952 * Fix debian-rules-uses-deprecated-systemd-override. We accidentally managed to restart apt-daily{,-upgrade}.service again because our dh_systemd_start override was being ignored since we switched to debhelper 12. Override dh_installsystemd instead. apt (1.9.6) experimental; urgency=medium [ Julian Andres Klode ] * gitlab-ci: Do not do coverage * gitlab-ci: Use ccache * satisfy: Fix segmentation fault when called with empty argument * Add support for GTest 1.9, do not fail silently if its missing * gtests: Fix netrc parser test regression from https-only changes * Macro cleanup: - Avoid #define _error, use anonymous C++ struct instead (Closes: #948338) - Rename _count() macro to APT_ARRAY_SIZE() - Remove various unused macros like MAX/MIN/ABS/APT_CONST - Only define likely/unlikely if APT_COMPILING_APT set * Performance: Avoid extra out-of-cache hash table deduplication for package names, this saved about 10-16% on gencaches in memory * acquire: Move queue startup after calling log's Start(), fixes abort() calls in python-apt * hashes: Use Libgcrypt for hashing purposes - Raise buffer size for Hashes::AddFD() from 4 KiB to 64 KiB - Convert users of {MD5,SHA1,SHA256,SHA512}Summation to use Hashes - Deprecate the Summation classes and mark them for removal - Remove includes of (md5|sha1|sha2).h headers * netrc: Add warning when ignoring entries for unencrypted protocols * apt(8): Disable regular expressions and fnmatch [ David Kalnischkies ] * Drop g++ build-dependency to help crossbuilding (Closes: #948201) [ Denis Mosolov ] * Fix typo in README.md apt (1.9.5) experimental; urgency=medium [ Julian Andres Klode ] * Parse 'show' arguments for the 'info' alias as well (LP: #1843812) * patterns: Add base class for regular expression matching * patterns: Add ?version * patterns: Add ?source-name and ?source-version * patterns: Add ?archive * patterns: Add ?origin * patterns: Add ?any-version * patterns: Implement ?narrow(...), as ?any-version(?and(...)) * patterns: Add ?all-versions * patterns: Add ?section * netrc: Restrict auth.conf entries to https by default (Closes: #945911) [ Anatoly Borodin ] * README.md: fix dead anonscm link [ Алексей Шилин ] * Search in all available description translations (Closes: #490000) * strutl: Add APT::String::DisplayLength() function * Fix progress bar width for multibyte charsets [ Chris Leick ] * German manpage translation update [ David Kalnischkies ] * Use correct filename on IMS-hit reverify for indices * Remove failed trusted signature instead of index on IMS hit [ Anthony Papillon ] * Fix a mistake in man french translation apt (1.9.4) experimental; urgency=medium * CMake: Pass -Werror=return-type to gcc * CMake: Produce a fatal error if triehash could not be found * apt.systemd.daily: Do not numerically check if intervals equal 0 (LP: #1840995) * srvrec: Use re-entrant resolver functions * Pass --abort-after=1 to dpkg when using --force-depends (Closes: #935910) (LP: #1844634) * Fix use of GTest to adjust for GTest 1.9 apt (1.9.3) experimental; urgency=medium * Fix segfault in pkgAcquire::Enqueue() with Acquire::Queue-Mode=access (LP: #1839714) * test: Use valgrind to ensure Acquire::Queue-Mode=access does not crash * Add initial support for package patterns (patterns on versions WIP) apt (1.9.2) experimental; urgency=medium [ Julian Andres Klode ] * Improve locking messaging - pid and name, "do not remove lock file" [ Lynn Cyrin ] * Change a pronoun in the readme from `he` to `they` [ David Kalnischkies ] * Distribute host-less work based on backlog of the queues * Show details about the package with bad Provides * Apply various suggestions by cppcheck apt (1.9.1) experimental; urgency=medium * RFC1123StrToTime: Accept const std::string& as first argument * Fix pkg-config-test autopkgtest apt (1.9.0) experimental; urgency=medium [ Julian Andres Klode ] * CMakeLists.txt: Bump C++ standard version to C++14 * debian: Update to debhelper-compat (= 12) * debian/rules: Do not use dh_install --list-missing (dh 12 porting) * Remove all the deprecated bits, merge various function prototypes together * prepare-release: Add merge-translations command * Use system-provided triehash * CI: Use unstable for now, as we need triehash package * Tighten dependencies from apt and apt-utils on libs * Add test case for local-only packages pinned to never * acq: worker: Move CurrentSize, TotalSize, ResumePoint to CurrentItem * apt-helper: Support multiple hashes for a file * Add 'explicit' to most single argument constructors * Get rid of pkgExtract and pkgFLCache * Merge libapt-inst into libapt-pkg * Use debDebFile to get control file instead of dpkg-deb * prepare-release: Add bump-abi command * Change soname to libapt-pkg.so.5.90 * CMake: Enforce "override" use on overridden methods * debmetaindex: Use isspace_ascii() variant to normalize Signed-By * README.md: Quote -j as code with backticks * apt-mark: Add hidden showheld alias for showhold * Mnor wording improvements in documentation * Make APT::StringView public, replace std::string with it in various places * Introduce apt satisfy and apt-get satisfy (Closes: #275379) * Run unifdef -DAPT_{8,9,10,15}_CLEANER_HEADERS * Adjust code for missing includes, and using std::string * Bump cache MajorVersion to 16 [ Corentin Noël ] * Add pkg-config files for the apt-pkg and apt-inst libraries (Closes: #439121) [ Simon McVittie ] * vendor/getinfo: Iterate through vendors in lexicographic order (Closes: #924662) * vendor/getinfo: Don't assume that Ubuntu is the last vendor (Closes: #924662) [ Martin Michlmayr ] * Perform minor copy-editing on the docs [ Ivan Krylov ] * Mark apt-transport-https as M-A:foreign (Closes: #905141) [ David Kalnischkies ] * Don't limit cpu-limited queues to at most 10 [ Stephen Kitt ] * apt-cache: only show solutions if displayed [ Brian Murray ] * Do not include squashfs file systems in df output. (LP: #1756595) [ Simon Körner ] * http: Fix Host header in proxied https connections --- .gitlab-ci.yml | 40 +- CMake/FindGcrypt.cmake | 25 + CMake/config.h.in | 8 +- CMakeLists.txt | 21 +- Dockerfile | 2 +- README.md | 84 +- abicheck/apt_build.xml.in | 1 - apt-inst/CMakeLists.txt | 28 - apt-inst/dpkg-diffs.txt | 5 - apt-inst/extract.cc | 514 --- apt-inst/extract.h | 49 - apt-inst/filelist.cc | 586 ---- apt-inst/filelist.h | 312 -- apt-pkg/CMakeLists.txt | 10 +- apt-pkg/acquire-item.cc | 91 +- apt-pkg/acquire-item.h | 50 +- apt-pkg/acquire-method.cc | 5 +- apt-pkg/acquire-method.h | 6 +- apt-pkg/acquire-worker.cc | 22 +- apt-pkg/acquire-worker.h | 17 +- apt-pkg/acquire.cc | 174 +- apt-pkg/acquire.h | 69 +- apt-pkg/algorithms.cc | 28 +- apt-pkg/algorithms.h | 30 +- apt-pkg/apt-pkg.pc.in | 8 + apt-pkg/aptconfiguration.h | 21 +- apt-pkg/cachefile.cc | 2 +- apt-pkg/cachefile.h | 9 +- apt-pkg/cachefilter-patterns.cc | 549 +++ apt-pkg/cachefilter-patterns.h | 379 +++ apt-pkg/cachefilter.h | 26 +- apt-pkg/cacheiterators.h | 74 +- apt-pkg/cacheset.cc | 86 +- apt-pkg/cacheset.h | 226 +- apt-pkg/cdrom.cc | 6 - apt-pkg/cdrom.h | 33 +- apt-pkg/clean.cc | 19 +- apt-pkg/clean.h | 21 +- {apt-inst => apt-pkg}/contrib/arfile.cc | 0 {apt-inst => apt-pkg}/contrib/arfile.h | 9 +- apt-pkg/contrib/cdromutl.cc | 6 +- apt-pkg/contrib/cdromutl.h | 15 +- apt-pkg/contrib/cmndline.cc | 8 +- apt-pkg/contrib/cmndline.h | 7 +- apt-pkg/contrib/configuration.cc | 9 +- apt-pkg/contrib/configuration.h | 15 +- apt-pkg/contrib/crc-16.cc | 77 - apt-pkg/contrib/crc-16.h | 19 - apt-pkg/contrib/error.cc | 88 + apt-pkg/contrib/error.h | 36 +- {apt-inst => apt-pkg}/contrib/extracttar.cc | 4 - {apt-inst => apt-pkg}/contrib/extracttar.h | 8 +- apt-pkg/contrib/fileutl.cc | 88 +- apt-pkg/contrib/fileutl.h | 100 +- apt-pkg/contrib/gpgv.h | 9 +- apt-pkg/contrib/hashes.cc | 186 +- apt-pkg/contrib/hashes.h | 74 +- apt-pkg/contrib/hashsum.cc | 52 - apt-pkg/contrib/hashsum_template.h | 141 - apt-pkg/contrib/macros.h | 66 +- apt-pkg/contrib/md5.cc | 279 -- apt-pkg/contrib/md5.h | 58 - apt-pkg/contrib/mmap.cc | 17 +- apt-pkg/contrib/mmap.h | 6 +- apt-pkg/contrib/netrc.cc | 78 +- apt-pkg/contrib/netrc.h | 15 +- apt-pkg/contrib/progress.cc | 18 +- apt-pkg/contrib/progress.h | 12 +- apt-pkg/contrib/proxy.h | 2 +- apt-pkg/contrib/sha1.cc | 273 -- apt-pkg/contrib/sha1.h | 47 - apt-pkg/contrib/sha2.h | 108 - apt-pkg/contrib/sha256.h | 8 - apt-pkg/contrib/sha2_internal.cc | 1089 ------ apt-pkg/contrib/sha2_internal.h | 188 -- apt-pkg/contrib/sptr.h | 74 - apt-pkg/contrib/srvrec.cc | 9 +- apt-pkg/contrib/srvrec.h | 10 +- apt-pkg/contrib/string_view.h | 11 +- apt-pkg/contrib/strutl.cc | 119 +- apt-pkg/contrib/strutl.h | 122 +- {apt-inst => apt-pkg}/deb/debfile.cc | 0 {apt-inst => apt-pkg}/deb/debfile.h | 16 +- apt-pkg/deb/debindexfile.cc | 46 +- apt-pkg/deb/debindexfile.h | 17 +- apt-pkg/deb/deblistparser.cc | 95 +- apt-pkg/deb/deblistparser.h | 71 +- apt-pkg/deb/debmetaindex.cc | 28 +- apt-pkg/deb/debmetaindex.h | 14 +- apt-pkg/deb/debrecords.h | 5 +- apt-pkg/deb/debsrcrecords.cc | 41 +- apt-pkg/deb/debsrcrecords.h | 1 - apt-pkg/deb/debsystem.cc | 59 +- apt-pkg/deb/debsystem.h | 16 +- apt-pkg/deb/debversion.h | 4 +- apt-pkg/deb/dpkgpm.cc | 23 +- apt-pkg/deb/dpkgpm.h | 13 +- apt-pkg/depcache.cc | 15 - apt-pkg/depcache.h | 30 +- {apt-inst => apt-pkg}/dirstream.cc | 0 {apt-inst => apt-pkg}/dirstream.h | 2 +- apt-pkg/edsp.cc | 334 +- apt-pkg/edsp.h | 49 +- apt-pkg/edsp/edspindexfile.cc | 4 +- apt-pkg/edsp/edspindexfile.h | 9 +- apt-pkg/edsp/edsplistparser.cc | 8 +- apt-pkg/edsp/edsplistparser.h | 14 +- apt-pkg/edsp/edspsystem.cc | 2 +- apt-pkg/edsp/edspsystem.h | 12 +- apt-pkg/indexcopy.cc | 10 - apt-pkg/indexcopy.h | 23 +- apt-pkg/indexfile.cc | 31 +- apt-pkg/indexfile.h | 27 +- apt-pkg/init.h | 14 +- apt-pkg/install-progress.cc | 2 +- apt-pkg/install-progress.h | 12 +- apt-pkg/metaindex.cc | 62 +- apt-pkg/metaindex.h | 36 +- apt-pkg/orderlist.h | 3 +- apt-pkg/packagemanager.cc | 42 +- apt-pkg/packagemanager.h | 19 +- apt-pkg/pkgcache.cc | 135 +- apt-pkg/pkgcache.h | 211 +- apt-pkg/pkgcachegen.cc | 150 +- apt-pkg/pkgcachegen.h | 53 +- apt-pkg/pkgrecords.h | 8 +- apt-pkg/pkgsystem.cc | 41 - apt-pkg/pkgsystem.h | 22 +- apt-pkg/policy.cc | 117 +- apt-pkg/policy.h | 16 +- apt-pkg/prettyprinters.h | 4 +- apt-pkg/sourcelist.cc | 23 +- apt-pkg/sourcelist.h | 13 +- apt-pkg/srcrecords.cc | 32 +- apt-pkg/srcrecords.h | 14 +- apt-pkg/statechanges.cc | 2 + apt-pkg/tagfile-compat.cc | 75 - apt-pkg/tagfile.cc | 170 +- apt-pkg/tagfile.h | 71 +- apt-pkg/update.h | 4 +- apt-pkg/upgrade.cc | 23 +- apt-pkg/upgrade.h | 7 +- apt-pkg/version.h | 5 +- apt-pkg/versionmatch.h | 5 +- apt-private/acqprogress.cc | 20 +- apt-private/acqprogress.h | 2 +- apt-private/private-cachefile.cc | 4 +- apt-private/private-cachefile.h | 10 +- apt-private/private-cacheset.cc | 74 +- apt-private/private-cacheset.h | 18 +- apt-private/private-cmndline.cc | 30 +- apt-private/private-depends.cc | 32 +- apt-private/private-download.cc | 2 +- apt-private/private-install.cc | 7 +- apt-private/private-json-hooks.cc | 6 +- apt-private/private-list.cc | 23 +- apt-private/private-main.cc | 1 - apt-private/private-main.h | 1 - apt-private/private-search.cc | 121 +- apt-private/private-show.cc | 7 +- apt-private/private-source.cc | 87 +- apt-private/private-sources.cc | 2 +- apt-private/private-update.cc | 1 + cmdline/CMakeLists.txt | 8 +- cmdline/apt-cache.cc | 32 +- cmdline/apt-cdrom.cc | 2 +- cmdline/apt-extracttemplates.cc | 2 +- cmdline/apt-get.cc | 10 +- cmdline/apt-helper.cc | 68 +- cmdline/apt-internal-solver.cc | 1 - cmdline/apt-mark.cc | 34 +- cmdline/apt.cc | 1 + completions/bash/apt | 2 +- debian/NEWS | 30 + debian/apt.conf.autoremove | 26 +- debian/apt.install | 1 + debian/apt.systemd.daily | 16 +- debian/changelog | 758 +++-- debian/compat | 1 - debian/control | 31 +- debian/gbp.conf | 2 +- debian/libapt-inst2.0.install | 2 - debian/libapt-inst2.0.symbols | 69 - debian/libapt-pkg-dev.install | 2 +- debian/libapt-pkg-doc.doc-base.dpkg-tech | 2 +- ...t-pkg5.0.install => libapt-pkg6.0.install} | 0 ...t-pkg5.0.symbols => libapt-pkg6.0.symbols} | 2986 ++++++++--------- debian/rules | 22 +- debian/tests/control | 6 +- debian/tests/pkg-config-test | 23 + doc/CMakeLists.txt | 1 + doc/acquire-additional-files.md | 2 +- doc/apt-cache.8.xml | 6 +- doc/apt-ftparchive.1.xml | 6 +- doc/apt-get.8.xml | 20 +- doc/apt-key.8.xml | 4 +- doc/apt-patterns.7.xml | 220 ++ doc/apt-transport-http.1.xml | 4 +- doc/apt-verbatim.ent | 10 +- doc/apt.8.xml | 17 +- doc/apt.conf.5.xml | 6 +- doc/apt_auth.conf.5.xml | 16 +- doc/apt_preferences.5.xml | 23 +- doc/examples/configure-index | 8 + doc/json-hooks-protocol.md | 2 +- doc/po/apt-doc.pot | 737 +++- doc/po/de.po | 967 +++++- doc/po/es.po | 771 ++++- doc/po/fr.po | 793 ++++- doc/po/it.po | 843 ++++- doc/po/ja.po | 778 ++++- doc/po/nl.po | 789 ++++- doc/po/pl.po | 767 ++++- doc/po/pt.po | 787 ++++- doc/po/pt_BR.po | 765 ++++- doc/po4a.conf | 1 + doc/sources.list.5.xml | 8 +- ftparchive/CMakeLists.txt | 2 +- ftparchive/apt-ftparchive.cc | 36 +- ftparchive/cachedb.cc | 3 - ftparchive/contents.cc | 2 +- ftparchive/multicompress.cc | 15 +- ftparchive/sources.cc | 1 + ftparchive/writer.cc | 12 +- methods/CMakeLists.txt | 3 +- methods/aptmethod.h | 25 +- methods/basehttp.cc | 20 +- methods/cdrom.cc | 7 +- methods/connect.cc | 4 +- methods/connect.h | 2 +- methods/file.cc | 3 +- methods/ftp.cc | 6 +- methods/gpgv.cc | 25 +- methods/http.cc | 41 +- methods/mirror.cc | 12 +- methods/rfc2553emu.cc | 4 +- methods/rred.cc | 2 +- methods/rsh.cc | 6 +- methods/rsh.h | 4 +- methods/store.cc | 2 +- po/CMakeLists.txt | 7 - po/apt-all.pot | 328 +- po/ar.po | 348 +- po/ast.po | 399 ++- po/bg.po | 399 ++- po/bs.po | 334 +- po/ca.po | 398 ++- po/cs.po | 401 ++- po/cy.po | 410 +-- po/da.po | 398 ++- po/de.po | 402 ++- po/dz.po | 399 ++- po/el.po | 399 ++- po/es.po | 403 ++- po/eu.po | 399 ++- po/fi.po | 400 ++- po/fr.po | 402 ++- po/gl.po | 400 ++- po/hu.po | 401 ++- po/it.po | 400 ++- po/ja.po | 400 ++- po/km.po | 399 ++- po/ko.po | 399 ++- po/ku.po | 357 +- po/lt.po | 347 +- po/mr.po | 400 ++- po/nb.po | 401 ++- po/ne.po | 399 ++- po/nl.po | 875 +---- po/nn.po | 399 ++- po/pl.po | 399 ++- po/pt.po | 399 ++- po/pt_BR.po | 399 ++- po/ro.po | 405 ++- po/ru.po | 414 +-- po/sk.po | 399 ++- po/sl.po | 399 ++- po/sv.po | 403 ++- po/th.po | 401 ++- po/tl.po | 399 ++- po/tr.po | 402 ++- po/uk.po | 410 ++- po/vi.po | 401 ++- po/zh_CN.po | 429 +-- po/zh_TW.po | 399 ++- prepare-release | 36 +- shippable.yml | 2 +- test/integration/apt.pem | 90 +- test/integration/framework | 21 + .../skip-bug-601016-description-translation | 13 +- test/integration/test-apt-cache-showsrc | 6 +- test/integration/test-apt-cli-show | 76 + test/integration/test-apt-get-install-deb | 10 +- test/integration/test-apt-get-remove-depends | 29 + test/integration/test-apt-get-satisfy | 76 + test/integration/test-apt-patterns | 235 ++ .../test-apt-update-repeated-ims-hit | 75 + test/integration/test-apt-update-simple | 4 + test/integration/test-authentication-basic | 44 +- ...test-bug-490000-search-in-all-translations | 107 + test/integration/test-hashsum-verification | 2 +- .../integration/test-kernel-helper-autoremove | 12 +- .../test-packages-require-authorization | 61 - test/integration/test-provides-arch-all | 28 + test/integration/test-proxy-connect | 22 + test/interactive-helper/CMakeLists.txt | 4 +- test/interactive-helper/aptwebserver.cc | 4 +- test/libapt/CMakeLists.txt | 57 +- test/libapt/authconf_test.cc | 81 +- test/libapt/extracttar_test.cc | 1 + test/libapt/hashsums_test.cc | 142 +- test/libapt/pattern_test.cc | 222 ++ test/libapt/stringview_test.cc | 3 - test/libapt/tagfile_test.cc | 58 + triehash/.travis.yml | 14 - triehash/LICENSE.md | 17 - triehash/README.md | 58 - triehash/tests/framework.sh | 84 - triehash/tests/run-tests.sh | 22 - triehash/tests/test-basic | 245 -- triehash/tests/test-case-insensitive | 109 - triehash/tests/test-enum-include-name-flags | 129 - triehash/tests/test-multi-byte-level | 427 --- triehash/triehash.pl | 691 ---- vendor/getinfo | 4 +- vendor/ubuntu/apt.conf-01-vendor-ubuntu | 1 + 326 files changed, 23677 insertions(+), 20285 deletions(-) create mode 100644 CMake/FindGcrypt.cmake delete mode 100644 apt-inst/CMakeLists.txt delete mode 100644 apt-inst/dpkg-diffs.txt delete mode 100644 apt-inst/extract.cc delete mode 100644 apt-inst/extract.h delete mode 100644 apt-inst/filelist.cc delete mode 100644 apt-inst/filelist.h create mode 100644 apt-pkg/apt-pkg.pc.in create mode 100644 apt-pkg/cachefilter-patterns.cc create mode 100644 apt-pkg/cachefilter-patterns.h rename {apt-inst => apt-pkg}/contrib/arfile.cc (100%) rename {apt-inst => apt-pkg}/contrib/arfile.h (91%) delete mode 100644 apt-pkg/contrib/crc-16.cc delete mode 100644 apt-pkg/contrib/crc-16.h rename {apt-inst => apt-pkg}/contrib/extracttar.cc (99%) rename {apt-inst => apt-pkg}/contrib/extracttar.h (85%) delete mode 100644 apt-pkg/contrib/hashsum.cc delete mode 100644 apt-pkg/contrib/hashsum_template.h delete mode 100644 apt-pkg/contrib/md5.cc delete mode 100644 apt-pkg/contrib/md5.h delete mode 100644 apt-pkg/contrib/sha1.cc delete mode 100644 apt-pkg/contrib/sha1.h delete mode 100644 apt-pkg/contrib/sha2.h delete mode 100644 apt-pkg/contrib/sha256.h delete mode 100644 apt-pkg/contrib/sha2_internal.cc delete mode 100644 apt-pkg/contrib/sha2_internal.h delete mode 100644 apt-pkg/contrib/sptr.h rename {apt-inst => apt-pkg}/deb/debfile.cc (100%) rename {apt-inst => apt-pkg}/deb/debfile.h (84%) rename {apt-inst => apt-pkg}/dirstream.cc (100%) rename {apt-inst => apt-pkg}/dirstream.h (98%) delete mode 100644 apt-pkg/tagfile-compat.cc delete mode 100644 debian/compat delete mode 100644 debian/libapt-inst2.0.install delete mode 100644 debian/libapt-inst2.0.symbols rename debian/{libapt-pkg5.0.install => libapt-pkg6.0.install} (100%) rename debian/{libapt-pkg5.0.symbols => libapt-pkg6.0.symbols} (50%) create mode 100644 debian/tests/pkg-config-test create mode 100644 doc/apt-patterns.7.xml create mode 100755 test/integration/test-apt-get-remove-depends create mode 100755 test/integration/test-apt-get-satisfy create mode 100755 test/integration/test-apt-patterns create mode 100755 test/integration/test-apt-update-repeated-ims-hit create mode 100755 test/integration/test-bug-490000-search-in-all-translations delete mode 100755 test/integration/test-packages-require-authorization create mode 100755 test/integration/test-provides-arch-all create mode 100755 test/integration/test-proxy-connect create mode 100644 test/libapt/pattern_test.cc delete mode 100644 triehash/.travis.yml delete mode 100644 triehash/LICENSE.md delete mode 100644 triehash/README.md delete mode 100644 triehash/tests/framework.sh delete mode 100755 triehash/tests/run-tests.sh delete mode 100755 triehash/tests/test-basic delete mode 100755 triehash/tests/test-case-insensitive delete mode 100755 triehash/tests/test-enum-include-name-flags delete mode 100755 triehash/tests/test-multi-byte-level delete mode 100755 triehash/triehash.pl diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c1eb511..6a6ff06 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1 +1,39 @@ -include: https://nest.parrotsec.org/parrot-organization/ci/raw/master/deb-build.yml +image: debian:unstable +variables: + DEBIAN_FRONTEND: noninteractive + CCACHE_DIR: $CI_PROJECT_DIR/.ccache + CCACHE_BASEDIR: $CI_PROJECT_DIR +cache: + paths: + - .ccache + +test as root: + stage: test + script: + - adduser --home /home/travis travis --quiet --disabled-login --gecos "" --uid 1000 + - rm -f /etc/dpkg/dpkg.cfg.d/excludes + - apt-get update + - apt-get install -qq build-essential expect sudo ccache + - chmod -R o+rwX $PWD + - ./prepare-release travis-ci + - sudo -u travis mkdir -p build .ccache + - sudo -u travis env -C build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -G Ninja .. + - sudo -u travis --preserve-env=CCACHE_DIR,CCACHE_BASEDIR ninja -C build + - CTEST_OUTPUT_ON_FAILURE=1 ninja -C build test + - unbuffer ./test/integration/run-tests -q -j 4 + +test as user: + stage: test + script: + - adduser --home /home/travis travis --quiet --disabled-login --gecos "" --uid 1000 + - rm -f /etc/dpkg/dpkg.cfg.d/excludes + - apt-get update + - apt-get install -qq build-essential expect sudo ccache + - chmod 755 /root + - chmod -R o+rwX $PWD + - ./prepare-release travis-ci + - sudo -u travis mkdir -p build .ccache + - sudo -u travis env -C build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -G Ninja .. + - sudo -u travis --preserve-env=CCACHE_DIR,CCACHE_BASEDIR ninja -C build + - sudo -u travis CTEST_OUTPUT_ON_FAILURE=1 ninja -C build test + - sudo -u travis unbuffer ./test/integration/run-tests -q -j 4 diff --git a/CMake/FindGcrypt.cmake b/CMake/FindGcrypt.cmake new file mode 100644 index 0000000..56bfc9f --- /dev/null +++ b/CMake/FindGcrypt.cmake @@ -0,0 +1,25 @@ +# - Try to find GCRYPT +# Once done, this will define +# +# GCRYPT_FOUND - system has GCRYPT +# GCRYPT_INCLUDE_DIRS - the GCRYPT include directories +# GCRYPT_LIBRARIES - the GCRYPT library +find_package(PkgConfig) + +pkg_check_modules(GCRYPT_PKGCONF libgcrypt) + +find_path(GCRYPT_INCLUDE_DIRS + NAMES gcrypt.h + PATHS ${GCRYPT_PKGCONF_INCLUDE_DIRS} +) + + +find_library(GCRYPT_LIBRARIES + NAMES gcrypt + PATHS ${GCRYPT_PKGCONF_LIBRARY_DIRS} +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(GCRYPT DEFAULT_MSG GCRYPT_INCLUDE_DIRS GCRYPT_LIBRARIES) + +mark_as_advanced(GCRYPT_INCLUDE_DIRS GCRYPT_LIBRARIES) diff --git a/CMake/config.h.in b/CMake/config.h.in index a9528cc..911d424 100644 --- a/CMake/config.h.in +++ b/CMake/config.h.in @@ -64,6 +64,9 @@ /* The mail address to reach upstream */ #define PACKAGE_MAIL "${PACKAGE_MAIL}" +/* Guard for code that should only be emitted when compiling apt */ +#define APT_COMPILING_APT + /* Various directories */ #cmakedefine CMAKE_INSTALL_FULL_BINDIR "${CMAKE_INSTALL_FULL_BINDIR}" #cmakedefine STATE_DIR "${STATE_DIR}" @@ -81,10 +84,5 @@ #cmakedefine HAVE_FMV_SSE42_AND_CRC32 #cmakedefine HAVE_FMV_SSE42_AND_CRC32DI -#define APT_8_CLEANER_HEADERS -#define APT_9_CLEANER_HEADERS -#define APT_10_CLEANER_HEADERS -#define APT_15_CLEANER_HEADERS - /* unrolling is faster combined with an optimizing compiler */ #define SHA2_UNROLL_TRANSFORM diff --git a/CMakeLists.txt b/CMakeLists.txt index 5bdbd22..41a8877 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,7 @@ include_directories(${PROJECT_BINARY_DIR}/include) enable_testing() option(WITH_DOC "Build documentation." ON) +option(WITH_TESTS "Build tests" ON) option(USE_NLS "Localisation support." ON) set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMake") @@ -38,6 +39,12 @@ find_package(Iconv REQUIRED) find_package(Perl REQUIRED) +find_program(TRIEHASH_EXECUTABLE NAMES triehash) + +if (NOT TRIEHASH_EXECUTABLE) + message(FATAL_ERROR "Could not find triehash executable") +endif() + if(USE_NLS) find_package(Intl REQUIRED) link_libraries(${Intl_LIBRARIES}) @@ -50,7 +57,7 @@ add_definitions(${LFS_DEFINITIONS}) link_libraries(${LFS_LIBRARIES}) # Set compiler flags -set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) @@ -69,7 +76,9 @@ add_optional_compile_options(Wnoexcept) add_optional_compile_options(Wsign-promo) add_optional_compile_options(Wundef) add_optional_compile_options(Wdouble-promotion) - +add_optional_compile_options(Wsuggest-override) +add_optional_compile_options(Werror=suggest-override) +add_optional_compile_options(Werror=return-type) # apt-ftparchive dependencies find_package(BerkeleyDB REQUIRED) if (BERKELEY_DB_FOUND) @@ -125,6 +134,8 @@ if (SECCOMP_FOUND) set(HAVE_SECCOMP 1) endif() +find_package(Gcrypt REQUIRED) + # Mount()ing and stat()ing and friends check_symbol_exists(statfs sys/vfs.h HAVE_VFS_H) check_include_files(sys/params.h HAVE_PARAMS_H) @@ -178,7 +189,7 @@ if (NOT HAVE_SIGHANDLER_T) endif() # Handle resolving -check_function_exists(res_init HAVE_LIBC_RESOLV) +check_function_exists(res_ninit HAVE_LIBC_RESOLV) if(HAVE_LIBC_RESOLV) set(RESOLV_LIBRARIES) else() @@ -193,7 +204,8 @@ check_cxx_target(HAVE_FMV_SSE42_AND_CRC32DI "sse4.2" "__builtin_ia32_crc32di(0, # Configure some variables like package, version and architecture. set(PACKAGE ${PROJECT_NAME}) set(PACKAGE_MAIL "APT Development Team ") -set(PACKAGE_VERSION "1.8.2") +set(PACKAGE_VERSION "2.0.2") +string(REGEX MATCH "^[0-9.]+" PROJECT_VERSION ${PACKAGE_VERSION}) if (NOT DEFINED DPKG_DATADIR) execute_process(COMMAND ${PERL_EXECUTABLE} -MDpkg -e "print $Dpkg::DATADIR;" @@ -229,7 +241,6 @@ configure_file(CMake/apti18n.h.in ${PROJECT_BINARY_DIR}/include/apti18n.h) add_subdirectory(vendor) add_subdirectory(apt-pkg) add_subdirectory(apt-private) -add_subdirectory(apt-inst) add_subdirectory(cmdline) add_subdirectory(completions) add_subdirectory(doc) diff --git a/Dockerfile b/Dockerfile index 49934e4..c05b7c2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:buster +FROM debian:unstable COPY . /tmp WORKDIR /tmp RUN sed -i s#://deb.debian.org#://cdn-fastly.deb.debian.org# /etc/apt/sources.list \ diff --git a/README.md b/README.md index 8a8b3b6..c3db28e 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ APT === -apt is the main commandline package manager for Debian and its derivatives. -It provides commandline tools for searching and managing as well as querying +apt is the main command-line package manager for Debian and its derivatives. +It provides command-line tools for searching and managing as well as querying information about packages as well as low-level access to all features provided by the libapt-pkg and libapt-inst libraries which higher-level package managers can depend upon. @@ -13,24 +13,24 @@ Included tools are: from authenticated sources and for installation, upgrade and removal of packages together with their dependencies * **apt-cache** for querying available information about installed - as well as installable packages + as well as available packages * **apt-cdrom** to use removable media as a source for packages * **apt-config** as an interface to the configuration settings * **apt-key** as an interface to manage authentication keys * **apt-extracttemplates** to be used by debconf to prompt for configuration questions before installation * **apt-ftparchive** creates Packages and other index files - needed to publish an archive of debian packages + needed to publish an archive of deb packages * **apt-sortpkgs** is a Packages/Sources file normalizer -* **apt** is a high-level commandline interface for better interactive usage +* **apt** is a high-level command-line interface for better interactive usage The libraries libapt-pkg and libapt-inst are also maintained as part of this project, -alongside various additional binaries like the acquire-methods used by them. +alongside various additional binaries like the acquire methods used by them. Bindings for Python ([python-apt](https://tracker.debian.org/pkg/python-apt)) and Perl ([libapt-pkg-perl](https://tracker.debian.org/pkg/libapt-pkg-perl)) are available as separated projects. -Discussion happens mostly on [the mailinglist](mailto:deity@lists.debian.org) ([archive](https://lists.debian.org/deity/)) and on [IRC](irc://irc.oftc.net/debian-apt). -Our bugtracker as well as a general overview can be found at the [Debian Tracker page](https://tracker.debian.org/pkg/apt). +Discussion happens mostly on [the mailing list](mailto:deity@lists.debian.org) ([archive](https://lists.debian.org/deity/)) and on [IRC](irc://irc.oftc.net/debian-apt). +Our bug tracker as well as a general overview can be found at the [Debian Tracker page](https://tracker.debian.org/pkg/apt). Contributing @@ -46,7 +46,7 @@ are encouraged to do as well. ### Coding -APT uses cmake. To start building, you need to run +APT uses CMake. To start building, you need to run cmake @@ -55,15 +55,15 @@ run: cmake . -Then you can use make as you normally would (pass -j to perform +Then you can use make as you normally would (pass `-j ` to perform `` jobs in parallel). -You can also use the Ninja generator of cmake, to do that pass +You can also use the Ninja generator of CMake, to do that pass -G Ninja to the cmake invocation, and then use ninja instead of make. The source code uses in most parts a relatively uncommon indent convention, -namely 3 spaces with 8 space tab (see [doc/style.txt](https://anonscm.debian.org/git/apt/apt.git/tree/doc/style.txt) for more on this). +namely 3 spaces with 8 space tab (see [doc/style.txt](./doc/style.txt) for more on this). Adhering to it avoids unnecessary code-churn destroying history (aka: `git blame`) and you are therefore encouraged to write patches in this style. Your editor can surely help you with this, for vim the settings would be @@ -73,23 +73,23 @@ Your editor can surely help you with this, for vim the settings would be ### Translations While we welcome contributions here, we highly encourage you to contact the [Debian Internationalization (i18n) team](https://wiki.debian.org/Teams/I18n). -Various language teams have formed which can help you creating, maintaining -and improving a translation, while we could only do a basic syntax check of the +Various language teams have formed which can help you create, maintain +and improve a translation, while we could only do a basic syntax check of the file format… -Further more, Translating APT is split into two independent parts: +Further more, translating APT is split into two independent parts: The program translation, meaning the messages printed by the tools, -as well as the manpages and other documentation shipped with APT. +as well as the manual pages and other documentation shipped with APT. ### Bug triage -Software tools like APT which are used by thousands of users every -day have a steady flow of incoming bugreports. Not all of them are really -bugs in APT: It can be packaging bugs like failing maintainer scripts a -user reports against apt, because apt was the command he executed leading -to this failure or various wishlist items for new features. Given enough time -also the occasional duplicate enters the system. -Our bugtracker is therefore full with open bugreports which are waiting for you! ;) +Software tools like APT, which are used by thousands of users every +day, have a steady flow of incoming bug reports. Not all of them are really +bugs in APT: It can be packaging bugs, like failing maintainer scripts, that a +user reports against apt, because apt was the command they executed that lead +to this failure; or various wishlist items for new features. Given enough time +the occasional duplicate enters the system as well. +Our bug tracker is therefore full with open bug reports which are waiting for you! ;) Testing ------- @@ -101,17 +101,17 @@ automatically inserts an rpath so the binaries find the correct libraries. Note that you have to invoke CMake with the right install prefix set (e.g. `-DCMAKE_INSTALL_PREFIX=/usr`) to have your build find and use the right files -by default or alternatively set the locations at runtime via an `APT_CONFIG` +by default or alternatively set the locations at run-time via an `APT_CONFIG` configuration file. ### Integration tests -There is an extensive integration testsuite available which can be run via: +There is an extensive integration test suite available which can be run via: $ ./test/integration/run-tests Each test can also be run individually as well. The tests are very noisy by -default, especially so while running all of them it might be beneficial to +default, especially so while running all of them; it might be beneficial to enabling quiet (`-q`) or very quiet (`-qq`) mode. The tests can also be run in parallel via `-j X` where `X` is the number of jobs to run. @@ -121,7 +121,7 @@ run them on [Travis CI](https://travis-ci.org/) and [Shippable](https://shippable.com/) as well as via autopkgtests e.g. on [Debian Continuous Integration](https://ci.debian.net/packages/a/apt/). -A testcase here is a shellscript embedded in a framework creating an environment in which +A test case here is a shell script embedded in a framework creating an environment in which apt tools can be used naturally without root-rights to test every aspect of its behavior itself as well as in conjunction with dpkg and other tools while working with packages. @@ -137,24 +137,24 @@ Debugging --------- APT does many things, so there is no central debug mode which could be -activated. It uses instead various config-options to activate debug output +activated. Instead, it uses various configuration options to activate debug output in certain areas. The following describes some common scenarios and generally useful options, but is in no way exhaustive. -Note that you should *NEVER* use these settings as root to avoid accidents. +Note that, to avoid accidents, you should *NEVER* use these settings as root. Simulation mode (`-s`) is usually sufficient to help you run apt as a non-root user. ### Using different state files -If a dependency solver bug is reported, but can't be reproduced by the -triager easily, it is beneficial to ask the reporter for the -`/var/lib/dpkg/status` file, which includes the packages installed on the +If a dependency solver bug is reported, but can't easily be reproduced by the +triager, it is beneficial to ask the reporter for the +`/var/lib/dpkg/status` file which includes the packages installed on the system and in which version. Such a file can then be used via the option `dir::state::status`. Beware of different architecture settings! -Bugreports usually include this information in the template. Assuming you +Bug reports usually include this information in the template. Assuming you already have the `Packages` files for the architecture (see `sources.list` manpage for the `arch=` option) you can change to a different architecture -with a config file like: +with a configuration file like: APT::Architecture "arch1"; #clear APT::Architectures; @@ -173,8 +173,8 @@ APT works in its internal resolver in two stages: First all packages are visited and marked for installation, keep back or removal. Option `Debug::pkgDepCache::Marker` shows this. This also decides which packages are to be installed to satisfy dependencies, which can be seen by `Debug::pkgDepCache::AutoInstall`. After this is done, we might -be in a situation in which two packages want to be installed, but only on of them can be. -It is the job of the pkgProblemResolver to decide which of two packages 'wins' and can +be in a situation in which two packages want to be installed, but only one of them can be. +It is the job of the `pkgProblemResolver` to decide which of two packages 'wins' and can therefore decide what has to happen. You can see the contenders as well as their fight and the resulting resolution with `Debug::pkgProblemResolver`. @@ -184,13 +184,13 @@ Various binaries (called 'methods') are tasked with downloading files. The Acqui talks to them via simple text protocol. Depending on which side you want to see, either `Debug::pkgAcquire::Worker` or `Debug::Acquire::http` (or similar) will show the messages. -The integration tests use a simple self-built webserver which also logs. If you find that -the http(s) methods do not behave like they should be try to implement this behavior in the +The integration tests use a simple self-built web server (`webserver`) which also logs. If you find that +the http(s) methods do not behave like they should be try to implement this behavior in webserver for simpler and more controlled testing. ### Installation order -Dependencies are solved, packages downloaded: Everything read for the installation! +Dependencies are solved, packages downloaded: Everything is ready for the installation! The last step in the chain is often forgotten, but still very important: Packages have to be installed in a particular order so that their dependencies are satisfied, but at the same time you don't want to install very important and optional @@ -207,9 +207,9 @@ Additional documentation Many more things could and should be said about APT and its usage but are more targeted at developers of related programs or only of special interest. -* [Protocol specification of APTs communication with external dependency solvers (EDSP)](./doc/external-dependency-solver-protocol.md) -* [Protocol specification of APTs communication with external installation planners (EIPP)](./doc/external-installation-planner-protocol.md) -* [Howto use and configure APT to acquire additional files in 'update' operations](./doc/acquire-additional-files.md) +* [Protocol specification of APT's communication with external dependency solvers (EDSP)](./doc/external-dependency-solver-protocol.md) +* [Protocol specification of APT's communication with external installation planners (EIPP)](./doc/external-installation-planner-protocol.md) +* [How to use and configure APT to acquire additional files in 'update' operations](./doc/acquire-additional-files.md) * [Download and package installation progress reporting details](./doc/progress-reporting.md) * [Remarks on DNS SRV record support in APT](./doc/srv-records-support.md) * [Protocol specification of APT interfacing with external hooks via JSON](./doc/json-hooks-protocol.md) diff --git a/abicheck/apt_build.xml.in b/abicheck/apt_build.xml.in index 32886d9..ec39466 100644 --- a/abicheck/apt_build.xml.in +++ b/abicheck/apt_build.xml.in @@ -8,5 +8,4 @@ @build_path@/apt-pkg/ - @build_path@/apt-inst/ diff --git a/apt-inst/CMakeLists.txt b/apt-inst/CMakeLists.txt deleted file mode 100644 index 31da115..0000000 --- a/apt-inst/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -# Include apt-pkg directly, as some files have #include -include_directories(${PROJECT_BINARY_DIR}/include/apt-pkg) - -# Set the version of the library -set(MAJOR 2.0) -set(MINOR 0) -set(APT_INST_MAJOR ${MAJOR} PARENT_SCOPE) - -# Definition of the C++ files used to build the library - note that this -# is expanded at CMake time, so you have to rerun cmake if you add or remove -# a file (you can just run cmake . in the build directory) -file(GLOB_RECURSE library "*.cc") -file(GLOB_RECURSE headers "*.h") - -# Create a library using the C++ files -add_library(apt-inst SHARED ${library}) - -# Link the library and set the SONAME -target_link_libraries(apt-inst PUBLIC apt-pkg ${CMAKE_THREAD_LIBS_INIT}) -target_link_libraries(apt-inst PRIVATE ${CMAKE_THREAD_LIBS_INIT}) -set_target_properties(apt-inst PROPERTIES VERSION ${MAJOR}.${MINOR}) -set_target_properties(apt-inst PROPERTIES SOVERSION ${MAJOR}) -add_version_script(apt-inst) - -# Install the library and the headers -install(TARGETS apt-inst LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) -install(FILES ${headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/apt-pkg) -flatify(${PROJECT_BINARY_DIR}/include/apt-pkg/ "${headers}") diff --git a/apt-inst/dpkg-diffs.txt b/apt-inst/dpkg-diffs.txt deleted file mode 100644 index d161055..0000000 --- a/apt-inst/dpkg-diffs.txt +++ /dev/null @@ -1,5 +0,0 @@ -- Replacing directories with files - dpkg permits this with the weak condition that the directory is owned only - by the package. APT requires that the directory have no files that are not - owned by the package. Replaces are specifically not checked to prevent - file list corruption. diff --git a/apt-inst/extract.cc b/apt-inst/extract.cc deleted file mode 100644 index 35fa015..0000000 --- a/apt-inst/extract.cc +++ /dev/null @@ -1,514 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -/* ###################################################################### - - Archive Extraction Directory Stream - - Extraction for each file is a bit of an involved process. Each object - undergoes an atomic backup, overwrite, erase sequence. First the - object is unpacked to '.dpkg.new' then the original is hardlinked to - '.dpkg.tmp' and finally the new object is renamed to overwrite the old - one. From an external perspective the file never ceased to exist. - After the archive has been successfully unpacked the .dpkg.tmp files - are erased. A failure causes all the .dpkg.tmp files to be restored. - - Decisions about unpacking go like this: - - Store the original filename in the file listing - - Resolve any diversions that would effect this file, all checks - below apply to the diverted name, not the real one. - - Resolve any symlinked configuration files. - - If the existing file does not exist then .dpkg-tmp is checked for. - [Note, this is reduced to only check if a file was expected to be - there] - - If the existing link/file is not a directory then it is replaced - regardless - - If the existing link/directory is being replaced by a directory then - absolutely nothing happens. - - If the existing link/directory is being replaced by a link then - absolutely nothing happens. - - If the existing link/directory is being replaced by a non-directory - then this will abort if the package is not the sole owner of the - directory. [Note, this is changed to not happen if the directory - non-empty - that is, it only includes files that are part of this - package - prevents removing user files accidentally.] - - If the non-directory exists in the listing database and it - does not belong to the current package then an overwrite condition - is invoked. - - As we unpack we record the file list differences in the FL cache. If - we need to unroll the FL cache knows which files have been unpacked - and can undo. When we need to erase then it knows which files have not - been unpacked. - - ##################################################################### */ - /*}}}*/ -// Include Files /*{{{*/ -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - /*}}}*/ -using namespace std; - -static const char *TempExt = "dpkg-tmp"; -//static const char *NewExt = "dpkg-new"; - -// Extract::pkgExtract - Constructor /*{{{*/ -// --------------------------------------------------------------------- -/* */ -pkgExtract::pkgExtract(pkgFLCache &FLCache,pkgCache::VerIterator Ver) : - FLCache(FLCache), Ver(Ver) -{ - FLPkg = FLCache.GetPkg(Ver.ParentPkg().Name(),true); - if (FLPkg.end() == true) - return; - Debug = true; -} - /*}}}*/ -// Extract::DoItem - Handle a single item from the stream /*{{{*/ -// --------------------------------------------------------------------- -/* This performs the setup for the extraction.. */ -bool pkgExtract::DoItem(Item &Itm, int &/*Fd*/) -{ - /* Strip any leading/trailing /s from the filename, then copy it to the - temp buffer and re-apply the leading / We use a class variable - to store the new filename for use by the three extraction funcs */ - char *End = FileName+1; - const char *I = Itm.Name; - for (; *I != 0 && *I == '/'; I++); - *FileName = '/'; - for (; *I != 0 && End < FileName + sizeof(FileName); I++, End++) - *End = *I; - if (End + 20 >= FileName + sizeof(FileName)) - return _error->Error(_("The path %s is too long"),Itm.Name); - for (; End > FileName && End[-1] == '/'; End--); - *End = 0; - Itm.Name = FileName; - - /* Lookup the file. Nde is the file [group] we are going to write to and - RealNde is the actual node we are manipulating. Due to diversions - they may be entirely different. */ - pkgFLCache::NodeIterator Nde = FLCache.GetNode(Itm.Name,End,0,false,false); - pkgFLCache::NodeIterator RealNde = Nde; - - // See if the file is already in the file listing - unsigned long FileGroup = RealNde->File; - for (; RealNde.end() == false && FileGroup == RealNde->File; RealNde++) - if (RealNde.RealPackage() == FLPkg) - break; - - // Nope, create an entry - if (RealNde.end() == true) - { - RealNde = FLCache.GetNode(Itm.Name,End,FLPkg.Offset(),true,false); - if (RealNde.end() == true) - return false; - RealNde->Flags |= pkgFLCache::Node::NewFile; - } - - /* Check if this entry already was unpacked. The only time this should - ever happen is if someone has hacked tar to support capabilities, in - which case this needs to be modified anyhow.. */ - if ((RealNde->Flags & pkgFLCache::Node::Unpacked) == - pkgFLCache::Node::Unpacked) - return _error->Error(_("Unpacking %s more than once"),Itm.Name); - - if (Nde.end() == true) - Nde = RealNde; - - /* Consider a diverted file - We are not permitted to divert directories, - but everything else is fair game (including conf files!) */ - if ((Nde->Flags & pkgFLCache::Node::Diversion) != 0) - { - if (Itm.Type == Item::Directory) - return _error->Error(_("The directory %s is diverted"),Itm.Name); - - /* A package overwriting a diversion target is just the same as - overwriting a normally owned file and is checked for below in - the overwrites mechanism */ - - /* If this package is trying to overwrite the target of a diversion, - that is never, ever permitted */ - pkgFLCache::DiverIterator Div = Nde.Diversion(); - if (Div.DivertTo() == Nde) - return _error->Error(_("The package is trying to write to the " - "diversion target %s/%s"),Nde.DirN(),Nde.File()); - - // See if it is us and we are following it in the right direction - if (Div->OwnerPkg != FLPkg.Offset() && Div.DivertFrom() == Nde) - { - Nde = Div.DivertTo(); - End = FileName + snprintf(FileName,sizeof(FileName)-20,"%s/%s", - Nde.DirN(),Nde.File()); - if (End <= FileName) - return _error->Error(_("The diversion path is too long")); - } - } - - // Deal with symlinks and conf files - if ((RealNde->Flags & pkgFLCache::Node::NewConfFile) == - pkgFLCache::Node::NewConfFile) - { - string Res = flNoLink(Itm.Name); - if (Res.length() > sizeof(FileName)) - return _error->Error(_("The path %s is too long"),Res.c_str()); - if (Debug == true) - clog << "Followed conf file from " << FileName << " to " << Res << endl; - Itm.Name = strcpy(FileName,Res.c_str()); - } - - /* Get information about the existing file, and attempt to restore - a backup if it does not exist */ - struct stat LExisting; - bool EValid = false; - if (lstat(Itm.Name,&LExisting) != 0) - { - // This is bad news. - if (errno != ENOENT) - return _error->Errno("stat",_("Failed to stat %s"),Itm.Name); - - // See if we can recover the backup file - if (Nde.end() == false) - { - char Temp[sizeof(FileName)]; - snprintf(Temp,sizeof(Temp),"%s.%s",Itm.Name,TempExt); - if (rename(Temp,Itm.Name) != 0 && errno != ENOENT) - return _error->Errno("rename",_("Failed to rename %s to %s"), - Temp,Itm.Name); - if (stat(Itm.Name,&LExisting) != 0) - { - if (errno != ENOENT) - return _error->Errno("stat",_("Failed to stat %s"),Itm.Name); - } - else - EValid = true; - } - } - else - EValid = true; - - /* If the file is a link we need to stat its destination, get the - existing file modes */ - struct stat Existing = LExisting; - if (EValid == true && S_ISLNK(Existing.st_mode)) - { - if (stat(Itm.Name,&Existing) != 0) - { - if (errno != ENOENT) - return _error->Errno("stat",_("Failed to stat %s"),Itm.Name); - Existing = LExisting; - } - } - - // We pretend a non-existing file looks like it is a normal file - if (EValid == false) - Existing.st_mode = S_IFREG; - - /* Okay, at this point 'Existing' is the stat information for the - real non-link file */ - - /* The only way this can be a no-op is if a directory is being - replaced by a directory or by a link */ - if (S_ISDIR(Existing.st_mode) != 0 && - (Itm.Type == Item::Directory || Itm.Type == Item::SymbolicLink)) - return true; - - /* Non-Directory being replaced by non-directory. We check for over - writes here. */ - if (Nde.end() == false) - { - if (HandleOverwrites(Nde) == false) - return false; - } - - /* Directory being replaced by a non-directory - this needs to see if - the package is the owner and then see if the directory would be - empty after the package is removed [ie no user files will be - erased] */ - if (S_ISDIR(Existing.st_mode) != 0) - { - if (CheckDirReplace(Itm.Name) == false) - return _error->Error(_("The directory %s is being replaced by a non-directory"),Itm.Name); - } - - if (Debug == true) - clog << "Extract " << string(Itm.Name,End) << endl; -/* if (Count != 0) - return _error->Error(_("Done"));*/ - - return true; -} - /*}}}*/ -// Extract::Finished - Sequence finished, erase the temp files /*{{{*/ -// --------------------------------------------------------------------- -/* */ -APT_PURE bool pkgExtract::Finished() -{ - return true; -} - /*}}}*/ -// Extract::Aborted - Sequence aborted, undo all our unpacking /*{{{*/ -// --------------------------------------------------------------------- -/* This undoes everything that was done by all calls to the DoItem method - and restores the File Listing cache to its original form. It bases its - actions on the flags value for each node in the cache. */ -bool pkgExtract::Aborted() -{ - if (Debug == true) - clog << "Aborted, backing out" << endl; - - pkgFLCache::NodeIterator Files = FLPkg.Files(); - map_ptrloc *Last = &FLPkg->Files; - - /* Loop over all files, restore those that have been unpacked from their - dpkg-tmp entries */ - while (Files.end() == false) - { - // Locate the hash bucket for the node and locate its group head - pkgFLCache::NodeIterator Nde(FLCache,FLCache.HashNode(Files)); - for (; Nde.end() == false && Files->File != Nde->File; Nde++); - if (Nde.end() == true) - return _error->Error(_("Failed to locate node in its hash bucket")); - - if (snprintf(FileName,sizeof(FileName)-20,"%s/%s", - Nde.DirN(),Nde.File()) <= 0) - return _error->Error(_("The path is too long")); - - // Deal with diversions - if ((Nde->Flags & pkgFLCache::Node::Diversion) != 0) - { - pkgFLCache::DiverIterator Div = Nde.Diversion(); - - // See if it is us and we are following it in the right direction - if (Div->OwnerPkg != FLPkg.Offset() && Div.DivertFrom() == Nde) - { - Nde = Div.DivertTo(); - if (snprintf(FileName,sizeof(FileName)-20,"%s/%s", - Nde.DirN(),Nde.File()) <= 0) - return _error->Error(_("The diversion path is too long")); - } - } - - // Deal with overwrites+replaces - for (; Nde.end() == false && Files->File == Nde->File; Nde++) - { - if ((Nde->Flags & pkgFLCache::Node::Replaced) == - pkgFLCache::Node::Replaced) - { - if (Debug == true) - clog << "De-replaced " << FileName << " from " << Nde.RealPackage()->Name << endl; - Nde->Flags &= ~pkgFLCache::Node::Replaced; - } - } - - // Undo the change in the filesystem - if (Debug == true) - clog << "Backing out " << FileName; - - // Remove a new node - if ((Files->Flags & pkgFLCache::Node::NewFile) == - pkgFLCache::Node::NewFile) - { - if (Debug == true) - clog << " [new node]" << endl; - pkgFLCache::Node *Tmp = Files; - Files++; - *Last = Tmp->NextPkg; - Tmp->NextPkg = 0; - - FLCache.DropNode(Tmp - FLCache.NodeP); - } - else - { - if (Debug == true) - clog << endl; - - Last = &Files->NextPkg; - Files++; - } - } - - return true; -} - /*}}}*/ -// Extract::Fail - Extraction of a file Failed /*{{{*/ -// --------------------------------------------------------------------- -/* */ -bool pkgExtract::Fail(Item &Itm,int Fd) -{ - return pkgDirStream::Fail(Itm,Fd); -} - /*}}}*/ -// Extract::FinishedFile - Finished a file /*{{{*/ -// --------------------------------------------------------------------- -/* */ -bool pkgExtract::FinishedFile(Item &Itm,int Fd) -{ - return pkgDirStream::FinishedFile(Itm,Fd); -} - /*}}}*/ -// Extract::HandleOverwrites - See if a replaces covers this overwrite /*{{{*/ -// --------------------------------------------------------------------- -/* Check if the file is in a package that is being replaced by this - package or if the file is being overwritten. Note that if the file - is really a directory but it has been erased from the filesystem - this will fail with an overwrite message. This is a limitation of the - dpkg file information format. - - XX If a new package installs and another package replaces files in this - package what should we do? */ -bool pkgExtract::HandleOverwrites(pkgFLCache::NodeIterator Nde, - bool DiverCheck) -{ - pkgFLCache::NodeIterator TmpNde = Nde; - unsigned long DiverOwner = 0; - unsigned long FileGroup = Nde->File; - for (; Nde.end() == false && FileGroup == Nde->File; Nde++) - { - if ((Nde->Flags & pkgFLCache::Node::Diversion) != 0) - { - /* Store the diversion owner if this is the forward direction - of the diversion */ - if (DiverCheck == true) - DiverOwner = Nde.Diversion()->OwnerPkg; - continue; - } - - pkgFLCache::PkgIterator FPkg(FLCache,Nde.RealPackage()); - if (FPkg.end() == true || FPkg == FLPkg) - continue; - - /* This tests trips when we are checking a diversion to see - if something has already been diverted by this diversion */ - if (FPkg.Offset() == DiverOwner) - continue; - - // Now see if this package matches one in a replace depends - pkgCache::DepIterator Dep = Ver.DependsList(); - bool Ok = false; - for (; Dep.end() == false; ++Dep) - { - if (Dep->Type != pkgCache::Dep::Replaces) - continue; - - // Does the replaces apply to this package? - if (strcmp(Dep.TargetPkg().Name(),FPkg.Name()) != 0) - continue; - - /* Check the version for match. I do not think CurrentVer can be - 0 if we are here.. */ - pkgCache::PkgIterator Pkg = Dep.TargetPkg(); - if (Pkg->CurrentVer == 0) - { - _error->Warning(_("Overwrite package match with no version for %s"),Pkg.Name()); - continue; - } - - // Replaces is met - if (debVS.CheckDep(Pkg.CurrentVer().VerStr(),Dep->CompareOp,Dep.TargetVer()) == true) - { - if (Debug == true) - clog << "Replaced file " << Nde.DirN() << '/' << Nde.File() << " from " << Pkg.Name() << endl; - Nde->Flags |= pkgFLCache::Node::Replaced; - Ok = true; - break; - } - } - - // Negative Hit - if (Ok == false) - return _error->Error(_("File %s/%s overwrites the one in the package %s"), - Nde.DirN(),Nde.File(),FPkg.Name()); - } - - /* If this is a diversion we might have to recurse to process - the other side of it */ - if ((TmpNde->Flags & pkgFLCache::Node::Diversion) != 0) - { - pkgFLCache::DiverIterator Div = TmpNde.Diversion(); - if (Div.DivertTo() == TmpNde) - return HandleOverwrites(Div.DivertFrom(),true); - } - - return true; -} - /*}}}*/ -// Extract::CheckDirReplace - See if this directory can be erased /*{{{*/ -// --------------------------------------------------------------------- -/* If this directory is owned by a single package and that package is - replacing it with something non-directoryish then dpkg allows this. - We increase the requirement to be that the directory is non-empty after - the package is removed */ -bool pkgExtract::CheckDirReplace(string Dir,unsigned int Depth) -{ - // Looping? - if (Depth > 40) - return false; - - if (Dir[Dir.size() - 1] != '/') - Dir += '/'; - - DIR *D = opendir(Dir.c_str()); - if (D == 0) - return _error->Errno("opendir",_("Unable to read %s"),Dir.c_str()); - - string File; - for (struct dirent *Dent = readdir(D); Dent != 0; Dent = readdir(D)) - { - // Skip some files - if (strcmp(Dent->d_name,".") == 0 || - strcmp(Dent->d_name,"..") == 0) - continue; - - // Look up the node - File = Dir + Dent->d_name; - pkgFLCache::NodeIterator Nde = FLCache.GetNode(File.c_str(), - File.c_str() + File.length(),0,false,false); - - // The file is not owned by this package - if (Nde.end() != false || Nde.RealPackage() != FLPkg) - { - closedir(D); - return false; - } - - // See if it is a directory - struct stat St; - if (lstat(File.c_str(),&St) != 0) - { - closedir(D); - return _error->Errno("lstat",_("Unable to stat %s"),File.c_str()); - } - - // Recurse down directories - if (S_ISDIR(St.st_mode) != 0) - { - if (CheckDirReplace(File,Depth + 1) == false) - { - closedir(D); - return false; - } - } - } - - // No conflicts - closedir(D); - return true; -} - /*}}}*/ diff --git a/apt-inst/extract.h b/apt-inst/extract.h deleted file mode 100644 index 4b4c8d7..0000000 --- a/apt-inst/extract.h +++ /dev/null @@ -1,49 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -/* ###################################################################### - - Archive Extraction Directory Stream - - This Directory Stream implements extraction of an archive into the - filesystem. It makes the choices on what files should be unpacked and - replaces as well as guiding the actual unpacking. - - When the unpacking sequence is completed one of the two functions, - Finished or Aborted must be called. - - ##################################################################### */ - /*}}}*/ -#ifndef PKGLIB_EXTRACT_H -#define PKGLIB_EXTRACT_H - -#include -#include -#include - -#include - -class pkgExtract : public pkgDirStream -{ - pkgFLCache &FLCache; - pkgCache::VerIterator Ver; - pkgFLCache::PkgIterator FLPkg; - char FileName[1024]; - bool Debug; - - bool HandleOverwrites(pkgFLCache::NodeIterator Nde, - bool DiverCheck = false); - bool CheckDirReplace(std::string Dir,unsigned int Depth = 0); - - public: - - virtual bool DoItem(Item &Itm,int &Fd) APT_OVERRIDE; - virtual bool Fail(Item &Itm,int Fd) APT_OVERRIDE; - virtual bool FinishedFile(Item &Itm,int Fd) APT_OVERRIDE; - - bool Finished(); - bool Aborted(); - - pkgExtract(pkgFLCache &FLCache,pkgCache::VerIterator Ver); -}; - -#endif diff --git a/apt-inst/filelist.cc b/apt-inst/filelist.cc deleted file mode 100644 index 44b97d0..0000000 --- a/apt-inst/filelist.cc +++ /dev/null @@ -1,586 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -/* ###################################################################### - - File Listing - Manages a Cache of File -> Package names. - - Diversions add some significant complexity to the system. To keep - storage space down in the very special case of a diverted file no - extra bytes are allocated in the Node structure. Instead a diversion - is inserted directly into the hash table and its flag bit set. Every - lookup for that filename will always return the diversion. - - The hash buckets are stored in sorted form, with diversions having - the highest sort order. Identical files are assigned the same file - pointer, thus after a search all of the nodes owning that file can be - found by iterating down the bucket. - - Re-updates of diversions (another extremely special case) are done by - marking all diversions as untouched, then loading the entire diversion - list again, touching each diversion and then finally going back and - releasing all untouched diversions. It is assumed that the diversion - table will always be quite small and be a very irregular case. - - Diversions that are user-installed are represented by a package with - an empty name string. - - Conf files are handled like diversions by changing the meaning of the - Pointer field to point to a conf file entry - again to reduce over - head for a special case. - - ##################################################################### */ - /*}}}*/ -// Include Files /*{{{*/ -#include - -#include -#include -#include -#include - -#include -#include -#include - /*}}}*/ - -using namespace std; - -// FlCache::Header::Header - Constructor /*{{{*/ -// --------------------------------------------------------------------- -/* Initialize the header variables. These are the defaults used when - creating new caches */ -pkgFLCache::Header::Header() -{ - Signature = 0xEA3F1295; - - /* Whenever the structures change the major version should be bumped, - whenever the generator changes the minor version should be bumped. */ - MajorVersion = 1; - MinorVersion = 0; - Dirty = true; - - HeaderSz = sizeof(pkgFLCache::Header); - NodeSz = sizeof(pkgFLCache::Node); - DirSz = sizeof(pkgFLCache::Directory); - PackageSz = sizeof(pkgFLCache::Package); - DiversionSz = sizeof(pkgFLCache::Diversion); - ConfFileSz = sizeof(pkgFLCache::ConfFile); - - NodeCount = 0; - DirCount = 0; - PackageCount = 0; - DiversionCount = 0; - ConfFileCount = 0; - HashSize = 1 << 14; - - FileHash = 0; - DirTree = 0; - Packages = 0; - Diversions = 0; - UniqNodes = 0; - memset(Pools,0,sizeof(Pools)); -} - /*}}}*/ -// FLCache::Header::CheckSizes - Check if the two headers have same *sz /*{{{*/ -// --------------------------------------------------------------------- -/* Compare to make sure we are matching versions */ -APT_PURE bool pkgFLCache::Header::CheckSizes(Header &Against) const -{ - if (HeaderSz == Against.HeaderSz && - NodeSz == Against.NodeSz && - DirSz == Against.DirSz && - DiversionSz == Against.DiversionSz && - PackageSz == Against.PackageSz && - ConfFileSz == Against.ConfFileSz) - return true; - return false; -} - /*}}}*/ - -// FLCache::pkgFLCache - Constructor /*{{{*/ -// --------------------------------------------------------------------- -/* If this is a new cache then a new header and hash table are instantaited - otherwise the existing ones are mearly attached */ -pkgFLCache::pkgFLCache(DynamicMMap &Map) : Map(Map) -{ - if (_error->PendingError() == true) - return; - - LastTreeLookup = 0; - LastLookupSize = 0; - - // Apply the typecasts - HeaderP = (Header *)Map.Data(); - NodeP = (Node *)Map.Data(); - DirP = (Directory *)Map.Data(); - DiverP = (Diversion *)Map.Data(); - PkgP = (Package *)Map.Data(); - ConfP = (ConfFile *)Map.Data(); - StrP = (char *)Map.Data(); - AnyP = (unsigned char *)Map.Data(); - - // New mapping, create the basic cache structures - if (Map.Size() == 0) - { - Map.RawAllocate(sizeof(pkgFLCache::Header)); - *HeaderP = pkgFLCache::Header(); - HeaderP->FileHash = Map.RawAllocate(sizeof(pkgFLCache::Node)*HeaderP->HashSize, - sizeof(pkgFLCache::Node))/sizeof(pkgFLCache::Node); - } - - FileHash = NodeP + HeaderP->FileHash; - - // Setup the dynamic map manager - HeaderP->Dirty = true; - Map.Sync(0,sizeof(pkgFLCache::Header)); - Map.UsePools(*HeaderP->Pools,sizeof(HeaderP->Pools)/sizeof(HeaderP->Pools[0])); -} - /*}}}*/ -// FLCache::TreeLookup - Perform a lookup in a generic tree /*{{{*/ -// --------------------------------------------------------------------- -/* This is a simple generic tree lookup. The first three entries of - the Directory structure are used as a template, but any other similar - structure could be used in it's place. */ -map_ptrloc pkgFLCache::TreeLookup(map_ptrloc *Base,const char *Text, - const char *TextEnd,unsigned long Size, - unsigned int *Count,bool Insert) -{ - pkgFLCache::Directory *Dir; - - // Check our last entry cache - if (LastTreeLookup != 0 && LastLookupSize == Size) - { - Dir = (pkgFLCache::Directory *)(AnyP + LastTreeLookup*Size); - if (stringcmp(Text,TextEnd,StrP + Dir->Name) == 0) - return LastTreeLookup; - } - - while (1) - { - // Allocate a new one - if (*Base == 0) - { - if (Insert == false) - return 0; - - *Base = Map.Allocate(Size); - if (*Base == 0) - return 0; - - (*Count)++; - Dir = (pkgFLCache::Directory *)(AnyP + *Base*Size); - Dir->Name = Map.WriteString(Text,TextEnd - Text); - LastTreeLookup = *Base; - LastLookupSize = Size; - return *Base; - } - - // Compare this node - Dir = (pkgFLCache::Directory *)(AnyP + *Base*Size); - int Res = stringcmp(Text,TextEnd,StrP + Dir->Name); - if (Res == 0) - { - LastTreeLookup = *Base; - LastLookupSize = Size; - return *Base; - } - - if (Res > 0) - Base = &Dir->Left; - if (Res < 0) - Base = &Dir->Right; - } -} - /*}}}*/ -// FLCache::PrintTree - Print out a tree /*{{{*/ -// --------------------------------------------------------------------- -/* This is a simple generic tree dumper, meant for debugging. */ -void pkgFLCache::PrintTree(map_ptrloc Base,unsigned long Size) -{ - if (Base == 0) - return; - - pkgFLCache::Directory *Dir = (pkgFLCache::Directory *)(AnyP + Base*Size); - PrintTree(Dir->Left,Size); - cout << (StrP + Dir->Name) << endl; - PrintTree(Dir->Right,Size); -} - /*}}}*/ -// FLCache::GetPkg - Get a package pointer /*{{{*/ -// --------------------------------------------------------------------- -/* Locate a package by name in it's tree, this is just a wrapper for - TreeLookup */ -pkgFLCache::PkgIterator pkgFLCache::GetPkg(const char *Name,const char *NameEnd, - bool Insert) -{ - if (NameEnd == 0) - NameEnd = Name + strlen(Name); - - map_ptrloc Pos = TreeLookup(&HeaderP->Packages,Name,NameEnd, - sizeof(pkgFLCache::Package), - &HeaderP->PackageCount,Insert); - if (Pos == 0) - return pkgFLCache::PkgIterator(); - return pkgFLCache::PkgIterator(*this,PkgP + Pos); -} - /*}}}*/ -// FLCache::GetNode - Get the node associated with the filename /*{{{*/ -// --------------------------------------------------------------------- -/* Lookup a node in the hash table. If Insert is true then a new node is - always inserted. The hash table can have multiple instances of a - single name available. A search returns the first. It is important - that additions for the same name insert after the first entry of - the name group. */ -pkgFLCache::NodeIterator pkgFLCache::GetNode(const char *Name, - const char *NameEnd, - map_ptrloc Loc, - bool Insert,bool Divert) -{ - // Split the name into file and directory, hashing as it is copied - const char *File = Name; - unsigned long HashPos = 0; - for (const char *I = Name; I < NameEnd; I++) - { - HashPos = 1637*HashPos + *I; - if (*I == '/') - File = I; - } - - // Search for it - Node *Hash = NodeP + HeaderP->FileHash + (HashPos % HeaderP->HashSize); - int Res = 0; - map_ptrloc FilePtr = 0; - while (Hash->Pointer != 0) - { - // Compare - Res = stringcmp(File+1,NameEnd,StrP + Hash->File); - if (Res == 0) - Res = stringcmp(Name,File,StrP + DirP[Hash->Dir].Name); - - // Diversion? - if (Res == 0 && Insert == true) - { - /* Dir and File match exactly, we need to reuse the file name - when we link it in */ - FilePtr = Hash->File; - Res = Divert - ((Hash->Flags & Node::Diversion) == Node::Diversion); - } - - // Is a match - if (Res == 0) - { - if (Insert == false) - return NodeIterator(*this,Hash); - - // Only one diversion per name! - if (Divert == true) - return NodeIterator(*this,Hash); - break; - } - - // Out of sort order - if (Res > 0) - break; - - if (Hash->Next != 0) - Hash = NodeP + Hash->Next; - else - break; - } - - // Fail, not found - if (Insert == false) - return NodeIterator(*this); - - // Find a directory node - map_ptrloc Dir = TreeLookup(&HeaderP->DirTree,Name,File, - sizeof(pkgFLCache::Directory), - &HeaderP->DirCount,true); - if (Dir == 0) - return NodeIterator(*this); - - // Allocate a new node - if (Hash->Pointer != 0) - { - // Overwrite or append - if (Res > 0) - { - Node *Next = NodeP + Map.Allocate(sizeof(*Hash)); - if (Next == NodeP) - return NodeIterator(*this); - *Next = *Hash; - Hash->Next = Next - NodeP; - } - else - { - unsigned long NewNext = Map.Allocate(sizeof(*Hash)); - if (NewNext == 0) - return NodeIterator(*this); - NodeP[NewNext].Next = Hash->Next; - Hash->Next = NewNext; - Hash = NodeP + Hash->Next; - } - } - - // Insert into the new item - Hash->Dir = Dir; - Hash->Pointer = Loc; - Hash->Flags = 0; - if (Divert == true) - Hash->Flags |= Node::Diversion; - - if (FilePtr != 0) - Hash->File = FilePtr; - else - { - HeaderP->UniqNodes++; - Hash->File = Map.WriteString(File+1,NameEnd - File-1); - } - - // Link the node to the package list - if (Divert == false && Loc == 0) - { - Hash->Next = PkgP[Loc].Files; - PkgP[Loc].Files = Hash - NodeP; - } - - HeaderP->NodeCount++; - return NodeIterator(*this,Hash); -} - /*}}}*/ -// FLCache::HashNode - Return the hash bucket for the node /*{{{*/ -// --------------------------------------------------------------------- -/* This is one of two hashing functions. The other is inlined into the - GetNode routine. */ -APT_PURE pkgFLCache::Node *pkgFLCache::HashNode(NodeIterator const &Nde) -{ - // Hash the node - unsigned long HashPos = 0; - for (const char *I = Nde.DirN(); *I != 0; I++) - HashPos = 1637*HashPos + *I; - HashPos = 1637*HashPos + '/'; - for (const char *I = Nde.File(); *I != 0; I++) - HashPos = 1637*HashPos + *I; - return NodeP + HeaderP->FileHash + (HashPos % HeaderP->HashSize); -} - /*}}}*/ -// FLCache::DropNode - Drop a node from the hash table /*{{{*/ -// --------------------------------------------------------------------- -/* This erases a node from the hash table. Note that this does not unlink - the node from the package linked list. */ -void pkgFLCache::DropNode(map_ptrloc N) -{ - if (N == 0) - return; - - NodeIterator Nde(*this,NodeP + N); - - if (Nde->NextPkg != 0) - _error->Warning(_("DropNode called on still linked node")); - - // Locate it in the hash table - Node *Last = 0; - Node *Hash = HashNode(Nde); - while (Hash->Pointer != 0) - { - // Got it - if (Hash == Nde) - { - // Top of the bucket.. - if (Last == 0) - { - Hash->Pointer = 0; - if (Hash->Next == 0) - return; - *Hash = NodeP[Hash->Next]; - // Release Hash->Next - return; - } - Last->Next = Hash->Next; - // Release Hash - return; - } - - Last = Hash; - if (Hash->Next != 0) - Hash = NodeP + Hash->Next; - else - break; - } - - _error->Error(_("Failed to locate the hash element!")); -} - /*}}}*/ -// FLCache::BeginDiverLoad - Start reading new diversions /*{{{*/ -// --------------------------------------------------------------------- -/* Tag all the diversions as untouched */ -void pkgFLCache::BeginDiverLoad() -{ - for (DiverIterator I = DiverBegin(); I.end() == false; I++) - I->Flags = 0; -} - /*}}}*/ -// FLCache::FinishDiverLoad - Finish up a new diversion load /*{{{*/ -// --------------------------------------------------------------------- -/* This drops any untouched diversions. In effect removing any diversions - that where not loaded (ie missing from the diversion file) */ -void pkgFLCache::FinishDiverLoad() -{ - map_ptrloc *Cur = &HeaderP->Diversions; - while (*Cur != 0) - { - Diversion *Div = DiverP + *Cur; - if ((Div->Flags & Diversion::Touched) == Diversion::Touched) - { - Cur = &Div->Next; - continue; - } - - // Purge! - DropNode(Div->DivertTo); - DropNode(Div->DivertFrom); - *Cur = Div->Next; - } -} - /*}}}*/ -// FLCache::AddDiversion - Add a new diversion /*{{{*/ -// --------------------------------------------------------------------- -/* Add a new diversion to the diverion tables and make sure that it is - unique and non-chaining. */ -bool pkgFLCache::AddDiversion(PkgIterator const &Owner, - const char *From,const char *To) -{ - /* Locate the two hash nodes we are going to manipulate. If there - are pre-existing diversions then they will be returned */ - NodeIterator FromN = GetNode(From,From+strlen(From),0,true,true); - NodeIterator ToN = GetNode(To,To+strlen(To),0,true,true); - if (FromN.end() == true || ToN.end() == true) - return _error->Error(_("Failed to allocate diversion")); - - // Should never happen - if ((FromN->Flags & Node::Diversion) != Node::Diversion || - (ToN->Flags & Node::Diversion) != Node::Diversion) - return _error->Error(_("Internal error in AddDiversion")); - - // Now, try to reclaim an existing diversion.. - map_ptrloc Diver = 0; - if (FromN->Pointer != 0) - Diver = FromN->Pointer; - - /* Make sure from and to point to the same diversion, if they don't - then we are trying to intermix diversions - very bad */ - if (ToN->Pointer != 0 && ToN->Pointer != Diver) - { - // It could be that the other diversion is no longer in use - if ((DiverP[ToN->Pointer].Flags & Diversion::Touched) == Diversion::Touched) - return _error->Error(_("Trying to overwrite a diversion, %s -> %s and %s/%s"), - From,To,ToN.File(),ToN.Dir().Name()); - - // We can erase it. - Diversion *Div = DiverP + ToN->Pointer; - ToN->Pointer = 0; - - if (Div->DivertTo == ToN.Offset()) - Div->DivertTo = 0; - if (Div->DivertFrom == ToN.Offset()) - Div->DivertFrom = 0; - - // This diversion will be cleaned up by FinishDiverLoad - } - - // Allocate a new diversion - if (Diver == 0) - { - Diver = Map.Allocate(sizeof(Diversion)); - if (Diver == 0) - return false; - DiverP[Diver].Next = HeaderP->Diversions; - HeaderP->Diversions = Diver; - HeaderP->DiversionCount++; - } - - // Can only have one diversion of the same files - Diversion *Div = DiverP + Diver; - if ((Div->Flags & Diversion::Touched) == Diversion::Touched) - return _error->Error(_("Double add of diversion %s -> %s"),From,To); - - // Setup the From/To links - if (Div->DivertFrom != FromN.Offset() && Div->DivertFrom != ToN.Offset()) - DropNode(Div->DivertFrom); - Div->DivertFrom = FromN.Offset(); - if (Div->DivertTo != FromN.Offset() && Div->DivertTo != ToN.Offset()) - DropNode(Div->DivertTo); - Div->DivertTo = ToN.Offset(); - - // Link it to the two nodes - FromN->Pointer = Diver; - ToN->Pointer = Diver; - - // And the package - Div->OwnerPkg = Owner.Offset(); - Div->Flags |= Diversion::Touched; - - return true; -} - /*}}}*/ -// FLCache::AddConfFile - Add a new configuration file /*{{{*/ -// --------------------------------------------------------------------- -/* This simply adds a new conf file node to the hash table. This is only - used by the status file reader. It associates a hash with each conf - file entry that exists in the status file and the list file for - the proper package. Duplicate conf files (across packages) are left - up to other routines to deal with. */ -bool pkgFLCache::AddConfFile(const char *Name,const char *NameEnd, - PkgIterator const &Owner, - const unsigned char *Sum) -{ - NodeIterator Nde = GetNode(Name,NameEnd,0,false,false); - if (Nde.end() == true) - return true; - - unsigned long File = Nde->File; - for (; Nde->File == File && Nde.end() == false; Nde++) - { - if (Nde.RealPackage() != Owner) - continue; - - if ((Nde->Flags & Node::ConfFile) == Node::ConfFile) - return _error->Error(_("Duplicate conf file %s/%s"),Nde.DirN(),Nde.File()); - - // Allocate a new conf file structure - map_ptrloc Conf = Map.Allocate(sizeof(ConfFile)); - if (Conf == 0) - return false; - ConfP[Conf].OwnerPkg = Owner.Offset(); - memcpy(ConfP[Conf].MD5,Sum,sizeof(ConfP[Conf].MD5)); - - Nde->Pointer = Conf; - Nde->Flags |= Node::ConfFile; - return true; - } - - /* This means the conf file has been replaced, but the entry in the - status file was not updated */ - return true; -} - /*}}}*/ - -// NodeIterator::RealPackage - Return the package for this node /*{{{*/ -// --------------------------------------------------------------------- -/* Since the package pointer is indirected in all sorts of interesting ways - this is used to get a pointer to the owning package */ -APT_PURE pkgFLCache::Package *pkgFLCache::NodeIterator::RealPackage() const -{ - if (Nde->Pointer == 0) - return 0; - - if ((Nde->Flags & Node::ConfFile) == Node::ConfFile) - return Owner->PkgP + Owner->ConfP[Nde->Pointer].OwnerPkg; - - // Diversions are ignored - if ((Nde->Flags & Node::Diversion) == Node::Diversion) - return 0; - - return Owner->PkgP + Nde->Pointer; -} - /*}}}*/ diff --git a/apt-inst/filelist.h b/apt-inst/filelist.h deleted file mode 100644 index 7fe43de..0000000 --- a/apt-inst/filelist.h +++ /dev/null @@ -1,312 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -/* ###################################################################### - - File Listing - Manages a Cache of File -> Package names. - - This is identical to the Package cache, except that the generator - (which is much simpler) is integrated directly into the main class, - and it has been designed to handle live updates. - - The storage content of the class is maintained in a memory map and is - written directly to the file system. Performance is traded against - space to give something that performs well and remains small. - The average per file usage is 32 bytes which yields about a meg every - 36k files. Directory paths are collected into a binary tree and stored - only once, this offsets the cost of the hash nodes enough to keep - memory usage slightly less than the sum of the filenames. - - The file names are stored into a fixed size chained hash table that is - linked to the package name and to the directory component. - - Each file node has a set of associated flags that indicate the current - state of the file. - - ##################################################################### */ - /*}}}*/ -#ifndef PKGLIB_FILELIST_H -#define PKGLIB_FILELIST_H - -#include - -#include -#include - -class pkgFLCache -{ - public: - struct Header; - struct Node; - struct Directory; - struct Package; - struct Diversion; - struct ConfFile; - - class NodeIterator; - class DirIterator; - class PkgIterator; - class DiverIterator; - - protected: - std::string CacheFile; - DynamicMMap ⤅ - map_ptrloc LastTreeLookup; - unsigned long LastLookupSize; - - // Helpers for the addition algorithms - map_ptrloc TreeLookup(map_ptrloc *Base,const char *Text,const char *TextEnd, - unsigned long Size,unsigned int *Count = 0, - bool Insert = false); - - public: - - // Pointers to the arrays of items - Header *HeaderP; - Node *NodeP; - Directory *DirP; - Package *PkgP; - Diversion *DiverP; - ConfFile *ConfP; - char *StrP; - unsigned char *AnyP; - - // Quick accessors - Node *FileHash; - - // Accessors - Header &Head() {return *HeaderP;}; - void PrintTree(map_ptrloc Base,unsigned long Size); - - // Add/Find things - PkgIterator GetPkg(const char *Name,const char *End,bool Insert); - inline PkgIterator GetPkg(const char *Name,bool Insert); - NodeIterator GetNode(const char *Name, - const char *NameEnd, - map_ptrloc Loc, - bool Insert,bool Divert); - Node *HashNode(NodeIterator const &N); - void DropNode(map_ptrloc Node); - - inline DiverIterator DiverBegin(); - - // Diversion control - void BeginDiverLoad(); - void FinishDiverLoad(); - bool AddDiversion(PkgIterator const &Owner,const char *From, - const char *To); - bool AddConfFile(const char *Name,const char *NameEnd, - PkgIterator const &Owner,const unsigned char *Sum); - - pkgFLCache(DynamicMMap &Map); -// ~pkgFLCache(); -}; - -struct pkgFLCache::Header -{ - // Signature information - unsigned long Signature; - short MajorVersion; - short MinorVersion; - bool Dirty; - - // Size of structure values - unsigned HeaderSz; - unsigned NodeSz; - unsigned DirSz; - unsigned PackageSz; - unsigned DiversionSz; - unsigned ConfFileSz; - - // Structure Counts; - unsigned int NodeCount; - unsigned int DirCount; - unsigned int PackageCount; - unsigned int DiversionCount; - unsigned int ConfFileCount; - unsigned int HashSize; - unsigned long UniqNodes; - - // Offsets - map_ptrloc FileHash; - map_ptrloc DirTree; - map_ptrloc Packages; - map_ptrloc Diversions; - - /* Allocation pools, there should be one of these for each structure - excluding the header */ - DynamicMMap::Pool Pools[5]; - - bool CheckSizes(Header &Against) const; - Header(); -}; - -/* The bit field is used to advoid incurring an extra 4 bytes x 40000, - Pointer is the most infrequently used member of the structure */ -struct pkgFLCache::Node -{ - map_ptrloc Dir; // Dir - map_ptrloc File; // String - unsigned Pointer:24; // Package/Diversion/ConfFile - unsigned Flags:8; // Package - map_ptrloc Next; // Node - map_ptrloc NextPkg; // Node - - enum Flags {Diversion = (1<<0),ConfFile = (1<<1), - NewConfFile = (1<<2),NewFile = (1<<3), - Unpacked = (1<<4),Replaced = (1<<5)}; -}; - -struct pkgFLCache::Directory -{ - map_ptrloc Left; // Directory - map_ptrloc Right; // Directory - map_ptrloc Name; // String -}; - -struct pkgFLCache::Package -{ - map_ptrloc Left; // Package - map_ptrloc Right; // Package - map_ptrloc Name; // String - map_ptrloc Files; // Node -}; - -struct pkgFLCache::Diversion -{ - map_ptrloc OwnerPkg; // Package - map_ptrloc DivertFrom; // Node - map_ptrloc DivertTo; // String - - map_ptrloc Next; // Diversion - unsigned long Flags; - - enum Flags {Touched = (1<<0)}; -}; - -struct pkgFLCache::ConfFile -{ - map_ptrloc OwnerPkg; // Package - unsigned char MD5[16]; -}; - -class pkgFLCache::PkgIterator -{ - Package *Pkg; - pkgFLCache *Owner; - - public: - - inline bool end() const {return Owner == 0 || Pkg == Owner->PkgP?true:false;} - - // Accessors - inline Package *operator ->() {return Pkg;} - inline Package const *operator ->() const {return Pkg;} - inline Package const &operator *() const {return *Pkg;} - inline operator Package *() {return Pkg == Owner->PkgP?0:Pkg;} - inline operator Package const *() const {return Pkg == Owner->PkgP?0:Pkg;} - - inline unsigned long Offset() const {return Pkg - Owner->PkgP;} - inline const char *Name() const {return Pkg->Name == 0?0:Owner->StrP + Pkg->Name;} - inline pkgFLCache::NodeIterator Files() const; - - PkgIterator() : Pkg(0), Owner(0) {} - PkgIterator(pkgFLCache &Owner,Package *Trg) : Pkg(Trg), Owner(&Owner) {} -}; - -class pkgFLCache::DirIterator -{ - Directory *Dir; - pkgFLCache *Owner; - - public: - - // Accessors - inline Directory *operator ->() {return Dir;} - inline Directory const *operator ->() const {return Dir;} - inline Directory const &operator *() const {return *Dir;} - inline operator Directory *() {return Dir == Owner->DirP?0:Dir;} - inline operator Directory const *() const {return Dir == Owner->DirP?0:Dir;} - - inline const char *Name() const {return Dir->Name == 0?0:Owner->StrP + Dir->Name;} - - DirIterator() : Dir(0), Owner(0) {} - DirIterator(pkgFLCache &Owner,Directory *Trg) : Dir(Trg), Owner(&Owner) {} -}; - -class pkgFLCache::DiverIterator -{ - Diversion *Diver; - pkgFLCache *Owner; - - public: - - // Iteration - void operator ++(int) {if (Diver != Owner->DiverP) Diver = Owner->DiverP + Diver->Next;} - inline void operator ++() {operator ++(0);} - inline bool end() const {return Owner == 0 || Diver == Owner->DiverP;} - - // Accessors - inline Diversion *operator ->() {return Diver;} - inline Diversion const *operator ->() const {return Diver;} - inline Diversion const &operator *() const {return *Diver;} - inline operator Diversion *() {return Diver == Owner->DiverP?0:Diver;} - inline operator Diversion const *() const {return Diver == Owner->DiverP?0:Diver;} - - inline PkgIterator OwnerPkg() const {return PkgIterator(*Owner,Owner->PkgP + Diver->OwnerPkg);} - inline NodeIterator DivertFrom() const; - inline NodeIterator DivertTo() const; - - DiverIterator() : Diver(0), Owner(0) {}; - DiverIterator(pkgFLCache &Owner,Diversion *Trg) : Diver(Trg), Owner(&Owner) {} -}; - -class pkgFLCache::NodeIterator -{ - Node *Nde; - enum {NdePkg, NdeHash} Type; - pkgFLCache *Owner; - - public: - - // Iteration - void operator ++(int) {if (Nde != Owner->NodeP) Nde = Owner->NodeP + - (Type == NdePkg?Nde->NextPkg:Nde->Next);} - inline void operator ++() {operator ++(0);} - inline bool end() const {return Owner == 0 || Nde == Owner->NodeP;} - - // Accessors - inline Node *operator ->() {return Nde;} - inline Node const *operator ->() const {return Nde;} - inline Node const &operator *() const {return *Nde;} - inline operator Node *() {return Nde == Owner->NodeP?0:Nde;} - inline operator Node const *() const {return Nde == Owner->NodeP?0:Nde;} - inline unsigned long Offset() const {return Nde - Owner->NodeP;} - inline DirIterator Dir() const {return DirIterator(*Owner,Owner->DirP + Nde->Dir);} - inline DiverIterator Diversion() const {return DiverIterator(*Owner,Owner->DiverP + Nde->Pointer);} - inline const char *File() const {return Nde->File == 0?0:Owner->StrP + Nde->File;} - inline const char *DirN() const {return Owner->StrP + Owner->DirP[Nde->Dir].Name;} - Package *RealPackage() const; - - NodeIterator() : Nde(0), Type(NdeHash), Owner(0) {}; - NodeIterator(pkgFLCache &Owner) : Nde(Owner.NodeP), Type(NdeHash), Owner(&Owner) {} - NodeIterator(pkgFLCache &Owner,Node *Trg) : Nde(Trg), Type(NdeHash), Owner(&Owner) {} - NodeIterator(pkgFLCache &Owner,Node *Trg,Package *) : Nde(Trg), Type(NdePkg), Owner(&Owner) {} -}; - -/* Inlines with forward references that cannot be included directly in their - respsective classes */ -inline pkgFLCache::NodeIterator pkgFLCache::DiverIterator::DivertFrom() const - {return NodeIterator(*Owner,Owner->NodeP + Diver->DivertFrom);} -inline pkgFLCache::NodeIterator pkgFLCache::DiverIterator::DivertTo() const - {return NodeIterator(*Owner,Owner->NodeP + Diver->DivertTo);} - -inline pkgFLCache::NodeIterator pkgFLCache::PkgIterator::Files() const - {return NodeIterator(*Owner,Owner->NodeP + Pkg->Files,Pkg);} - -inline pkgFLCache::DiverIterator pkgFLCache::DiverBegin() - {return DiverIterator(*this,DiverP + HeaderP->Diversions);} - -inline pkgFLCache::PkgIterator pkgFLCache::GetPkg(const char *Name,bool Insert) - {return GetPkg(Name,Name+strlen(Name),Insert);} - -#endif diff --git a/apt-pkg/CMakeLists.txt b/apt-pkg/CMakeLists.txt index ce73c6a..7e51b17 100644 --- a/apt-pkg/CMakeLists.txt +++ b/apt-pkg/CMakeLists.txt @@ -1,10 +1,8 @@ # Include apt-pkg directly, as some files have #include include_directories(${PROJECT_BINARY_DIR}/include/apt-pkg) -add_definitions("-DAPT_PKG_EXPOSE_STRING_VIEW") - file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/include/apt-pkg/) -execute_process(COMMAND ${PERL_EXECUTABLE} ${PROJECT_SOURCE_DIR}/triehash/triehash.pl +execute_process(COMMAND ${TRIEHASH_EXECUTABLE} --ignore-case --header ${PROJECT_BINARY_DIR}/include/apt-pkg/tagfile-keys.h --code ${CMAKE_CURRENT_BINARY_DIR}/tagfile-keys.cc @@ -29,6 +27,8 @@ execute_process(COMMAND grep "^#define APT_PKG_RELEASE" message(STATUS "Building libapt-pkg ${MAJOR} (release ${MINOR})") set(APT_PKG_MAJOR ${MAJOR} PARENT_SCOPE) # exporting for methods/CMakeLists.txt +configure_file(apt-pkg.pc.in ${CMAKE_CURRENT_BINARY_DIR}/apt-pkg.pc @ONLY) + # Definition of the C++ files used to build the library - note that this # is expanded at CMake time, so you have to rerun cmake if you add or remove # a file (you can just run cmake . in the build directory) @@ -48,6 +48,7 @@ target_include_directories(apt-pkg $<$:${UDEV_INCLUDE_DIRS}> $<$:${SYSTEMD_INCLUDE_DIRS}> ${ICONV_INCLUDE_DIRS} + $<$:${GCRYPT_INCLUDE_DIRS}> ) target_link_libraries(apt-pkg @@ -61,14 +62,17 @@ target_link_libraries(apt-pkg $<$:${UDEV_LIBRARIES}> $<$:${SYSTEMD_LIBRARIES}> ${ICONV_LIBRARIES} + $<$:${GCRYPT_LIBRARIES}> ) set_target_properties(apt-pkg PROPERTIES VERSION ${MAJOR}.${MINOR}) set_target_properties(apt-pkg PROPERTIES SOVERSION ${MAJOR}) +set_target_properties(apt-pkg PROPERTIES CXX_VISIBILITY_PRESET hidden) add_version_script(apt-pkg) # Install the library and the header files install(TARGETS apt-pkg LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(FILES ${headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/apt-pkg) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/apt-pkg.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) flatify(${PROJECT_BINARY_DIR}/include/apt-pkg/ "${headers}") if(CMAKE_BUILD_TYPE STREQUAL "Coverage") diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index bb3bc1b..9b13a24 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -291,9 +290,8 @@ public: std::vector BadAlternativeSites; std::vector PastRedirections; std::unordered_map CustomFields; - unsigned int Retries; - Private() : Retries(_config->FindI("Acquire::Retries", 0)) + Private() { } }; @@ -770,15 +768,13 @@ class APT_HIDDEN CleanupItem : public pkgAcqTransactionItem /*{{{*/ /*}}}*/ // Acquire::Item::Item - Constructor /*{{{*/ -APT_IGNORE_DEPRECATED_PUSH pkgAcquire::Item::Item(pkgAcquire * const owner) : - FileSize(0), PartialSize(0), Mode(0), ID(0), Complete(false), Local(false), - QueueCounter(0), ExpectedAdditionalItems(0), Owner(owner), d(new Private()) + FileSize(0), PartialSize(0), ID(0), Complete(false), Local(false), + QueueCounter(0), ExpectedAdditionalItems(0), Retries(_config->FindI("Acquire::Retries", 0)), Owner(owner), d(new Private()) { Owner->Add(this); Status = StatIdle; } -APT_IGNORE_DEPRECATED_POP /*}}}*/ // Acquire::Item::~Item - Destructor /*{{{*/ pkgAcquire::Item::~Item() @@ -846,11 +842,6 @@ void pkgAcquire::Item::RemoveAlternativeSite(std::string &&OldSite) /*{{{*/ d->BadAlternativeSites.push_back(std::move(OldSite)); } /*}}}*/ -unsigned int &pkgAcquire::Item::ModifyRetries() /*{{{*/ -{ - return d->Retries; -} - /*}}}*/ std::string pkgAcquire::Item::ShortDesc() const /*{{{*/ { return DescURI(); @@ -1120,15 +1111,6 @@ bool pkgAcquire::Item::RenameOnError(pkgAcquire::Item::RenameOnErrorState const void pkgAcquire::Item::SetActiveSubprocess(const std::string &subprocess)/*{{{*/ { ActiveSubprocess = subprocess; - APT_IGNORE_DEPRECATED_PUSH - Mode = ActiveSubprocess.c_str(); - APT_IGNORE_DEPRECATED_POP -} - /*}}}*/ -// Acquire::Item::ReportMirrorFailure /*{{{*/ -void pkgAcquire::Item::ReportMirrorFailure(std::string const &FailCode) -{ - ReportMirrorFailureToCentral(*this, FailCode, FailCode); } /*}}}*/ std::string pkgAcquire::Item::HashSum() const /*{{{*/ @@ -2036,7 +2018,6 @@ void pkgAcqMetaClearSig::Failed(string const &Message,pkgAcquire::MethodConfig c * they would be considered as trusted later on */ string const FinalRelease = GetFinalFileNameFromURI(DetachedDataTarget.URI); string const PartialRelease = GetPartialFileNameFromURI(DetachedDataTarget.URI); - string const FinalReleasegpg = GetFinalFileNameFromURI(DetachedSigTarget.URI); string const FinalInRelease = GetFinalFilename(); Rename(DestFile, PartialRelease); TransactionManager->TransactionStageCopy(this, PartialRelease, FinalRelease); @@ -2236,6 +2217,11 @@ void pkgAcqMetaSig::Failed(string const &Message,pkgAcquire::MethodConfig const return; // ensures that a Release.gpg file in the lists/ is removed by the transaction + if (not MetaIndexFileSignature.empty()) + { + DestFile = MetaIndexFileSignature; + MetaIndexFileSignature.clear(); + } TransactionManager->TransactionStageRemoval(this, DestFile); // only allow going further if the user explicitly wants it @@ -2597,14 +2583,18 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/ return false; } - for (auto const &patch: available_patches) - if (patch.result_hashes.usable() == false || - patch.patch_hashes.usable() == false || - patch.download_hashes.usable() == false) + { + auto const patch = std::find_if(available_patches.cbegin(), available_patches.cend(), [](auto const &patch) { + return not patch.result_hashes.usable() || + not patch.patch_hashes.usable() || + not patch.download_hashes.usable(); + }); + if (patch != available_patches.cend()) { - strprintf(ErrorText, "Provides no usable hashes for %s", patch.file.c_str()); + strprintf(ErrorText, "Provides no usable hashes for %s", patch->file.c_str()); return false; } + } // patching with too many files is rather slow compared to a fast download unsigned long const fileLimit = _config->FindI("Acquire::PDiffs::FileLimit", 0); @@ -2666,13 +2656,15 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/ return false; std::string const PartialFile = GetPartialFileNameFromURI(Target.URI); std::string const PatchedFile = GetKeepCompressedFileName(PartialFile + "-patched", Target); - if (RemoveFileForBootstrapLinking(ErrorText, CurrentPackagesFile, PartialFile) == false || - RemoveFileForBootstrapLinking(ErrorText, CurrentPackagesFile, PatchedFile) == false) + if (not RemoveFileForBootstrapLinking(ErrorText, CurrentPackagesFile, PartialFile) || + not RemoveFileForBootstrapLinking(ErrorText, CurrentPackagesFile, PatchedFile)) return false; - for (auto const &ext : APT::Configuration::getCompressorExtensions()) { - if (RemoveFileForBootstrapLinking(ErrorText, CurrentPackagesFile, PartialFile + ext) == false || - RemoveFileForBootstrapLinking(ErrorText, CurrentPackagesFile, PatchedFile + ext) == false) + auto const exts = APT::Configuration::getCompressorExtensions(); + if (not std::all_of(exts.cbegin(), exts.cend(), [&](auto const &ext) { + return RemoveFileForBootstrapLinking(ErrorText, CurrentPackagesFile, PartialFile + ext) && + RemoveFileForBootstrapLinking(ErrorText, CurrentPackagesFile, PatchedFile + ext); + })) return false; } std::string const Ext = Final.substr(CurrentPackagesFile.length()); @@ -3271,19 +3263,14 @@ void pkgAcqIndex::StageDownloadDone(string const &Message) // we need to verify the file against the current Release file again // on if-modfied-since hit to avoid a stale attack against us - if(StringToBool(LookupTag(Message,"IMS-Hit"),false) == true) + if (StringToBool(LookupTag(Message, "IMS-Hit"), false)) { - // copy FinalFile into partial/ so that we check the hash again - string const FinalFile = GetExistingFilename(GetFinalFileNameFromURI(Target.URI)); - if (symlink(FinalFile.c_str(), DestFile.c_str()) != 0) - _error->WarningE("pkgAcqIndex::StageDownloadDone", "Symlinking final file %s back to %s failed", FinalFile.c_str(), DestFile.c_str()); - else - { - EraseFileName = DestFile; - Filename = DestFile; - } + Filename = GetExistingFilename(GetFinalFileNameFromURI(Target.URI)); + EraseFileName = DestFile = flCombine(flNotFile(DestFile), flNotDir(Filename)); + if (symlink(Filename.c_str(), DestFile.c_str()) != 0) + _error->WarningE("pkgAcqIndex::StageDownloadDone", "Symlinking file %s to %s failed", Filename.c_str(), DestFile.c_str()); Stage = STAGE_DECOMPRESS_AND_VERIFY; - Desc.URI = "store:" + Filename; + Desc.URI = "store:" + DestFile; QueueURI(Desc); SetActiveSubprocess(::URI(Desc.URI).Access); return; @@ -3346,11 +3333,10 @@ pkgAcqIndex::~pkgAcqIndex() {} // --------------------------------------------------------------------- /* This just sets up the initial fetch environment and queues the first possibilitiy */ -APT_IGNORE_DEPRECATED_PUSH pkgAcqArchive::pkgAcqArchive(pkgAcquire *const Owner, pkgSourceList *const Sources, pkgRecords *const Recs, pkgCache::VerIterator const &Version, string &StoreFilename) : Item(Owner), d(NULL), LocalSource(false), Version(Version), Sources(Sources), Recs(Recs), - StoreFilename(StoreFilename), Vf(), + StoreFilename(StoreFilename), Trusted(false) { if (Version.Arch() == 0) @@ -3394,8 +3380,6 @@ pkgAcqArchive::pkgAcqArchive(pkgAcquire *const Owner, pkgSourceList *const Sourc Trusted = false; StoreFilename.clear(); - std::set targetComponents, targetCodenames, targetSuites; - std::vector> authconfs; for (auto Vf = Version.FileList(); Vf.end() == false; ++Vf) { auto const PkgF = Vf.File(); @@ -3403,8 +3387,6 @@ pkgAcqArchive::pkgAcqArchive(pkgAcquire *const Owner, pkgSourceList *const Sourc continue; if (PkgF.Flagged(pkgCache::Flag::NotSource)) continue; - if (PkgF.Flagged(pkgCache::Flag::PackagesRequireAuthorization) && !IsAuthorized(PkgF, authconfs)) - continue; pkgIndexFile *Index; if (Sources->FindIndex(PkgF, Index) == false) continue; @@ -3539,7 +3521,6 @@ pkgAcqArchive::pkgAcqArchive(pkgAcquire *const Owner, pkgSourceList *const Sourc Local = false; QueueURI(Desc); } -APT_IGNORE_DEPRECATED_POP /*}}}*/ bool pkgAcqArchive::QueueNext() /*{{{*/ { @@ -3865,11 +3846,10 @@ pkgAcqChangelog::~pkgAcqChangelog() /*{{{*/ /*}}}*/ // AcqFile::pkgAcqFile - Constructor /*{{{*/ -APT_IGNORE_DEPRECATED_PUSH pkgAcqFile::pkgAcqFile(pkgAcquire *const Owner, string const &URI, HashStringList const &Hashes, unsigned long long const Size, string const &Dsc, string const &ShortDesc, const string &DestDir, const string &DestFilename, - bool const IsIndexFile) : Item(Owner), d(NULL), Retries(0), IsIndexFile(IsIndexFile), ExpectedHashes(Hashes) + bool const IsIndexFile) : Item(Owner), d(NULL), IsIndexFile(IsIndexFile), ExpectedHashes(Hashes) { if(!DestFilename.empty()) DestFile = DestFilename; @@ -3900,7 +3880,6 @@ pkgAcqFile::pkgAcqFile(pkgAcquire *const Owner, string const &URI, HashStringLis QueueURI(Desc); } -APT_IGNORE_DEPRECATED_POP /*}}}*/ // AcqFile::Done - Item downloaded OK /*{{{*/ void pkgAcqFile::Done(string const &Message,HashStringList const &CalcHashes, @@ -3950,12 +3929,6 @@ void pkgAcqFile::Done(string const &Message,HashStringList const &CalcHashes, } } /*}}}*/ -void pkgAcqFile::Failed(string const &Message, pkgAcquire::MethodConfig const *const Cnf) /*{{{*/ -{ - // FIXME: Remove this pointless overload on next ABI break - Item::Failed(Message, Cnf); -} - /*}}}*/ string pkgAcqFile::Custom600Headers() const /*{{{*/ { if (IsIndexFile) diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h index 70651d9..3be8a9c 100644 --- a/apt-pkg/acquire-item.h +++ b/apt-pkg/acquire-item.h @@ -30,10 +30,6 @@ #include #include -#ifndef APT_8_CLEANER_HEADERS -#include -#include -#endif /** \addtogroup acquire * @{ @@ -47,7 +43,7 @@ class pkgAcqMetaClearSig; class pkgAcqIndexMergeDiffs; class metaIndex; -class pkgAcquire::Item : public WeakPointable /*{{{*/ +class APT_PUBLIC pkgAcquire::Item : public WeakPointable /*{{{*/ /** \brief Represents the process by which a pkgAcquire object should * retrieve a file or a collection of files. * @@ -102,11 +98,6 @@ class pkgAcquire::Item : public WeakPointable /*{{{*/ /** \brief How much of the object was already fetched. */ unsigned long long PartialSize; - /** \brief If not \b NULL, contains the name of a subprocess that - * is operating on this object (for instance, "gzip" or "gpgv"). - */ - APT_DEPRECATED_MSG("Use the std::string member ActiveSubprocess instead") const char *Mode; - /** \brief contains the name of the subprocess that is operating on this object * (for instance, "gzip", "rred" or "gpgv"). This is obsoleting #Mode from above * as it can manage the lifetime of included string properly. */ @@ -161,6 +152,9 @@ class pkgAcquire::Item : public WeakPointable /*{{{*/ */ std::string DestFile; + /** \brief Number of retries */ + unsigned int Retries; + /** \brief Invoked by the acquire worker when the object couldn't * be fetched. * @@ -240,8 +234,6 @@ class pkgAcquire::Item : public WeakPointable /*{{{*/ * no trailing newline. */ virtual std::string Custom600Headers() const; - // Retries should really be a member of the Item, but can't be for ABI reasons - APT_HIDDEN unsigned int &ModifyRetries(); // this is more a hack than a proper external interface, hence hidden APT_HIDDEN std::unordered_map &ModifyCustomFields(); // this isn't the super nicest interface either… @@ -284,15 +276,6 @@ class pkgAcquire::Item : public WeakPointable /*{{{*/ /** \return \b true if this object is being fetched from a trusted source. */ virtual bool IsTrusted() const; - /** \brief Report mirror problem - * - * This allows reporting mirror failures back to a centralized - * server. The apt-report-mirror-failure script is called for this - * - * \param FailCode A short failure string that is send - */ - APT_DEPRECATED_MSG("Item::Failed does this for you") void ReportMirrorFailure(std::string const &FailCode); - /** \brief Set the name of the current active subprocess * * See also #ActiveSubprocess @@ -957,7 +940,7 @@ class APT_HIDDEN pkgAcqIndexDiffs : public pkgAcqBaseIndex * If the package file already exists in the cache, nothing will be * done. */ -class pkgAcqArchive : public pkgAcquire::Item +class APT_PUBLIC pkgAcqArchive : public pkgAcquire::Item { void * const d; @@ -983,18 +966,6 @@ class pkgAcqArchive : public pkgAcquire::Item */ std::string &StoreFilename; - /** \brief The next file for this version to try to download. */ - APT_DEPRECATED_MSG("Unused member") - pkgCache::VerFileIterator Vf; - - /** \brief How many (more) times to try to find a new source from - * which to download this package version if it fails. - * - * Set from Acquire::Retries. - */ - APT_DEPRECATED_MSG("Unused member. See pkgAcqItem::Retries.") - unsigned int Retries; - /** \brief \b true if this version file is being downloaded from a * trusted source. */ @@ -1047,7 +1018,7 @@ class pkgAcqArchive : public pkgAcquire::Item * Downloads the changelog to a temporary file it will also remove again * while it is deconstructed or downloads it to a named location. */ -class pkgAcqChangelog : public pkgAcquire::Item +class APT_PUBLIC pkgAcqChangelog : public pkgAcquire::Item { class Private; Private * const d; @@ -1163,16 +1134,10 @@ private: * normally is a NOP, such as "file". If the download fails, the * partial file is renamed to get a ".FAILED" extension. */ -class pkgAcqFile : public pkgAcquire::Item +class APT_PUBLIC pkgAcqFile : public pkgAcquire::Item { void * const d; - /** \brief How many times to retry the download, set from - * Acquire::Retries. - */ - APT_DEPRECATED_MSG("Unused member. See pkgAcqItem::Retries.") - unsigned int Retries; - /** \brief Should this file be considered a index file */ bool IsIndexFile; @@ -1182,7 +1147,6 @@ class pkgAcqFile : public pkgAcquire::Item virtual bool HashesRequired() const APT_OVERRIDE; // Specialized action members - virtual void Failed(std::string const &Message,pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE; virtual void Done(std::string const &Message, HashStringList const &CalcHashes, pkgAcquire::MethodConfig const * const Cnf) APT_OVERRIDE; virtual std::string DescURI() const APT_OVERRIDE {return Desc.URI;}; diff --git a/apt-pkg/acquire-method.cc b/apt-pkg/acquire-method.cc index ae5ae4a..9656caf 100644 --- a/apt-pkg/acquire-method.cc +++ b/apt-pkg/acquire-method.cc @@ -21,9 +21,6 @@ #include #include #include -#include -#include -#include #include #include @@ -416,7 +413,7 @@ int pkgAcqMethod::Run(bool Single) Tmp->Uri = LookupTag(Message,"URI"); Tmp->Proxy(LookupTag(Message, "Proxy")); Tmp->DestFile = LookupTag(Message,"FileName"); - if (RFC1123StrToTime(LookupTag(Message,"Last-Modified").c_str(),Tmp->LastModified) == false) + if (RFC1123StrToTime(LookupTag(Message,"Last-Modified"),Tmp->LastModified) == false) Tmp->LastModified = 0; Tmp->IndexFile = StringToBool(LookupTag(Message,"Index-File"),false); Tmp->FailIgnore = StringToBool(LookupTag(Message,"Fail-Ignore"),false); diff --git a/apt-pkg/acquire-method.h b/apt-pkg/acquire-method.h index 664b95c..dde28a6 100644 --- a/apt-pkg/acquire-method.h +++ b/apt-pkg/acquire-method.h @@ -29,12 +29,8 @@ #include #include -#ifndef APT_8_CLEANER_HEADERS -#include -#include -#endif -class pkgAcqMethod +class APT_PUBLIC pkgAcqMethod { protected: diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc index b361861..eff7921 100644 --- a/apt-pkg/acquire-worker.cc +++ b/apt-pkg/acquire-worker.cc @@ -44,7 +44,7 @@ using namespace std; // Worker::Worker - Constructor for Queue startup /*{{{*/ pkgAcquire::Worker::Worker(Queue *Q, MethodConfig *Cnf, pkgAcquireStatus *log) : d(NULL), OwnerQ(Q), Log(log), Config(Cnf), Access(Cnf->Access), - CurrentItem(nullptr), CurrentSize(0), TotalSize(0) + CurrentItem(nullptr) { Construct(); } @@ -369,12 +369,12 @@ bool pkgAcquire::Worker::RunMessages() } CurrentItem = Itm; - CurrentSize = 0; - TotalSize = strtoull(LookupTag(Message,"Size","0").c_str(), NULL, 10); - ResumePoint = strtoull(LookupTag(Message,"Resume-Point","0").c_str(), NULL, 10); + Itm->CurrentSize = 0; + Itm->TotalSize = strtoull(LookupTag(Message,"Size","0").c_str(), NULL, 10); + Itm->ResumePoint = strtoull(LookupTag(Message,"Resume-Point","0").c_str(), NULL, 10); for (auto const Owner: Itm->Owners) { - Owner->Start(Message, TotalSize); + Owner->Start(Message, Itm->TotalSize); // Display update before completion if (Log != nullptr) { @@ -607,9 +607,9 @@ void pkgAcquire::Worker::HandleFailure(std::vector const &It for (auto const Owner : ItmOwners) { std::string NewURI; - if (errTransient == true && Config->LocalOnly == false && Owner->ModifyRetries() != 0) + if (errTransient == true && Config->LocalOnly == false && Owner->Retries != 0) { - --Owner->ModifyRetries(); + --Owner->Retries; Owner->FailMessage(Message); auto SavedDesc = Owner->GetItemDesc(); if (Log != nullptr) @@ -766,7 +766,7 @@ bool pkgAcquire::Worker::QueueItem(pkgAcquire::Queue::QItem *Item) Message += "URI: " + Item->URI; Message += "\nFilename: " + Item->Owner->DestFile; - URI URL = Item->URI; + URI URL(Item->URI); // FIXME: We should not hard code proxy protocols here. if (URL.Access == "http" || URL.Access == "https") { @@ -918,7 +918,7 @@ void pkgAcquire::Worker::Pulse() struct stat Buf; if (stat(CurrentItem->Owner->DestFile.c_str(),&Buf) != 0) return; - CurrentSize = Buf.st_size; + CurrentItem->CurrentSize = Buf.st_size; } /*}}}*/ // Worker::ItemDone - Called when the current item is finished /*{{{*/ @@ -926,9 +926,7 @@ void pkgAcquire::Worker::Pulse() /* */ void pkgAcquire::Worker::ItemDone() { - CurrentItem = 0; - CurrentSize = 0; - TotalSize = 0; + CurrentItem = nullptr; Status = string(); } /*}}}*/ diff --git a/apt-pkg/acquire-worker.h b/apt-pkg/acquire-worker.h index 11e54b0..f59d659 100644 --- a/apt-pkg/acquire-worker.h +++ b/apt-pkg/acquire-worker.h @@ -44,7 +44,7 @@ * * \sa pkgAcqMethod, pkgAcquire::Item, pkgAcquire */ -class pkgAcquire::Worker : public WeakPointable +class APT_PUBLIC pkgAcquire::Worker : public WeakPointable { /** \brief dpointer placeholder (for later in case we need it) */ void * const d; @@ -251,21 +251,6 @@ class pkgAcquire::Worker : public WeakPointable */ std::string Status; - /** \brief How many bytes of the file have been downloaded. Zero - * if the current progress of the file cannot be determined. - */ - unsigned long long CurrentSize; - - /** \brief The total number of bytes to be downloaded. Zero if the - * total size of the final is unknown. - */ - unsigned long long TotalSize; - - /** \brief How much of the file was already downloaded prior to - * starting this worker. - */ - unsigned long long ResumePoint; - /** \brief Tell the subprocess to download the given item. * * \param Item the item to queue up. diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc index 541785b..fffe76f 100644 --- a/apt-pkg/acquire.cc +++ b/apt-pkg/acquire.cc @@ -127,25 +127,6 @@ static bool SetupAPTPartialDirectory(std::string const &grand, std::string const return true; } -bool pkgAcquire::Setup(pkgAcquireStatus *Progress, string const &Lock) -{ - Log = Progress; - if (Lock.empty()) - { - string const listDir = _config->FindDir("Dir::State::lists"); - if (SetupAPTPartialDirectory(_config->FindDir("Dir::State"), listDir, "partial", 0700) == false) - return _error->Errno("Acquire", _("List directory %s is missing."), (listDir + "partial").c_str()); - if (SetupAPTPartialDirectory(_config->FindDir("Dir::State"), listDir, "auxfiles", 0755) == false) - { - // not being able to create lists/auxfiles isn't critical as we will use a tmpdir then - } - string const archivesDir = _config->FindDir("Dir::Cache::Archives"); - if (SetupAPTPartialDirectory(_config->FindDir("Dir::Cache"), archivesDir, "partial", 0700) == false) - return _error->Errno("Acquire", _("Archives directory %s is missing."), (archivesDir + "partial").c_str()); - return true; - } - return GetLock(Lock); -} bool pkgAcquire::GetLock(std::string const &Lock) { if (Lock.empty() == true) @@ -326,7 +307,7 @@ static bool CheckForBadItemAndFailIt(pkgAcquire::Item * const Item, void pkgAcquire::Enqueue(ItemDesc &Item) { // Determine which queue to put the item in - const MethodConfig *Config; + const MethodConfig *Config = nullptr; string Name = QueueName(Item.URI,Config); if (Name.empty() == true) { @@ -404,73 +385,99 @@ void pkgAcquire::Dequeue(Item *Itm) return http://foo.org or http */ string pkgAcquire::QueueName(string Uri,MethodConfig const *&Config) { + constexpr int DEFAULT_HOST_LIMIT = 10; URI U(Uri); - + + // Note that this gets written through the reference to the caller. Config = GetConfig(U.Access); - if (Config == 0) - return string(); - - /* Single-Instance methods get exactly one queue per URI. This is - also used for the Access queue method */ - if (Config->SingleInstance == true || QueueMode == QueueAccess) + if (Config == nullptr) + return {}; + + // Access mode forces all methods to be Single-Instance + if (QueueMode == QueueAccess) return U.Access; - string AccessSchema = U.Access + ':'; - string FullQueueName; + // Single-Instance methods get exactly one queue per URI + if (Config->SingleInstance == true) + return U.Access; + // Host-less methods like rred, store, … if (U.Host.empty()) { - long existing = 0; + int existing = 0; // check how many queues exist already and reuse empty ones + auto const AccessSchema = U.Access + ':'; for (Queue const *I = Queues; I != 0; I = I->Next) - if (I->Name.compare(0, AccessSchema.length(), AccessSchema) == 0) + if (APT::String::Startswith(I->Name, AccessSchema)) { if (I->Items == nullptr) return I->Name; ++existing; } + int const Limit = _config->FindI("Acquire::QueueHost::Limit", #ifdef _SC_NPROCESSORS_ONLN - long cpuCount = sysconf(_SC_NPROCESSORS_ONLN) * 2; + sysconf(_SC_NPROCESSORS_ONLN) * 2 #else - long cpuCount = 10; + DEFAULT_HOST_LIMIT #endif - cpuCount = _config->FindI("Acquire::QueueHost::Limit", cpuCount); - - if (cpuCount <= 0 || existing < cpuCount) - strprintf(FullQueueName, "%s%ld", AccessSchema.c_str(), existing); - else - { - long const randomQueue = random() % cpuCount; - strprintf(FullQueueName, "%s%ld", AccessSchema.c_str(), randomQueue); - } + ); + + // create a new worker if we don't have too many yet + if (Limit <= 0 || existing < Limit) + return AccessSchema + std::to_string(existing); + + // find the worker with the least to do + // we already established that there are no empty and we can't spawn new + Queue const *selected = nullptr; + auto selected_backlog = std::numeric_limits::max(); + for (Queue const *Q = Queues; Q != nullptr; Q = Q->Next) + if (APT::String::Startswith(Q->Name, AccessSchema)) + { + decltype(selected_backlog) current_backlog = 0; + for (auto const *I = Q->Items; I != nullptr; I = I->Next) + { + auto const hashes = I->Owner->GetExpectedHashes(); + if (not hashes.empty()) + current_backlog += hashes.FileSize(); + else + current_backlog += I->Owner->FileSize; + } + if (current_backlog < selected_backlog) + { + selected = Q; + selected_backlog = current_backlog; + } + } - if (Debug) - clog << "Chose random queue " << FullQueueName << " for " << Uri << endl; - } else - { - FullQueueName = AccessSchema + U.Host; + if (unlikely(selected == nullptr)) + return AccessSchema + "0"; + return selected->Name; } - unsigned int Instances = 0, SchemaLength = AccessSchema.length(); - - Queue *I = Queues; - for (; I != 0; I = I->Next) { + // most methods talking to remotes like http + else + { + auto const FullQueueName = U.Access + ':' + U.Host; // if the queue already exists, re-use it - if (I->Name == FullQueueName) - return FullQueueName; + for (Queue const *Q = Queues; Q != nullptr; Q = Q->Next) + if (Q->Name == FullQueueName) + return FullQueueName; - if (I->Name.compare(0, SchemaLength, AccessSchema) == 0) - Instances++; - } - - if (Debug) { - clog << "Found " << Instances << " instances of " << U.Access << endl; - } + int existing = 0; + // check how many queues exist already and reuse empty ones + auto const AccessSchema = U.Access + ':'; + for (Queue const *Q = Queues; Q != nullptr; Q = Q->Next) + if (APT::String::Startswith(Q->Name, AccessSchema)) + ++existing; - if (Instances >= static_cast(_config->FindI("Acquire::QueueHost::Limit",10))) - return U.Access; + int const Limit = _config->FindI("Acquire::QueueHost::Limit", DEFAULT_HOST_LIMIT); + // if we have too many hosts open use a single generic for the rest + if (existing >= Limit) + return U.Access; - return FullQueueName; + // we can still create new named queues + return FullQueueName; + } } /*}}}*/ // Acquire::GetConfig - Fetch the configuration information /*{{{*/ @@ -529,18 +536,12 @@ void pkgAcquire::SetFds(int &Fd,fd_set *RSet,fd_set *WSet) } } /*}}}*/ -// Acquire::RunFds - compatibility remove on next abi/api break /*{{{*/ -void pkgAcquire::RunFds(fd_set *RSet,fd_set *WSet) -{ - RunFdsSane(RSet, WSet); -} - /*}}}*/ -// Acquire::RunFdsSane - Deal with active FDs /*{{{*/ +// Acquire::RunFds - Deal with active FDs /*{{{*/ // --------------------------------------------------------------------- /* Dispatch active FDs over to the proper workers. It is very important that a worker never be erased while this is running! The queue class should never erase a worker except during shutdown processing. */ -bool pkgAcquire::RunFdsSane(fd_set *RSet,fd_set *WSet) +bool pkgAcquire::RunFds(fd_set *RSet,fd_set *WSet) { bool Res = true; @@ -654,7 +655,7 @@ static void CheckDropPrivsMustBeDisabled(pkgAcquire const &Fetcher) // if its the source file (e.g. local sources) we might be lucky // by dropping the dropping only for some methods. - URI const source = (*I)->DescURI(); + URI const source((*I)->DescURI()); if (source.Access == "file" || source.Access == "copy") { std::string const conf = "Binary::" + source.Access + "::APT::Sandbox::User"; @@ -684,12 +685,12 @@ pkgAcquire::RunResult pkgAcquire::Run(int PulseIntervall) CheckDropPrivsMustBeDisabled(*this); Running = true; - - for (Queue *I = Queues; I != 0; I = I->Next) - I->Startup(); - + if (Log != 0) Log->Start(); + + for (Queue *I = Queues; I != 0; I = I->Next) + I->Startup(); bool WasCancelled = false; @@ -719,7 +720,7 @@ pkgAcquire::RunResult pkgAcquire::Run(int PulseIntervall) break; } - if(RunFdsSane(&RFds,&WFds) == false) + if(RunFds(&RFds,&WFds) == false) break; // Timeout, notify the log class @@ -1301,13 +1302,13 @@ bool pkgAcquireStatus::Pulse(pkgAcquire *Owner) { if (I->CurrentItem != 0 && I->CurrentItem->Owner->Complete == false) { - CurrentBytes += I->CurrentSize; - ResumeSize += I->ResumePoint; + CurrentBytes += I->CurrentItem->CurrentSize; + ResumeSize += I->CurrentItem->ResumePoint; // Files with unknown size always have 100% completion if (I->CurrentItem->Owner->FileSize == 0 && I->CurrentItem->Owner->Complete == false) - TotalBytes += I->CurrentSize; + TotalBytes += I->CurrentItem->CurrentSize; } } @@ -1371,8 +1372,6 @@ bool pkgAcquireStatus::Pulse(pkgAcquire *Owner) int fd = _config->FindI("APT::Status-Fd",-1); if(fd > 0) { - ostringstream status; - unsigned long long ETA = 0; if(CurrentCPS > 0 && TotalBytes > CurrentBytes) ETA = (TotalBytes - CurrentBytes) / CurrentCPS; @@ -1444,9 +1443,8 @@ void pkgAcquireStatus::Fetched(unsigned long long Size,unsigned long long Resume /*}}}*/ bool pkgAcquireStatus::ReleaseInfoChanges(metaIndex const * const LastRelease, metaIndex const * const CurrentRelease, std::vector &&Changes)/*{{{*/ { - auto const virt = dynamic_cast(this); - if (virt != nullptr) - return virt->ReleaseInfoChanges(LastRelease, CurrentRelease, std::move(Changes)); + (void) LastRelease; + (void) CurrentRelease; return ReleaseInfoChangesAsGlobalErrors(std::move(Changes)); } /*}}}*/ @@ -1464,12 +1462,6 @@ bool pkgAcquireStatus::ReleaseInfoChangesAsGlobalErrors(std::vector &&Changes) -{ - return ReleaseInfoChangesAsGlobalErrors(std::move(Changes)); -} -pkgAcquireStatus2::pkgAcquireStatus2() : pkgAcquireStatus() {} -pkgAcquireStatus2::~pkgAcquireStatus2() {} pkgAcquire::UriIterator::UriIterator(pkgAcquire::Queue *Q) : d(NULL), CurQ(Q), CurItem(0) diff --git a/apt-pkg/acquire.h b/apt-pkg/acquire.h index 1cf4da5..8cb4d25 100644 --- a/apt-pkg/acquire.h +++ b/apt-pkg/acquire.h @@ -76,14 +76,7 @@ #include #include -#ifndef APT_10_CLEANER_HEADERS -#include -#endif -#ifndef APT_8_CLEANER_HEADERS -using std::vector; -using std::string; -#endif class pkgAcquireStatus; class metaIndex; @@ -96,7 +89,7 @@ class metaIndex; * * \todo Why all the protected data items and methods? */ -class pkgAcquire +class APT_PUBLIC pkgAcquire { private: /** \brief FD of the Lock file we acquire in Setup (if any) */ @@ -240,12 +233,7 @@ class pkgAcquire * * \return false if there is an error condition on one of the fds */ - bool RunFdsSane(fd_set *RSet,fd_set *WSet); - - // just here for compatibility, needs to be removed on the next - // ABI/API break. RunFdsSane() is what should be used as it - // returns if there is an error condition on one of the fds - virtual void RunFds(fd_set *RSet,fd_set *WSet); + virtual bool RunFds(fd_set *RSet,fd_set *WSet); /** \brief Check for idle queues with ready-to-fetch items. * @@ -353,20 +341,6 @@ class pkgAcquire */ unsigned long long PartialPresent(); - /** \brief Delayed constructor - * - * \param Progress indicator associated with this download or - * \b NULL for none. This object is not owned by the - * download process and will not be deleted when the pkgAcquire - * object is destroyed. Naturally, it should live for at least as - * long as the pkgAcquire object does. - * \param Lock defines a lock file that should be acquired to ensure - * only one Acquire class is in action at the time or an empty string - * if no lock file should be used. If set also all needed directories - * will be created. - */ - APT_DEPRECATED_MSG("Use constructors, .SetLog and .GetLock as needed") bool Setup(pkgAcquireStatus *Progress = NULL, std::string const &Lock = ""); - void SetLog(pkgAcquireStatus *Progress) { Log = Progress; } /** \brief acquire lock and perform directory setup @@ -398,7 +372,7 @@ class pkgAcquire * * An item may have several associated ItemDescs over its lifetime. */ -struct pkgAcquire::ItemDesc : public WeakPointable +struct APT_PUBLIC pkgAcquire::ItemDesc : public WeakPointable { /** \brief URI from which to download this item. */ std::string URI; @@ -414,7 +388,7 @@ struct pkgAcquire::ItemDesc : public WeakPointable * * \todo Why so many protected values? */ -class pkgAcquire::Queue +class APT_PUBLIC pkgAcquire::Queue { friend class pkgAcquire; friend class pkgAcquire::UriIterator; @@ -439,6 +413,21 @@ class pkgAcquire::Queue /** \brief The underlying items interested in the download */ std::vector Owners; + /** \brief How many bytes of the file have been downloaded. Zero + * if the current progress of the file cannot be determined. + */ + unsigned long long CurrentSize = 0; + + /** \brief The total number of bytes to be downloaded. Zero if the + * total size of the final is unknown. + */ + unsigned long long TotalSize = 0; + + /** \brief How much of the file was already downloaded prior to + * starting this worker. + */ + unsigned long long ResumePoint = 0; + typedef std::vector::const_iterator owner_iterator; /** \brief Assign the ItemDesc portion of this QItem from @@ -597,7 +586,7 @@ class pkgAcquire::Queue }; /*}}}*/ /** \brief Iterates over all the URIs being fetched by a pkgAcquire object. {{{*/ -class pkgAcquire::UriIterator +class APT_PUBLIC pkgAcquire::UriIterator { /** \brief dpointer placeholder (for later in case we need it) */ void * const d; @@ -634,7 +623,7 @@ class pkgAcquire::UriIterator }; /*}}}*/ /** \brief Information about the properties of a single acquire method. {{{*/ -struct pkgAcquire::MethodConfig +struct APT_PUBLIC pkgAcquire::MethodConfig { class Private; /** \brief dpointer placeholder (for later in case we need it) */ @@ -699,7 +688,7 @@ struct pkgAcquire::MethodConfig * * \todo Why protected members? */ -class pkgAcquireStatus +class APT_PUBLIC pkgAcquireStatus { /** \brief dpointer placeholder (for later in case we need it) */ void * const d; @@ -819,17 +808,13 @@ class pkgAcquireStatus * success it will print for each change the message attached to it via GlobalError either as an * error (if DefaultAction == false) or as a notice otherwise. * - * \b Note: To keep ABI compatibility for now this method isn't marked as - * virtual, but you can derive your class from #pkgAcquireStatus2 which has it - * marked as virtual. TODO on next ABI break: merge both classes. - * * @param LastRelease can be used to extract further information from the previous Release file * @param CurrentRelease can be used to extract further information from the current Release file * @param Changes is an array of changes alongside explanatory messages * which should be presented in some way to the user. * @return \b true if all changes are accepted by user, otherwise or if user can't be asked \b false */ - bool ReleaseInfoChanges(metaIndex const * const LastRelease, metaIndex const * const CurrentRelease, std::vector &&Changes); + virtual bool ReleaseInfoChanges(metaIndex const * const LastRelease, metaIndex const * const CurrentRelease, std::vector &&Changes); APT_HIDDEN static bool ReleaseInfoChangesAsGlobalErrors(std::vector &&Changes); /** \brief Invoked when an item is confirmed to be up-to-date. @@ -871,14 +856,6 @@ class pkgAcquireStatus /** \brief Initialize all counters to 0 and the time to the current time. */ pkgAcquireStatus(); virtual ~pkgAcquireStatus(); -}; -class pkgAcquireStatus2: public pkgAcquireStatus -{ -public: - virtual bool ReleaseInfoChanges(metaIndex const * const LastRelease, metaIndex const * const CurrentRelease, std::vector &&Changes); - - pkgAcquireStatus2(); - virtual ~pkgAcquireStatus2(); }; /*}}}*/ /** @} */ diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index bb0e2f8..f2977b9 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -260,7 +260,7 @@ void pkgSimulate::ShortBreaks() cout << ']' << endl; } /*}}}*/ -bool pkgSimulate::Go2(APT::Progress::PackageManager *) /*{{{*/ +bool pkgSimulate::Go(APT::Progress::PackageManager *) /*{{{*/ { if (pkgDPkgPM::ExpandPendingCalls(d->List, Cache) == false) return false; @@ -1343,32 +1343,6 @@ bool pkgProblemResolver::ResolveByKeepInternal() return true; } /*}}}*/ -// ProblemResolver::InstallProtect - deprecated cpu-eating no-op /*{{{*/ -// --------------------------------------------------------------------- -/* Actions issued with FromUser bit set are protected from further - modification (expect by other calls with FromUser set) nowadays , so we - don't need to reissue actions here, they are already set in stone. */ -void pkgProblemResolver::InstallProtect() -{ - pkgDepCache::ActionGroup group(Cache); - - for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; ++I) - { - if ((Flags[I->ID] & Protected) == Protected) - { - if ((Flags[I->ID] & ToRemove) == ToRemove) - Cache.MarkDelete(I); - else - { - // preserve the information whether the package was auto - // or manually installed - bool autoInst = (Cache[I].Flags & pkgCache::Flag::Auto); - Cache.MarkInstall(I, false, 0, !autoInst); - } - } - } -} - /*}}}*/ // PrioSortList - Sort a list of versions by priority /*{{{*/ // --------------------------------------------------------------------- /* This is meant to be used in conjunction with AllTargets to get a list diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h index c5c9f4c..fc578a4 100644 --- a/apt-pkg/algorithms.h +++ b/apt-pkg/algorithms.h @@ -16,7 +16,7 @@ pkgFixBroken corrects a broken system so that it is in a sane state. - pkgAllUpgrade attempts to upgade as many packages as possible but + pkgAllUpgrade attempts to upgrade as many packages as possible but without installing new packages. The problem resolver class contains a number of complex algorithms @@ -38,25 +38,16 @@ #include -#ifndef APT_8_CLEANER_HEADERS -#include -using std::ostream; -#endif -#ifndef APT_9_CLEANER_HEADERS -// include pkg{DistUpgrade,AllUpgrade,MiniizeUpgrade} here for compatibility -#include -#include -#endif class pkgSimulatePrivate; -class pkgSimulate : public pkgPackageManager /*{{{*/ +class APT_PUBLIC pkgSimulate : public pkgPackageManager /*{{{*/ { pkgSimulatePrivate * const d; protected: - class Policy : public pkgDepCache::Policy + class APT_PUBLIC Policy : public pkgDepCache::Policy { pkgDepCache *Cache; public: @@ -80,9 +71,8 @@ class pkgSimulate : public pkgPackageManager /*{{{*/ virtual bool Configure(PkgIterator Pkg) APT_OVERRIDE; virtual bool Remove(PkgIterator Pkg,bool Purge) APT_OVERRIDE; - // FIXME: trick to avoid ABI break for virtual reimplementation; fix on next ABI break public: - APT_HIDDEN bool Go2(APT::Progress::PackageManager * progress); + bool Go(APT::Progress::PackageManager * progress) override; private: APT_HIDDEN void ShortBreaks(); @@ -97,7 +87,7 @@ private: virtual ~pkgSimulate(); }; /*}}}*/ -class pkgProblemResolver /*{{{*/ +class APT_PUBLIC pkgProblemResolver /*{{{*/ { private: /** \brief dpointer placeholder (for later in case we need it) */ @@ -121,7 +111,7 @@ class pkgProblemResolver /*{{{*/ // Sort stuff APT_HIDDEN int ScoreSort(Package const *A, Package const *B) APT_PURE; - struct PackageKill + struct APT_PUBLIC PackageKill { PkgIterator Pkg; DepIterator Dep; @@ -147,16 +137,14 @@ class pkgProblemResolver /*{{{*/ bool ResolveByKeep(OpProgress * const Progress = NULL); APT_HIDDEN bool ResolveByKeepInternal(); - APT_DEPRECATED_MSG("NOOP as MarkInstall enforces not overriding FromUser markings") void InstallProtect(); - explicit pkgProblemResolver(pkgDepCache *Cache); virtual ~pkgProblemResolver(); }; /*}}}*/ -bool pkgApplyStatus(pkgDepCache &Cache); -bool pkgFixBroken(pkgDepCache &Cache); +APT_PUBLIC bool pkgApplyStatus(pkgDepCache &Cache); +APT_PUBLIC bool pkgFixBroken(pkgDepCache &Cache); -void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List); +APT_PUBLIC void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List); #endif diff --git a/apt-pkg/apt-pkg.pc.in b/apt-pkg/apt-pkg.pc.in new file mode 100644 index 0000000..c6491d9 --- /dev/null +++ b/apt-pkg/apt-pkg.pc.in @@ -0,0 +1,8 @@ +libdir=@CMAKE_INSTALL_FULL_LIBDIR@ +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ + +Name: apt-pkg +Description: package management runtime library +Version: @PROJECT_VERSION@ +Libs: -L${libdir} -lapt-pkg -pthread +Cflags: -I${includedir} diff --git a/apt-pkg/aptconfiguration.h b/apt-pkg/aptconfiguration.h index 34621a2..2cb2d82 100644 --- a/apt-pkg/aptconfiguration.h +++ b/apt-pkg/aptconfiguration.h @@ -11,6 +11,7 @@ #ifndef APT_CONFIGURATION_H #define APT_CONFIGURATION_H // Include Files /*{{{*/ +#include #include #include #include @@ -38,7 +39,7 @@ namespace Configuration { /*{{{*/ * * \return a vector of the compression types in the preferred usage order */ - std::vector const getCompressionTypes(bool const &Cached = true); + APT_PUBLIC std::vector const getCompressionTypes(bool const &Cached = true); /** \brief Returns a vector of Language Codes * @@ -63,7 +64,7 @@ namespace Configuration { /*{{{*/ * * \return a vector of (all) Language Codes in the preferred usage order */ - std::vector const getLanguages(bool const &All = false, + APT_PUBLIC std::vector const getLanguages(bool const &All = false, bool const &Cached = true, char const ** const Locale = 0); /** \brief Are we interested in the given Language? @@ -72,7 +73,7 @@ namespace Configuration { /*{{{*/ * \param All defines if we check against all codes or only against used codes * \return true if we are interested, false otherwise */ - bool checkLanguage(std::string Lang, bool const All = false); + APT_PUBLIC bool checkLanguage(std::string Lang, bool const All = false); /** \brief Returns a vector of Architectures we support * @@ -81,17 +82,17 @@ namespace Configuration { /*{{{*/ * * \return a vector of Architectures in preferred order */ - std::vector const getArchitectures(bool const &Cached = true); + APT_PUBLIC std::vector const getArchitectures(bool const &Cached = true); /** \brief Are we interested in the given Architecture? * * \param Arch we want to check * \return true if we are interested, false otherwise */ - bool checkArchitecture(std::string const &Arch); + APT_PUBLIC bool checkArchitecture(std::string const &Arch); /** \brief Representation of supported compressors */ - struct Compressor { + struct APT_PUBLIC Compressor { std::string Name; std::string Extension; std::string Binary; @@ -112,15 +113,15 @@ namespace Configuration { /*{{{*/ * * \return a vector of Compressors */ - std::vector const getCompressors(bool const Cached = true); + APT_PUBLIC std::vector const getCompressors(bool const Cached = true); /** \brief Return a vector of extensions supported for data.tar's */ - std::vector const getCompressorExtensions(); + APT_PUBLIC std::vector const getCompressorExtensions(); /** \return Return a vector of enabled build profile specifications */ - std::vector const getBuildProfiles(); + APT_PUBLIC std::vector const getBuildProfiles(); /** \return Return a comma-separated list of enabled build profile specifications */ - std::string const getBuildProfilesString(); + APT_PUBLIC std::string const getBuildProfilesString(); /*}}}*/ } /*}}}*/ diff --git a/apt-pkg/cachefile.cc b/apt-pkg/cachefile.cc index 9a1a6cf..8b86fa3 100644 --- a/apt-pkg/cachefile.cc +++ b/apt-pkg/cachefile.cc @@ -106,7 +106,7 @@ bool pkgCacheFile::BuildCaches(OpProgress *Progress, bool WithLock) if (WithLock == true) { - if (_system->Lock() == false) + if (_system->Lock(Progress) == false) return false; d->WithLock = true; } diff --git a/apt-pkg/cachefile.h b/apt-pkg/cachefile.h index ed5d5c5..b249082 100644 --- a/apt-pkg/cachefile.h +++ b/apt-pkg/cachefile.h @@ -22,11 +22,6 @@ #include #include -#ifndef APT_8_CLEANER_HEADERS -#include -#include -#include -#endif class MMap; class pkgPolicy; @@ -34,7 +29,7 @@ class pkgSourceList; class pkgIndexFile; class OpProgress; -class pkgCacheFile +class APT_PUBLIC pkgCacheFile { struct Private; /** \brief dpointer placeholder (for later in case we need it) */ @@ -65,13 +60,11 @@ class pkgCacheFile inline unsigned char &operator [](pkgCache::DepIterator const &I) const {return (*DCache)[I];}; bool BuildCaches(OpProgress *Progress = NULL,bool WithLock = true); - APT_DEPRECATED_MSG("Pass Progress in as a pointer") bool BuildCaches(OpProgress &Progress,bool const &WithLock = true) { return BuildCaches(&Progress, WithLock); }; bool BuildSourceList(OpProgress *Progress = NULL); bool BuildPolicy(OpProgress *Progress = NULL); bool BuildDepCache(OpProgress *Progress = NULL); bool Open(OpProgress *Progress = NULL, bool WithLock = true); inline bool ReadOnlyOpen(OpProgress *Progress = NULL) { return Open(Progress, false); }; - APT_DEPRECATED_MSG("Pass Progress in as a pointer") bool Open(OpProgress &Progress,bool const &WithLock = true) { return Open(&Progress, WithLock); }; static void RemoveCaches(); void Close(); diff --git a/apt-pkg/cachefilter-patterns.cc b/apt-pkg/cachefilter-patterns.cc new file mode 100644 index 0000000..bc0eece --- /dev/null +++ b/apt-pkg/cachefilter-patterns.cc @@ -0,0 +1,549 @@ +/* + * cachefilter-patterns.cc - Parser for aptitude-style patterns + * + * Copyright (c) 2019 Canonical Ltd + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include + +#include + +#include + +namespace APT +{ +namespace Internal +{ + +static const constexpr struct +{ + APT::StringView shortName; + APT::StringView longName; + bool takesArgument; +} shortPatterns[] = { + {"r"_sv, "?architecture"_sv, true}, + {"A"_sv, "?archive"_sv, true}, + {"M"_sv, "?automatic"_sv, false}, + {"b"_sv, "?broken"_sv, false}, + {"c"_sv, "?config-files"_sv, false}, + {"E"_sv, "?essential"_sv, false}, + {"F"_sv, "?false"_sv, false}, + {"g"_sv, "?garbage"_sv, false}, + {"i"_sv, "?installed"_sv, false}, + {"n"_sv, "?name"_sv, true}, + {"o"_sv, "?obsolete"_sv, false}, + {"O"_sv, "?origin"_sv, true}, + {"s"_sv, "?section"_sv, true}, + {"e"_sv, "?source-package"_sv, true}, + {"T"_sv, "?true"_sv, false}, + {"U"_sv, "?upgradable"_sv, false}, + {"V"_sv, "?version"_sv, true}, + {"v"_sv, "?virtual"_sv, false}, +}; + +template +std::string rstrprintf(Args... args) +{ + std::string str; + strprintf(str, std::forward(args)...); + return str; +} + +// Parse a complete pattern, make sure it's the entire input +std::unique_ptr PatternTreeParser::parseTop() +{ + skipSpace(); + auto node = parse(); + skipSpace(); + + if (node == nullptr) + throw Error{Node{0, sentence.size()}, "Expected pattern"}; + + if (node->end != sentence.size()) + throw Error{Node{node->end, sentence.size()}, "Expected end of file"}; + + return node; +} + +// Parse any pattern +std::unique_ptr PatternTreeParser::parse() +{ + return parseOr(); +} + +std::unique_ptr PatternTreeParser::parseOr() +{ + auto start = state.offset; + std::vector> nodes; + + auto firstNode = parseAnd(); + + if (firstNode == nullptr) + return nullptr; + + nodes.push_back(std::move(firstNode)); + for (skipSpace(); sentence[state.offset] == '|'; skipSpace()) + { + state.offset++; + skipSpace(); + auto node = parseAnd(); + + if (node == nullptr) + throw Error{Node{state.offset, sentence.size()}, "Expected pattern after |"}; + + nodes.push_back(std::move(node)); + } + + if (nodes.size() == 0) + return nullptr; + if (nodes.size() == 1) + return std::move(nodes[0]); + + auto node = std::make_unique(); + node->start = start; + node->end = nodes[nodes.size() - 1]->end; + node->term = "?or"; + node->arguments = std::move(nodes); + node->haveArgumentList = true; + + return node; +} + +std::unique_ptr PatternTreeParser::parseAnd() +{ + auto start = state.offset; + std::vector> nodes; + + for (skipSpace(); state.offset < sentence.size(); skipSpace()) + { + auto node = parseUnary(); + + if (node == nullptr) + break; + + nodes.push_back(std::move(node)); + } + + if (nodes.size() == 0) + return nullptr; + if (nodes.size() == 1) + return std::move(nodes[0]); + + auto node = std::make_unique(); + node->start = start; + node->end = nodes[nodes.size() - 1]->end; + node->term = "?and"; + node->arguments = std::move(nodes); + node->haveArgumentList = true; + + return node; +} + +std::unique_ptr PatternTreeParser::parseUnary() +{ + + if (sentence[state.offset] != '!') + return parsePrimary(); + + auto start = ++state.offset; + auto primary = parsePrimary(); + + if (primary == nullptr) + throw Error{Node{start, sentence.size()}, "Expected pattern"}; + + auto node = std::make_unique(); + node->start = start; + node->end = primary->end; + node->term = "?not"; + node->arguments.push_back(std::move(primary)); + node->haveArgumentList = true; + return node; +} + +std::unique_ptr PatternTreeParser::parsePrimary() +{ + std::unique_ptr node; + if ((node = parseShortPattern()) != nullptr) + return node; + if ((node = parsePattern()) != nullptr) + return node; + if ((node = parseGroup()) != nullptr) + return node; + + return nullptr; +} + +std::unique_ptr PatternTreeParser::parseGroup() +{ + if (sentence[state.offset] != '(') + return nullptr; + + auto start = state.offset++; + + skipSpace(); + auto node = parse(); + if (node == nullptr) + throw Error{Node{state.offset, sentence.size()}, + "Expected pattern after '('"}; + skipSpace(); + + if (sentence[state.offset] != ')') + throw Error{Node{state.offset, sentence.size()}, + "Expected closing parenthesis"}; + + auto end = ++state.offset; + node->start = start; + node->end = end; + return node; +} + +std::unique_ptr PatternTreeParser::parseArgument(bool shrt) +{ + std::unique_ptr node; + if ((node = parseQuotedWord()) != nullptr) + return node; + if ((node = parseWord(shrt)) != nullptr) + return node; + if ((node = parse()) != nullptr) + return node; + + throw Error{Node{state.offset, sentence.size()}, + "Expected pattern, quoted word, or word"}; +} + +// Parse a short pattern +std::unique_ptr PatternTreeParser::parseShortPattern() +{ + if (sentence[state.offset] != '~') + return nullptr; + + for (auto &sp : shortPatterns) + { + if (sentence.substr(state.offset + 1, sp.shortName.size()) != sp.shortName) + continue; + + auto node = std::make_unique(); + node->end = node->start = state.offset; + node->term = sp.longName; + + state.offset += sp.shortName.size() + 1; + if (sp.takesArgument) + { + node->arguments.push_back(parseArgument(true)); + node->haveArgumentList = true; + } + node->end = state.offset; + + return node; + } + + throw Error{Node{state.offset, sentence.size()}, "Unknown short pattern"}; +} + +// Parse a list pattern (or function call pattern) +std::unique_ptr PatternTreeParser::parsePattern() +{ + static constexpr auto CHARS = ("0123456789" + "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "-"_sv); + if (sentence[state.offset] != '?') + return nullptr; + + auto node = std::make_unique(); + node->end = node->start = state.offset; + state.offset++; + + while (CHARS.find(sentence[state.offset]) != APT::StringView::npos) + { + ++state.offset; + } + + node->term = sentence.substr(node->start, state.offset - node->start); + + if (node->term.size() <= 1) + throw Error{*node, "Pattern must have a term/name"}; + + node->end = skipSpace(); + // We don't have any arguments, return node; + if (sentence[state.offset] != '(') + return node; + node->end = ++state.offset; + skipSpace(); + + node->haveArgumentList = true; + + // Empty argument list, return + if (sentence[state.offset] == ')') + { + node->end = ++state.offset; + return node; + } + + node->arguments.push_back(parseArgument(false)); + skipSpace(); + while (sentence[state.offset] == ',') + { + ++state.offset; + skipSpace(); + // This was a trailing comma - allow it and break the loop + if (sentence[state.offset] == ')') + break; + node->arguments.push_back(parseArgument(false)); + skipSpace(); + } + + node->end = state.offset; + if (sentence[state.offset] != ')') + throw Error{node->arguments.empty() ? *node : *node->arguments[node->arguments.size() - 1], + rstrprintf("Expected closing parenthesis or comma after last argument, received %c", sentence[state.offset])}; + + node->end = ++state.offset; + return node; +} + +// Parse a quoted word atom +std::unique_ptr PatternTreeParser::parseQuotedWord() +{ + if (sentence[state.offset] != '"') + return nullptr; + + auto node = std::make_unique(); + node->start = state.offset; + + // Eat beginning of string + state.offset++; + + while (sentence[state.offset] != '"' && sentence[state.offset] != '\0') + state.offset++; + + // End of string + if (sentence[state.offset] != '"') + throw Error{*node, "Could not find end of string"}; + state.offset++; + + node->end = state.offset; + node->word = sentence.substr(node->start + 1, node->end - node->start - 2); + + return node; +} + +// Parse a bare word atom +std::unique_ptr PatternTreeParser::parseWord(bool shrt) +{ + static const constexpr auto DISALLOWED_START = "!?~|,() \0"_sv; + static const constexpr auto DISALLOWED_LONG = "|,()\0"_sv; + static const constexpr auto DISALLOWED_SHRT = "|,() ?\0"_sv; + const auto DISALLOWED = shrt ? DISALLOWED_SHRT : DISALLOWED_LONG; + + if (DISALLOWED_START.find(sentence[state.offset]) != APT::StringView::npos) + return nullptr; + + auto node = std::make_unique(); + node->start = state.offset; + + while (DISALLOWED.find(sentence[state.offset]) == APT::StringView::npos) + state.offset++; + + node->end = state.offset; + node->word = sentence.substr(node->start, node->end - node->start); + return node; +} + +// Rendering of the tree in JSON for debugging +std::ostream &PatternTreeParser::PatternNode::render(std::ostream &os) +{ + + os << term.to_string(); + if (haveArgumentList) + { + os << "("; + for (auto &node : arguments) + node->render(os) << ","; + os << ")"; + } + return os; +} + +std::ostream &PatternTreeParser::WordNode::render(std::ostream &os) +{ + return quoted ? os << '"' << word.to_string() << '"' : os << word.to_string(); +} + +std::nullptr_t PatternTreeParser::Node::error(std::string message) +{ + throw Error{*this, message}; +} + +bool PatternTreeParser::PatternNode::matches(APT::StringView name, int min, int max) +{ + if (name != term) + return false; + if (max != 0 && !haveArgumentList) + error(rstrprintf("%s expects an argument list", term.to_string().c_str())); + if (max == 0 && haveArgumentList) + error(rstrprintf("%s does not expect an argument list", term.to_string().c_str())); + if (min >= 0 && min == max && (arguments.size() != size_t(min))) + error(rstrprintf("%s expects %d arguments, but received %d arguments", term.to_string().c_str(), min, arguments.size())); + if (min >= 0 && arguments.size() < size_t(min)) + error(rstrprintf("%s expects at least %d arguments, but received %d arguments", term.to_string().c_str(), min, arguments.size())); + if (max >= 0 && arguments.size() > size_t(max)) + error(rstrprintf("%s expects at most %d arguments, but received %d arguments", term.to_string().c_str(), max, arguments.size())); + return true; +} + +std::unique_ptr PatternParser::aPattern(std::unique_ptr &nodeP) +{ + assert(nodeP != nullptr); + auto node = dynamic_cast(nodeP.get()); + if (node == nullptr) + nodeP->error("Expected a pattern"); + + if (node->matches("?architecture", 1, 1)) + return std::make_unique(aWord(node->arguments[0])); + if (node->matches("?archive", 1, 1)) + return std::make_unique(aWord(node->arguments[0])); + if (node->matches("?all-versions", 1, 1)) + return std::make_unique(aPattern(node->arguments[0])); + if (node->matches("?any-version", 1, 1)) + return std::make_unique(aPattern(node->arguments[0])); + if (node->matches("?automatic", 0, 0)) + return std::make_unique(file); + if (node->matches("?broken", 0, 0)) + return std::make_unique(file); + if (node->matches("?config-files", 0, 0)) + return std::make_unique(); + if (node->matches("?essential", 0, 0)) + return std::make_unique(); + if (node->matches("?exact-name", 1, 1)) + return std::make_unique(aWord(node->arguments[0])); + if (node->matches("?false", 0, 0)) + return std::make_unique(); + if (node->matches("?garbage", 0, 0)) + return std::make_unique(file); + if (node->matches("?installed", 0, 0)) + return std::make_unique(file); + if (node->matches("?name", 1, 1)) + return std::make_unique(aWord(node->arguments[0])); + if (node->matches("?not", 1, 1)) + return std::make_unique(aPattern(node->arguments[0]).release()); + if (node->matches("?obsolete", 0, 0)) + return std::make_unique(); + if (node->matches("?origin", 1, 1)) + return std::make_unique(aWord(node->arguments[0])); + if (node->matches("?section", 1, 1)) + return std::make_unique(aWord(node->arguments[0])); + if (node->matches("?source-package", 1, 1)) + return std::make_unique(aWord(node->arguments[0])); + if (node->matches("?source-version", 1, 1)) + return std::make_unique(aWord(node->arguments[0])); + if (node->matches("?true", 0, 0)) + return std::make_unique(); + if (node->matches("?upgradable", 0, 0)) + return std::make_unique(file); + if (node->matches("?version", 1, 1)) + return std::make_unique(aWord(node->arguments[0])); + if (node->matches("?virtual", 0, 0)) + return std::make_unique(); + if (node->matches("?x-name-fnmatch", 1, 1)) + return std::make_unique(aWord(node->arguments[0])); + + // Variable argument patterns + if (node->matches("?and", 0, -1) || node->matches("?narrow", 0, -1)) + { + auto pattern = std::make_unique(); + for (auto &arg : node->arguments) + pattern->AND(aPattern(arg).release()); + if (node->term == "?narrow") + return std::make_unique(std::move(pattern)); + return pattern; + } + if (node->matches("?or", 0, -1)) + { + auto pattern = std::make_unique(); + + for (auto &arg : node->arguments) + pattern->OR(aPattern(arg).release()); + return pattern; + } + + node->error(rstrprintf("Unrecognized pattern '%s'", node->term.to_string().c_str())); + + return nullptr; +} + +std::string PatternParser::aWord(std::unique_ptr &nodeP) +{ + assert(nodeP != nullptr); + auto node = dynamic_cast(nodeP.get()); + if (node == nullptr) + nodeP->error("Expected a word"); + return node->word.to_string(); +} + +namespace Patterns +{ + +BaseRegexMatcher::BaseRegexMatcher(std::string const &Pattern) +{ + pattern = new regex_t; + int const Res = regcomp(pattern, Pattern.c_str(), REG_EXTENDED | REG_ICASE | REG_NOSUB); + if (Res == 0) + return; + + delete pattern; + pattern = NULL; + char Error[300]; + regerror(Res, pattern, Error, sizeof(Error)); + _error->Error(_("Regex compilation error - %s"), Error); +} +bool BaseRegexMatcher::operator()(const char *string) +{ + if (unlikely(pattern == nullptr) || string == nullptr) + return false; + else + return regexec(pattern, string, 0, 0, 0) == 0; +} +BaseRegexMatcher::~BaseRegexMatcher() +{ + if (pattern == NULL) + return; + regfree(pattern); + delete pattern; +} +} // namespace Patterns + +} // namespace Internal + +// The bridge into the public world +std::unique_ptr APT::CacheFilter::ParsePattern(APT::StringView pattern, pkgCacheFile *file) +{ + if (file != nullptr && !file->BuildDepCache()) + return nullptr; + + try + { + auto top = APT::Internal::PatternTreeParser(pattern).parseTop(); + APT::Internal::PatternParser parser{file}; + return parser.aPattern(top); + } + catch (APT::Internal::PatternTreeParser::Error &e) + { + std::stringstream ss; + ss << "input:" << e.location.start << "-" << e.location.end << ": error: " << e.message << "\n"; + ss << pattern.to_string() << "\n"; + for (size_t i = 0; i < e.location.start; i++) + ss << " "; + for (size_t i = e.location.start; i < e.location.end; i++) + ss << "^"; + + ss << "\n"; + + _error->Error("%s", ss.str().c_str()); + return nullptr; + } +} + +} // namespace APT diff --git a/apt-pkg/cachefilter-patterns.h b/apt-pkg/cachefilter-patterns.h new file mode 100644 index 0000000..093364f --- /dev/null +++ b/apt-pkg/cachefilter-patterns.h @@ -0,0 +1,379 @@ +/* + * cachefilter-patterns.h - Pattern parser and additional patterns as matchers + * + * Copyright (c) 2019 Canonical Ltd + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef APT_CACHEFILTER_PATTERNS_H +#define APT_CACHEFILTER_PATTERNS_H +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef APT_COMPILING_APT +#error Internal header +#endif + +namespace APT +{ + +namespace Internal +{ +/** + * \brief PatternTreeParser parses the given sentence into a parse tree. + * + * The parse tree consists of nodes: + * - Word nodes which contains words or quoted words + * - Patterns, which represent ?foo and ?foo(...) patterns + */ +struct APT_PUBLIC PatternTreeParser +{ + + struct Node + { + size_t start = 0; + size_t end = 0; + + explicit Node(size_t start = 0, size_t end = 0) : start(start), end(end) {} + + virtual std::ostream &render(std::ostream &os) { return os; }; + std::nullptr_t error(std::string message); + }; + + struct Error : public std::exception + { + Node location; + std::string message; + + Error(Node location, std::string message) : location(location), message(message) {} + const char *what() const throw() override { return message.c_str(); } + }; + + struct PatternNode : public Node + { + APT::StringView term; + std::vector> arguments; + bool haveArgumentList = false; + + APT_HIDDEN std::ostream &render(std::ostream &stream) override; + APT_HIDDEN bool matches(APT::StringView name, int min, int max); + }; + + struct WordNode : public Node + { + APT::StringView word; + bool quoted = false; + APT_HIDDEN std::ostream &render(std::ostream &stream) override; + }; + + struct State + { + size_t offset = 0; + }; + + APT::StringView sentence; + State state; + + PatternTreeParser(APT::StringView sentence) : sentence(sentence){}; + off_t skipSpace() + { + while (sentence[state.offset] == ' ' || sentence[state.offset] == '\t' || sentence[state.offset] == '\r' || sentence[state.offset] == '\n') + state.offset++; + return state.offset; + }; + + /// \brief Parse a complete pattern + /// + /// There may not be anything before or after the pattern, except for + /// whitespace. + std::unique_ptr parseTop(); + std::unique_ptr parse(); // public for test cases only + + private: + APT_HIDDEN std::unique_ptr parseOr(); + APT_HIDDEN std::unique_ptr parseAnd(); + APT_HIDDEN std::unique_ptr parseUnary(); + APT_HIDDEN std::unique_ptr parsePrimary(); + APT_HIDDEN std::unique_ptr parseGroup(); + APT_HIDDEN std::unique_ptr parsePattern(); + APT_HIDDEN std::unique_ptr parseShortPattern(); + APT_HIDDEN std::unique_ptr parseArgument(bool shrt); + APT_HIDDEN std::unique_ptr parseWord(bool shrt); + APT_HIDDEN std::unique_ptr parseQuotedWord(); +}; + +/** + * \brief PatternParser parses the given sentence into a parse tree. + * + * The parse tree consists of nodes: + * - Word nodes which contains words or quoted words + * - Patterns, which represent ?foo and ?foo(...) patterns + */ +struct APT_HIDDEN PatternParser +{ + pkgCacheFile *file; + + std::unique_ptr aPattern(std::unique_ptr &nodeP); + std::string aWord(std::unique_ptr &nodeP); +}; + +namespace Patterns +{ +using namespace APT::CacheFilter; + +/** \brief Basic helper class for matching regex */ +class BaseRegexMatcher +{ + regex_t *pattern; + + public: + BaseRegexMatcher(std::string const &string); + ~BaseRegexMatcher(); + bool operator()(const char *cstring); + bool operator()(std::string const &string) + { + return (*this)(string.c_str()); + } +}; + +struct APT_HIDDEN PackageIsAutomatic : public PackageMatcher +{ + pkgCacheFile *Cache; + explicit PackageIsAutomatic(pkgCacheFile *Cache) : Cache(Cache) {} + bool operator()(pkgCache::PkgIterator const &Pkg) override + { + assert(Cache != nullptr); + return ((*Cache)[Pkg].Flags & pkgCache::Flag::Auto) != 0; + } +}; + +struct APT_HIDDEN PackageIsBroken : public PackageMatcher +{ + pkgCacheFile *Cache; + explicit PackageIsBroken(pkgCacheFile *Cache) : Cache(Cache) {} + bool operator()(pkgCache::PkgIterator const &Pkg) override + { + assert(Cache != nullptr); + auto state = (*Cache)[Pkg]; + return state.InstBroken() || state.NowBroken(); + } +}; + +struct APT_HIDDEN PackageIsConfigFiles : public PackageMatcher +{ + bool operator()(pkgCache::PkgIterator const &Pkg) override + { + return Pkg->CurrentState == pkgCache::State::ConfigFiles; + } +}; + +struct APT_HIDDEN PackageIsGarbage : public PackageMatcher +{ + pkgCacheFile *Cache; + explicit PackageIsGarbage(pkgCacheFile *Cache) : Cache(Cache) {} + bool operator()(pkgCache::PkgIterator const &Pkg) override + { + assert(Cache != nullptr); + return (*Cache)[Pkg].Garbage; + } +}; +struct APT_HIDDEN PackageIsEssential : public PackageMatcher +{ + bool operator()(pkgCache::PkgIterator const &Pkg) override + { + return (Pkg->Flags & pkgCache::Flag::Essential) != 0; + } +}; + +struct APT_HIDDEN PackageHasExactName : public PackageMatcher +{ + std::string name; + explicit PackageHasExactName(std::string name) : name(name) {} + bool operator()(pkgCache::PkgIterator const &Pkg) override + { + return Pkg.Name() == name; + } +}; + +struct APT_HIDDEN PackageIsInstalled : public PackageMatcher +{ + pkgCacheFile *Cache; + explicit PackageIsInstalled(pkgCacheFile *Cache) : Cache(Cache) {} + bool operator()(pkgCache::PkgIterator const &Pkg) override + { + assert(Cache != nullptr); + return Pkg->CurrentVer != 0; + } +}; + +struct APT_HIDDEN PackageIsObsolete : public PackageMatcher +{ + bool operator()(pkgCache::PkgIterator const &pkg) override + { + // This code can be written without loops, as aptitude does, but it + // is far less readable. + if (pkg.CurrentVer().end()) + return false; + + // See if there is any version that exists in a repository, + // if so return false + for (auto ver = pkg.VersionList(); !ver.end(); ver++) + { + for (auto file = ver.FileList(); !file.end(); file++) + { + if ((file.File()->Flags & pkgCache::Flag::NotSource) == 0) + return false; + } + } + + return true; + } +}; + +struct APT_HIDDEN PackageIsUpgradable : public PackageMatcher +{ + pkgCacheFile *Cache; + explicit PackageIsUpgradable(pkgCacheFile *Cache) : Cache(Cache) {} + bool operator()(pkgCache::PkgIterator const &Pkg) override + { + assert(Cache != nullptr); + return Pkg->CurrentVer != 0 && (*Cache)[Pkg].Upgradable(); + } +}; + +struct APT_HIDDEN PackageIsVirtual : public PackageMatcher +{ + bool operator()(pkgCache::PkgIterator const &Pkg) override + { + return Pkg->VersionList == 0; + } +}; + +struct APT_HIDDEN VersionAnyMatcher : public Matcher +{ + bool operator()(pkgCache::GrpIterator const &) override { return false; } + bool operator()(pkgCache::VerIterator const &Ver) override = 0; + bool operator()(pkgCache::PkgIterator const &Pkg) override + { + for (auto Ver = Pkg.VersionList(); not Ver.end(); Ver++) + { + if ((*this)(Ver)) + return true; + } + return false; + } +}; + +struct APT_HIDDEN VersionIsAllVersions : public Matcher +{ + std::unique_ptr base; + VersionIsAllVersions(std::unique_ptr base) : base(std::move(base)) {} + bool operator()(pkgCache::GrpIterator const &) override { return false; } + bool operator()(pkgCache::VerIterator const &Ver) override + { + return (*base)(Ver); + } + bool operator()(pkgCache::PkgIterator const &Pkg) override + { + for (auto Ver = Pkg.VersionList(); not Ver.end(); Ver++) + { + if (not(*this)(Ver)) + return false; + } + return true; + } +}; + +struct APT_HIDDEN VersionIsAnyVersion : public VersionAnyMatcher +{ + std::unique_ptr base; + VersionIsAnyVersion(std::unique_ptr base) : base(std::move(base)) {} + bool operator()(pkgCache::VerIterator const &Ver) override + { + return (*base)(Ver); + } +}; + +struct APT_HIDDEN VersionIsArchive : public VersionAnyMatcher +{ + BaseRegexMatcher matcher; + VersionIsArchive(std::string const &pattern) : matcher(pattern) {} + bool operator()(pkgCache::VerIterator const &Ver) override + { + for (auto VF = Ver.FileList(); not VF.end(); VF++) + { + if (VF.File().Archive() && matcher(VF.File().Archive())) + return true; + } + return false; + } +}; + +struct APT_HIDDEN VersionIsOrigin : public VersionAnyMatcher +{ + BaseRegexMatcher matcher; + VersionIsOrigin(std::string const &pattern) : matcher(pattern) {} + bool operator()(pkgCache::VerIterator const &Ver) override + { + for (auto VF = Ver.FileList(); not VF.end(); VF++) + { + if (VF.File().Origin() && matcher(VF.File().Origin())) + return true; + } + return false; + } +}; + +struct APT_HIDDEN VersionIsSection : public VersionAnyMatcher +{ + BaseRegexMatcher matcher; + VersionIsSection(std::string const &pattern) : matcher(pattern) {} + bool operator()(pkgCache::VerIterator const &Ver) override + { + return matcher(Ver.Section()); + } +}; + +struct APT_HIDDEN VersionIsSourcePackage : public VersionAnyMatcher +{ + BaseRegexMatcher matcher; + VersionIsSourcePackage(std::string const &pattern) : matcher(pattern) {} + bool operator()(pkgCache::VerIterator const &Ver) override + { + return matcher(Ver.SourcePkgName()); + } +}; + +struct APT_HIDDEN VersionIsSourceVersion : public VersionAnyMatcher +{ + BaseRegexMatcher matcher; + VersionIsSourceVersion(std::string const &pattern) : matcher(pattern) {} + bool operator()(pkgCache::VerIterator const &Ver) override + { + return matcher(Ver.SourceVerStr()); + } +}; + +struct APT_HIDDEN VersionIsVersion : public VersionAnyMatcher +{ + BaseRegexMatcher matcher; + VersionIsVersion(std::string const &pattern) : matcher(pattern) {} + bool operator()(pkgCache::VerIterator const &Ver) override + { + return matcher(Ver.VerStr()); + } +}; +} // namespace Patterns +} // namespace Internal +} // namespace APT +#endif diff --git a/apt-pkg/cachefilter.h b/apt-pkg/cachefilter.h index 8a6c013..ccff6f9 100644 --- a/apt-pkg/cachefilter.h +++ b/apt-pkg/cachefilter.h @@ -7,7 +7,9 @@ #define APT_CACHEFILTER_H // Include Files /*{{{*/ #include +#include +#include #include #include @@ -18,7 +20,7 @@ class pkgCacheFile; namespace APT { namespace CacheFilter { -class Matcher { +class APT_PUBLIC Matcher { public: virtual bool operator() (pkgCache::PkgIterator const &/*Pkg*/) = 0; virtual bool operator() (pkgCache::GrpIterator const &/*Grp*/) = 0; @@ -26,7 +28,7 @@ public: virtual ~Matcher(); }; -class PackageMatcher : public Matcher { +class APT_PUBLIC PackageMatcher : public Matcher { public: virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE = 0; virtual bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE { return (*this)(Ver.ParentPkg()); } @@ -35,21 +37,21 @@ public: }; // Generica like True, False, NOT, AND, OR /*{{{*/ -class TrueMatcher : public Matcher { +class APT_PUBLIC TrueMatcher : public Matcher { public: virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; virtual bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE; virtual bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE; }; -class FalseMatcher : public Matcher { +class APT_PUBLIC FalseMatcher : public Matcher { public: virtual bool operator() (pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; virtual bool operator() (pkgCache::GrpIterator const &Grp) APT_OVERRIDE; virtual bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE; }; -class NOTMatcher : public Matcher { +class APT_PUBLIC NOTMatcher : public Matcher { Matcher * const matcher; public: explicit NOTMatcher(Matcher * const matcher); @@ -59,7 +61,7 @@ public: virtual ~NOTMatcher(); }; -class ANDMatcher : public Matcher { +class APT_PUBLIC ANDMatcher : public Matcher { std::vector matchers; public: // 5 ought to be enough for everybody… c++11 variadic templates would be nice @@ -75,7 +77,7 @@ public: virtual bool operator() (pkgCache::VerIterator const &Ver) APT_OVERRIDE; virtual ~ANDMatcher(); }; -class ORMatcher : public Matcher { +class APT_PUBLIC ORMatcher : public Matcher { std::vector matchers; public: // 5 ought to be enough for everybody… c++11 variadic templates would be nice @@ -92,7 +94,7 @@ public: virtual ~ORMatcher(); }; /*}}}*/ -class PackageNameMatchesRegEx : public PackageMatcher { /*{{{*/ +class APT_PUBLIC PackageNameMatchesRegEx : public PackageMatcher { /*{{{*/ regex_t* pattern; public: explicit PackageNameMatchesRegEx(std::string const &Pattern); @@ -101,7 +103,7 @@ public: virtual ~PackageNameMatchesRegEx(); }; /*}}}*/ -class PackageNameMatchesFnmatch : public PackageMatcher { /*{{{*/ +class APT_PUBLIC PackageNameMatchesFnmatch : public PackageMatcher { /*{{{*/ const std::string Pattern; public: explicit PackageNameMatchesFnmatch(std::string const &Pattern); @@ -110,7 +112,7 @@ public: virtual ~PackageNameMatchesFnmatch() {}; }; /*}}}*/ -class PackageArchitectureMatchesSpecification : public PackageMatcher { /*{{{*/ +class APT_PUBLIC PackageArchitectureMatchesSpecification : public PackageMatcher { /*{{{*/ /** \class PackageArchitectureMatchesSpecification \brief matching against architecture specification strings @@ -136,7 +138,7 @@ public: virtual ~PackageArchitectureMatchesSpecification(); }; /*}}}*/ -class PackageIsNewInstall : public PackageMatcher { /*{{{*/ +class APT_PUBLIC PackageIsNewInstall : public PackageMatcher { /*{{{*/ pkgCacheFile * const Cache; public: explicit PackageIsNewInstall(pkgCacheFile * const Cache); @@ -145,6 +147,8 @@ public: }; /*}}}*/ +/// \brief Parse a pattern, return nullptr or pattern +APT_PUBLIC std::unique_ptr ParsePattern(APT::StringView pattern, pkgCacheFile *file); } } #endif diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h index 2085306..1b049b6 100644 --- a/apt-pkg/cacheiterators.h +++ b/apt-pkg/cacheiterators.h @@ -37,16 +37,14 @@ #include #include #include -#ifdef APT_PKG_EXPOSE_STRING_VIEW #include -#endif #include // abstract Iterator template /*{{{*/ /* This template provides the very basic iterator methods we need to have for doing some walk-over-the-cache magic */ -template class pkgCache::Iterator : +template class APT_PUBLIC pkgCache::Iterator : public std::iterator { /** \brief Returns the Pointer for this struct in the owner * The implementation of this method should be pretty short @@ -82,6 +80,7 @@ template class pkgCache::Iterator : // Mixed stuff inline bool IsGood() const { return S && Owner && ! end();} inline unsigned long Index() const {return S - OwnerPointer();} + inline map_pointer MapPointer() const {return map_pointer(Index()) ;} void ReMap(void const * const oldMap, void const * const newMap) { if (Owner == 0 || S == 0) @@ -99,7 +98,7 @@ template class pkgCache::Iterator : interest in package names can iterate easily over the names, so the different architectures can be treated as of the "same" package (apt internally treat them as totally different packages) */ -class pkgCache::GrpIterator: public Iterator { +class APT_PUBLIC pkgCache::GrpIterator: public Iterator { long HashIndex; public: @@ -118,11 +117,8 @@ class pkgCache::GrpIterator: public Iterator { inline const char *Name() const {return S->Name == 0?0:Owner->StrP + S->Name;} inline PkgIterator PackageList() const; - PkgIterator FindPkg(std::string Arch = "any") const; -#ifdef APT_PKG_EXPOSE_STRING_VIEW - APT_HIDDEN PkgIterator FindPkg(APT::StringView Arch = APT::StringView("any", 3)) const; - APT_HIDDEN PkgIterator FindPkg(const char *Arch) const; -#endif + inline VerIterator VersionsInSource() const; + PkgIterator FindPkg(APT::StringView Arch = APT::StringView("any", 3)) const; /** \brief find the package with the "best" architecture The best architecture is either the "native" or the first @@ -143,7 +139,7 @@ class pkgCache::GrpIterator: public Iterator { }; /*}}}*/ // Package Iterator /*{{{*/ -class pkgCache::PkgIterator: public Iterator { +class APT_PUBLIC pkgCache::PkgIterator: public Iterator { long HashIndex; public: @@ -164,9 +160,6 @@ class pkgCache::PkgIterator: public Iterator { // Accessors inline const char *Name() const { return Group().Name(); } - // Versions have sections - and packages can have different versions with different sections - // so this interface is broken by design. Run as fast as you can to Version.Section(). - APT_DEPRECATED_MSG("Use the .Section method of VerIterator instead") inline const char *Section() const; inline bool Purge() const {return S->CurrentState == pkgCache::State::Purge || (S->CurrentVer == 0 && S->CurrentState == pkgCache::State::NotInstalled);} inline const char *Arch() const {return S->Arch == 0?0:Owner->StrP + S->Arch;} @@ -177,7 +170,6 @@ class pkgCache::PkgIterator: public Iterator { inline DepIterator RevDependsList() const APT_PURE; inline PrvIterator ProvidesList() const APT_PURE; OkState State() const APT_PURE; - APT_DEPRECATED_MSG("This method does not respect apt_preferences! Use pkgDepCache::GetCandidateVersion(Pkg)") const char *CandVersion() const APT_PURE; const char *CurVersion() const APT_PURE; //Nice printable representation @@ -193,7 +185,7 @@ class pkgCache::PkgIterator: public Iterator { }; /*}}}*/ // Version Iterator /*{{{*/ -class pkgCache::VerIterator : public Iterator { +class APT_PUBLIC pkgCache::VerIterator : public Iterator { public: inline Version* OwnerPointer() const { return (Owner != 0) ? Owner->VerP : 0; @@ -203,6 +195,13 @@ class pkgCache::VerIterator : public Iterator { inline VerIterator& operator++() {if (S != Owner->VerP) S = Owner->VerP + S->NextVer; return *this;} inline VerIterator operator++(int) { VerIterator const tmp(*this); operator++(); return tmp; } + inline VerIterator NextInSource() + { + if (S != Owner->VerP) + S = Owner->VerP + S->NextInSource; + return *this; + } + // Comparison int CompareVer(const VerIterator &B) const; /** \brief compares two version and returns if they are similar @@ -230,6 +229,7 @@ class pkgCache::VerIterator : public Iterator { inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + S->ParentPkg);} inline DescIterator DescriptionList() const; + DescIterator TranslatedDescriptionForLanguage(APT::StringView lang) const; DescIterator TranslatedDescription() const; inline DepIterator DependsList() const; inline PrvIterator ProvidesList() const; @@ -250,7 +250,7 @@ class pkgCache::VerIterator : public Iterator { }; /*}}}*/ // Description Iterator /*{{{*/ -class pkgCache::DescIterator : public Iterator { +class APT_PUBLIC pkgCache::DescIterator : public Iterator { public: inline Description* OwnerPointer() const { return (Owner != 0) ? Owner->DescP : 0; @@ -276,7 +276,7 @@ class pkgCache::DescIterator : public Iterator { }; /*}}}*/ // Dependency iterator /*{{{*/ -class pkgCache::DepIterator : public Iterator { +class APT_PUBLIC pkgCache::DepIterator : public Iterator { enum {DepVer, DepRev} Type; DependencyData * S2; @@ -294,7 +294,7 @@ class pkgCache::DepIterator : public Iterator { inline PkgIterator TargetPkg() const {return PkgIterator(*Owner,Owner->PkgP + S2->Package);} inline PkgIterator SmartTargetPkg() const {PkgIterator R(*Owner,0);SmartTargetPkg(R);return R;} inline VerIterator ParentVer() const {return VerIterator(*Owner,Owner->VerP + S->ParentVer);} - inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[S->ParentVer].ParentPkg);} + inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[uint32_t(S->ParentVer)].ParentPkg);} inline bool Reverse() const {return Type == DepRev;} bool IsCritical() const APT_PURE; bool IsNegative() const APT_PURE; @@ -322,15 +322,15 @@ class pkgCache::DepIterator : public Iterator { struct DependencyProxy { map_stringitem_t &Version; - map_pointer_t &Package; + map_pointer &Package; map_id_t &ID; unsigned char &Type; unsigned char &CompareOp; - map_pointer_t &ParentVer; - map_pointer_t &DependencyData; - map_pointer_t &NextRevDepends; - map_pointer_t &NextDepends; - map_pointer_t &NextData; + map_pointer &ParentVer; + map_pointer &DependencyData; + map_pointer &NextRevDepends; + map_pointer &NextDepends; + map_pointer &NextData; DependencyProxy const * operator->() const { return this; } DependencyProxy * operator->() { return this; } }; @@ -361,7 +361,7 @@ class pkgCache::DepIterator : public Iterator { }; /*}}}*/ // Provides iterator /*{{{*/ -class pkgCache::PrvIterator : public Iterator { +class APT_PUBLIC pkgCache::PrvIterator : public Iterator { enum {PrvVer, PrvPkg} Type; public: @@ -379,7 +379,7 @@ class pkgCache::PrvIterator : public Iterator { inline const char *ProvideVersion() const {return S->ProvideVersion == 0?0:Owner->StrP + S->ProvideVersion;} inline PkgIterator ParentPkg() const {return PkgIterator(*Owner,Owner->PkgP + S->ParentPkg);} inline VerIterator OwnerVer() const {return VerIterator(*Owner,Owner->VerP + S->Version);} - inline PkgIterator OwnerPkg() const {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[S->Version].ParentPkg);} + inline PkgIterator OwnerPkg() const {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[uint32_t(S->Version)].ParentPkg);} /* MultiArch can be translated to SingleArch for an resolver and we did so, by adding provides to help the resolver understand the problem, but @@ -402,7 +402,7 @@ class pkgCache::PrvIterator : public Iterator { }; /*}}}*/ // Release file /*{{{*/ -class pkgCache::RlsFileIterator : public Iterator { +class APT_PUBLIC pkgCache::RlsFileIterator : public Iterator { public: inline ReleaseFile* OwnerPointer() const { return (Owner != 0) ? Owner->RlsFileP : 0; @@ -422,8 +422,6 @@ class pkgCache::RlsFileIterator : public Iterator inline const char *Site() const {return S->Site == 0?0:Owner->StrP + S->Site;} inline bool Flagged(pkgCache::Flag::ReleaseFileFlags const flag) const {return (S->Flags & flag) == flag; } - APT_DEPRECATED_MSG("Can be remove without replacement; it is a no-op") - bool IsOk(); std::string RelStr(); // Constructors @@ -433,7 +431,7 @@ class pkgCache::RlsFileIterator : public Iterator }; /*}}}*/ // Package file /*{{{*/ -class pkgCache::PkgFileIterator : public Iterator { +class APT_PUBLIC pkgCache::PkgFileIterator : public Iterator { public: inline PackageFile* OwnerPointer() const { return (Owner != 0) ? Owner->PkgFileP : 0; @@ -458,8 +456,6 @@ class pkgCache::PkgFileIterator : public Iterator inline const char *Architecture() const {return S->Architecture == 0?0:Owner->StrP + S->Architecture;} inline const char *IndexType() const {return S->IndexType == 0?0:Owner->StrP + S->IndexType;} - APT_DEPRECATED_MSG("Can be remove without replacement; it is a no-op") - bool IsOk(); std::string RelStr(); // Constructors @@ -469,7 +465,7 @@ class pkgCache::PkgFileIterator : public Iterator }; /*}}}*/ // Version File /*{{{*/ -class pkgCache::VerFileIterator : public pkgCache::Iterator { +class APT_PUBLIC pkgCache::VerFileIterator : public pkgCache::Iterator { public: inline VerFile* OwnerPointer() const { return (Owner != 0) ? Owner->VerFileP : 0; @@ -480,14 +476,14 @@ class pkgCache::VerFileIterator : public pkgCache::IteratorFile + Owner->PkgFileP);} + inline PkgFileIterator File() const {return PkgFileIterator(*Owner, Owner->PkgFileP + S->File);} inline VerFileIterator() : Iterator() {} inline VerFileIterator(pkgCache &Owner,VerFile *Trg) : Iterator(Owner, Trg) {} }; /*}}}*/ // Description File /*{{{*/ -class pkgCache::DescFileIterator : public Iterator { +class APT_PUBLIC pkgCache::DescFileIterator : public Iterator { public: inline DescFile* OwnerPointer() const { return (Owner != 0) ? Owner->DescFileP : 0; @@ -498,7 +494,7 @@ class pkgCache::DescFileIterator : public Iterator { inline DescFileIterator operator++(int) { DescFileIterator const tmp(*this); operator++(); return tmp; } // Accessors - inline PkgFileIterator File() const {return PkgFileIterator(*Owner,S->File + Owner->PkgFileP);} + inline PkgFileIterator File() const {return PkgFileIterator(*Owner, Owner->PkgFileP + S->File);} inline DescFileIterator() : Iterator() {} inline DescFileIterator(pkgCache &Owner,DescFile *Trg) : Iterator(Owner, Trg) {} @@ -507,6 +503,10 @@ class pkgCache::DescFileIterator : public Iterator { // Inlined Begin functions can't be in the class because of order problems /*{{{*/ inline pkgCache::PkgIterator pkgCache::GrpIterator::PackageList() const {return PkgIterator(*Owner,Owner->PkgP + S->FirstPackage);} + inline pkgCache::VerIterator pkgCache::GrpIterator::VersionsInSource() const + { + return VerIterator(*Owner, Owner->VerP + S->VersionsInSource); + } inline pkgCache::VerIterator pkgCache::PkgIterator::VersionList() const {return VerIterator(*Owner,Owner->VerP + S->VersionList);} inline pkgCache::VerIterator pkgCache::PkgIterator::CurrentVer() const @@ -525,7 +525,5 @@ inline pkgCache::VerFileIterator pkgCache::VerIterator::FileList() const {return VerFileIterator(*Owner,Owner->VerFileP + S->FileList);} inline pkgCache::DescFileIterator pkgCache::DescIterator::FileList() const {return DescFileIterator(*Owner,Owner->DescFileP + S->FileList);} -APT_DEPRECATED_MSG("Use the .Section method of VerIterator instead") inline const char * pkgCache::PkgIterator::Section() const - {return S->VersionList == 0 ? 0 : VersionList().Section();} /*}}}*/ #endif diff --git a/apt-pkg/cacheset.cc b/apt-pkg/cacheset.cc index 670cdba..288180f 100644 --- a/apt-pkg/cacheset.cc +++ b/apt-pkg/cacheset.cc @@ -46,6 +46,7 @@ bool CacheSetHelper::PackageFrom(enum PkgSelector const select, PackageContainer case FNMATCH: return PackageFromFnmatch(pci, Cache, pattern); case PACKAGENAME: return PackageFromPackageName(pci, Cache, pattern); case STRING: return PackageFromString(pci, Cache, pattern); + case PATTERN: return PackageFromPattern(pci, Cache, pattern); } return false; } @@ -124,8 +125,16 @@ bool CacheSetHelper::PackageFromTask(PackageContainerInterface * const pci, pkgC // PackageFromRegEx - Return all packages in the cache matching a pattern /*{{{*/ bool CacheSetHelper::PackageFromRegEx(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern) { static const char * const isregex = ".?+*|[^$"; - if (pattern.find_first_of(isregex) == std::string::npos) - return false; + + if (_config->FindB("APT::Cmd::Pattern-Only", false)) + { + // Only allow explicit regexp pattern. + if (pattern.size() == 0 || (pattern[0] != '^' && pattern[pattern.size() - 1] != '$')) + return false; + } else { + if (pattern.find_first_of(isregex) == std::string::npos) + return false; + } bool const wasEmpty = pci->empty(); if (wasEmpty == true) @@ -180,6 +189,8 @@ bool CacheSetHelper::PackageFromFnmatch(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern) { static const char * const isfnmatch = ".?*[]!"; + if (_config->FindB("APT::Cmd::Pattern-Only", false)) + return false; if (pattern.find_first_of(isfnmatch) == std::string::npos) return false; @@ -231,33 +242,6 @@ bool CacheSetHelper::PackageFromFnmatch(PackageContainerInterface * const pci, return true; } /*}}}*/ -// PackageFromName - Returns the package defined by this string /*{{{*/ -pkgCache::PkgIterator CacheSetHelper::PackageFromName(pkgCacheFile &Cache, - std::string const &str) { - std::string pkg = str; - size_t archfound = pkg.find_last_of(':'); - std::string arch; - if (archfound != std::string::npos) { - arch = pkg.substr(archfound+1); - pkg.erase(archfound); - } - - if (Cache.GetPkgCache() == 0) - return pkgCache::PkgIterator(Cache, 0); - - pkgCache::PkgIterator Pkg(Cache, 0); - if (arch.empty() == true) { - pkgCache::GrpIterator Grp = Cache.GetPkgCache()->FindGrp(pkg); - if (Grp.end() == false) - Pkg = Grp.FindPreferredPkg(); - } else - Pkg = Cache.GetPkgCache()->FindPkg(pkg, arch); - - if (Pkg.end() == true) - return canNotFindPkgName(Cache, str); - return Pkg; -} - /*}}}*/ // PackageFromPackageName - Returns the package defined by this string /*{{{*/ bool CacheSetHelper::PackageFromPackageName(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pkg) { @@ -308,13 +292,33 @@ bool CacheSetHelper::PackageFromPackageName(PackageContainerInterface * const pc pci->insert(Pkg); return true; } + +bool CacheSetHelper::PackageFromPattern(PackageContainerInterface *const pci, pkgCacheFile &Cache, std::string const &pattern) +{ + if (pattern.size() < 1 || (pattern[0] != '?' && pattern[0] != '~')) + return false; + + auto compiledPattern = APT::CacheFilter::ParsePattern(pattern, &Cache); + if (!compiledPattern) + return false; + + for (pkgCache::PkgIterator Pkg = Cache->PkgBegin(); Pkg.end() == false; ++Pkg) + { + if ((*compiledPattern)(Pkg) == false) + continue; + + pci->insert(Pkg); + } + return true; +} /*}}}*/ // PackageFromString - Return all packages matching a specific string /*{{{*/ bool CacheSetHelper::PackageFromString(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &str) { bool found = true; _error->PushToStack(); - if (PackageFrom(CacheSetHelper::PACKAGENAME, pci, Cache, str) == false && + if (PackageFrom(CacheSetHelper::PATTERN, pci, Cache, str) == false && + PackageFrom(CacheSetHelper::PACKAGENAME, pci, Cache, str) == false && PackageFrom(CacheSetHelper::TASK, pci, Cache, str) == false && // FIXME: hm, hm, regexp/fnmatch incompatible? PackageFrom(CacheSetHelper::FNMATCH, pci, Cache, str) == false && @@ -708,14 +712,13 @@ void CacheSetHelper::canNotFindPackage(enum PkgSelector const select, PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &pattern) { switch (select) { -APT_IGNORE_DEPRECATED_PUSH case REGEX: canNotFindRegEx(pci, Cache, pattern); break; case TASK: canNotFindTask(pci, Cache, pattern); break; case FNMATCH: canNotFindFnmatch(pci, Cache, pattern); break; case PACKAGENAME: canNotFindPackage(pci, Cache, pattern); break; case STRING: canNotFindPackage(pci, Cache, pattern); break; + case PATTERN: canNotFindPackage(pci, Cache, pattern); break; case UNKNOWN: break; -APT_IGNORE_DEPRECATED_POP } } // canNotFindTask - handle the case no package is found for a task /*{{{*/ @@ -753,14 +756,12 @@ pkgCache::PkgIterator CacheSetHelper::canNotFindPkgName(pkgCacheFile &Cache, void CacheSetHelper::canNotFindVersion(enum VerSelector const select, VersionContainerInterface * const vci, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) { switch (select) { -APT_IGNORE_DEPRECATED_PUSH case ALL: canNotFindAllVer(vci, Cache, Pkg); break; case INSTCAND: canNotFindInstCandVer(vci, Cache, Pkg); break; case CANDINST: canNotFindCandInstVer(vci, Cache, Pkg); break; case NEWEST: canNotFindNewestVer(Cache, Pkg); break; case CANDIDATE: canNotFindCandidateVer(Cache, Pkg); break; case INSTALLED: canNotFindInstalledVer(Cache, Pkg); break; -APT_IGNORE_DEPRECATED_POP case CANDANDINST: canNotGetCandInstVer(Cache, Pkg); break; case RELEASE: case VERSIONNUMBER: @@ -791,11 +792,9 @@ void CacheSetHelper::canNotFindCandInstVer(VersionContainerInterface * const /*v // canNotGetVersion - for package by selector /*{{{*/ pkgCache::VerIterator CacheSetHelper::canNotGetVersion(enum VerSelector const select, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) { switch (select) { -APT_IGNORE_DEPRECATED_PUSH case NEWEST: return canNotFindNewestVer(Cache, Pkg); case CANDIDATE: return canNotFindCandidateVer(Cache, Pkg); case INSTALLED: return canNotFindInstalledVer(Cache, Pkg); -APT_IGNORE_DEPRECATED_POP case CANDINST: return canNotGetCandInstVer(Cache, Pkg); case INSTCAND: return canNotGetInstCandVer(Cache, Pkg); case ALL: @@ -852,11 +851,10 @@ pkgCache::VerIterator CacheSetHelper::canNotGetCandInstVer(pkgCacheFile &Cache, void CacheSetHelper::showPackageSelection(pkgCache::PkgIterator const &pkg, enum PkgSelector const select, std::string const &pattern) { switch (select) { -APT_IGNORE_DEPRECATED_PUSH case REGEX: showRegExSelection(pkg, pattern); break; case TASK: showTaskSelection(pkg, pattern); break; case FNMATCH: showFnmatchSelection(pkg, pattern); break; -APT_IGNORE_DEPRECATED_POP + case PATTERN: showPatternSelection(pkg, pattern); break; case PACKAGENAME: /* no surprises here */ break; case STRING: /* handled by the special cases */ break; case UNKNOWN: break; @@ -875,6 +873,12 @@ void CacheSetHelper::showRegExSelection(pkgCache::PkgIterator const &/*pkg*/, // showFnmatchSelection /*{{{*/ void CacheSetHelper::showFnmatchSelection(pkgCache::PkgIterator const &/*pkg*/, std::string const &/*pattern*/) { +} + /*}}}*/ +// showPatternSelection /*{{{*/ +void CacheSetHelper::showPatternSelection(pkgCache::PkgIterator const & /*pkg*/, + std::string const & /*pattern*/) +{ } /*}}}*/ /*}}}*/ @@ -882,14 +886,12 @@ void CacheSetHelper::showFnmatchSelection(pkgCache::PkgIterator const &/*pkg*/, void CacheSetHelper::showVersionSelection(pkgCache::PkgIterator const &Pkg, pkgCache::VerIterator const &Ver, enum VerSelector const select, std::string const &pattern) { switch (select) { -APT_IGNORE_DEPRECATED_PUSH case RELEASE: showSelectedVersion(Pkg, Ver, pattern, true); break; case VERSIONNUMBER: showSelectedVersion(Pkg, Ver, pattern, false); break; -APT_IGNORE_DEPRECATED_POP case NEWEST: case CANDIDATE: case INSTALLED: @@ -913,6 +915,7 @@ CacheSetHelper::CacheSetHelper(bool const ShowError, GlobalError::MsgType ErrorT CacheSetHelper::~CacheSetHelper() {} PackageContainerInterface::PackageContainerInterface() : ConstructedBy(CacheSetHelper::UNKNOWN), d(NULL) {} +PackageContainerInterface::PackageContainerInterface(PackageContainerInterface const &by) : PackageContainerInterface() { *this = by; } PackageContainerInterface::PackageContainerInterface(CacheSetHelper::PkgSelector const by) : ConstructedBy(by), d(NULL) {} PackageContainerInterface& PackageContainerInterface::operator=(PackageContainerInterface const &other) { if (this != &other) @@ -926,6 +929,9 @@ PackageUniverse::PackageUniverse(pkgCacheFile * const Owner) : _cont(Owner->GetP PackageUniverse::~PackageUniverse() {} VersionContainerInterface::VersionContainerInterface() : d(NULL) {} +VersionContainerInterface::VersionContainerInterface(VersionContainerInterface const &other) : VersionContainerInterface() { + *this = other; +}; VersionContainerInterface& VersionContainerInterface::operator=(VersionContainerInterface const &) { return *this; } diff --git a/apt-pkg/cacheset.h b/apt-pkg/cacheset.h index b00fc73..eb9e3e5 100644 --- a/apt-pkg/cacheset.h +++ b/apt-pkg/cacheset.h @@ -30,12 +30,6 @@ #include #include -#ifndef APT_8_CLEANER_HEADERS -#include -#endif -#ifndef APT_10_CLEANER_HEADERS -#include -#endif /*}}}*/ class pkgCacheFile; @@ -44,7 +38,7 @@ namespace APT { class PackageContainerInterface; class VersionContainerInterface; -class CacheSetHelper { /*{{{*/ +class APT_PUBLIC CacheSetHelper { /*{{{*/ /** \class APT::CacheSetHelper Simple base class with a lot of virtual methods which can be overridden to alter the behavior or the output of the CacheSets. @@ -58,7 +52,7 @@ public: /*{{{*/ GlobalError::MsgType ErrorType = GlobalError::ERROR); virtual ~CacheSetHelper(); - enum PkgSelector { UNKNOWN, REGEX, TASK, FNMATCH, PACKAGENAME, STRING }; + enum PkgSelector { UNKNOWN, REGEX, TASK, FNMATCH, PACKAGENAME, STRING, PATTERN }; virtual bool PackageFrom(enum PkgSelector const select, PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &pattern); @@ -75,7 +69,6 @@ public: /*{{{*/ pkgCacheFile &Cache, const char * cmdline, std::list const &mods); - APT_DEPRECATED_MSG("use .PackageFrom(PACKAGENAME, …) instead") pkgCache::PkgIterator PackageFromName(pkgCacheFile &Cache, std::string const &pattern); /** \brief be notified about the package being selected via pattern * @@ -86,11 +79,6 @@ public: /*{{{*/ * \param pattern is the string used by the selection method to pick the package */ virtual void showPackageSelection(pkgCache::PkgIterator const &pkg, PkgSelector const select, std::string const &pattern); - // use the method above instead, react only on the type you need and let the base handle the rest if need be - // this allows us to add new selection methods without breaking the ABI constantly with new virtual methods - APT_DEPRECATED_MSG("override .showPackageSelection and select with switch") virtual void showTaskSelection(pkgCache::PkgIterator const &pkg, std::string const &pattern); - APT_DEPRECATED_MSG("override .showPackageSelection and select with switch") virtual void showRegExSelection(pkgCache::PkgIterator const &pkg, std::string const &pattern); - APT_DEPRECATED_MSG("override .showPackageSelection and select with switch") virtual void showFnmatchSelection(pkgCache::PkgIterator const &pkg, std::string const &pattern); /** \brief be notified if a package can't be found via pattern * @@ -102,11 +90,6 @@ public: /*{{{*/ * \param pattern is the string not matching anything */ virtual void canNotFindPackage(enum PkgSelector const select, PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &pattern); - // same as above for showPackageSelection - APT_DEPRECATED_MSG("override .canNotFindPackage and select with switch") virtual void canNotFindTask(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern); - APT_DEPRECATED_MSG("override .canNotFindPackage and select with switch") virtual void canNotFindRegEx(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern); - APT_DEPRECATED_MSG("override .canNotFindPackage and select with switch") virtual void canNotFindFnmatch(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern); - APT_DEPRECATED_MSG("override .canNotFindPackage and select with switch") virtual void canNotFindPackage(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &str); /** \brief specifies which version(s) we want to refer to */ enum VerSelector { @@ -143,8 +126,6 @@ public: /*{{{*/ */ virtual void showVersionSelection(pkgCache::PkgIterator const &Pkg, pkgCache::VerIterator const &Ver, enum VerSelector const select, std::string const &pattern); - APT_DEPRECATED_MSG("use .showVersionSelection instead, similar to .showPackageSelection") virtual void showSelectedVersion(pkgCache::PkgIterator const &Pkg, pkgCache::VerIterator const Ver, - std::string const &ver, bool const verIsRel); /** \brief be notified if a version can't be found for a package * @@ -156,22 +137,10 @@ public: /*{{{*/ * \param Pkg is the package we wanted a version from */ virtual void canNotFindVersion(enum VerSelector const select, VersionContainerInterface * const vci, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg); - APT_DEPRECATED_MSG("override .canNotFindVersion and select via switch") virtual void canNotFindAllVer(VersionContainerInterface * const vci, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg); - APT_DEPRECATED_MSG("override .canNotFindVersion and select via switch") virtual void canNotFindInstCandVer(VersionContainerInterface * const vci, pkgCacheFile &Cache, - pkgCache::PkgIterator const &Pkg); - APT_DEPRECATED_MSG("override .canNotFindVersion and select via switch") virtual void canNotFindCandInstVer(VersionContainerInterface * const vci, - pkgCacheFile &Cache, - pkgCache::PkgIterator const &Pkg); // the difference between canNotFind and canNotGet is that the later is more low-level // and called from other places: In this case looking into the code is the only real answer… virtual pkgCache::VerIterator canNotGetVersion(enum VerSelector const select, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg); - APT_DEPRECATED_MSG("override .canNotGetVersion and select via switch") virtual pkgCache::VerIterator canNotFindNewestVer(pkgCacheFile &Cache, - pkgCache::PkgIterator const &Pkg); - APT_DEPRECATED_MSG("override .canNotGetVersion and select via switch") virtual pkgCache::VerIterator canNotFindCandidateVer(pkgCacheFile &Cache, - pkgCache::PkgIterator const &Pkg); - APT_DEPRECATED_MSG("override .canNotGetVersion and select via switch") virtual pkgCache::VerIterator canNotFindInstalledVer(pkgCacheFile &Cache, - pkgCache::PkgIterator const &Pkg); virtual pkgCache::PkgIterator canNotFindPkgName(pkgCacheFile &Cache, std::string const &str); @@ -203,7 +172,25 @@ protected: bool PackageFromFnmatch(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern); bool PackageFromPackageName(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern); bool PackageFromString(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &pattern); + bool PackageFromPattern(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &pattern); private: + void showTaskSelection(pkgCache::PkgIterator const &pkg, std::string const &pattern); + void showRegExSelection(pkgCache::PkgIterator const &pkg, std::string const &pattern); + void showFnmatchSelection(pkgCache::PkgIterator const &pkg, std::string const &pattern); + void showPatternSelection(pkgCache::PkgIterator const &pkg, std::string const &pattern); + void canNotFindTask(PackageContainerInterface *const pci, pkgCacheFile &Cache, std::string pattern); + void canNotFindRegEx(PackageContainerInterface *const pci, pkgCacheFile &Cache, std::string pattern); + void canNotFindFnmatch(PackageContainerInterface *const pci, pkgCacheFile &Cache, std::string pattern); + void canNotFindPackage(PackageContainerInterface *const pci, pkgCacheFile &Cache, std::string const &str); + void showSelectedVersion(pkgCache::PkgIterator const &Pkg, pkgCache::VerIterator const Ver, + std::string const &ver, bool const verIsRel); + void canNotFindAllVer(VersionContainerInterface * const vci, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg); + void canNotFindInstCandVer(VersionContainerInterface * const vci, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg); + void canNotFindCandInstVer(VersionContainerInterface * const vci, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg); + pkgCache::VerIterator canNotFindNewestVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg); + pkgCache::VerIterator canNotFindCandidateVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg); + pkgCache::VerIterator canNotFindInstalledVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg); + void * const d; }; /*}}}*/ // Iterator templates for our Containers /*{{{*/ @@ -214,7 +201,7 @@ template(this)->getType(); }; operator container_iterator(void) const { return _iter; } inline iterator_type& operator++() { ++_iter; return static_cast(*this); } @@ -254,12 +241,10 @@ template class Container_iterato typedef Container_iterator iterator_type; typedef typename Container::iterator container_iterator; public: - explicit Container_iterator(container_iterator i) : + explicit Container_iterator(container_iterator const &i) : Container_iterator_base(i) {} operator typename Master::const_iterator() { return typename Master::const_iterator(this->_iter); } - inline iterator_type& operator=(iterator_type const &i) { this->_iter = i._iter; return static_cast(*this); } - inline iterator_type& operator=(container_iterator const &i) { this->_iter = i; return static_cast(*this); } inline typename Container::iterator::reference operator*(void) const { return *this->_iter; } inline typename Container::value_type getType(void) const { return *this->_iter; } @@ -292,7 +277,7 @@ public: inline typename Container::value_type getType(void) const { return *this->_iter; } }; /*}}}*/ -class PackageContainerInterface { /*{{{*/ +class APT_PUBLIC PackageContainerInterface { /*{{{*/ /** \class PackageContainerInterface * Interface ensuring that all operations can be executed on the yet to @@ -311,11 +296,6 @@ public: inline const char *Name() const {return getType().Name(); } inline std::string FullName(bool const Pretty) const { return getType().FullName(Pretty); } inline std::string FullName() const { return getType().FullName(); } - APT_DEPRECATED_MSG("Use the .Section method of VerIterator instead") inline const char *Section() const { - APT_IGNORE_DEPRECATED_PUSH - return getType().Section(); - APT_IGNORE_DEPRECATED_POP - } inline bool Purge() const {return getType().Purge(); } inline const char *Arch() const {return getType().Arch(); } inline pkgCache::GrpIterator Group() const { return getType().Group(); } @@ -324,7 +304,6 @@ public: inline pkgCache::DepIterator RevDependsList() const { return getType().RevDependsList(); } inline pkgCache::PrvIterator ProvidesList() const { return getType().ProvidesList(); } inline pkgCache::PkgIterator::OkState State() const { return getType().State(); } - APT_DEPRECATED_MSG("This method does not respect apt_preferences! Use pkgDepCache::GetCandidateVersion(Pkg)") inline const char *CandVersion() const { return getType().CandVersion(); } inline const char *CurVersion() const { return getType().CurVersion(); } inline pkgCache *Cache() const { return getType().Cache(); } inline unsigned long Index() const {return getType().Index();} @@ -340,51 +319,20 @@ public: virtual void clear() = 0; virtual size_t size() const = 0; - enum APT_DEPRECATED_MSG("Use CacheSetHelper::PkgSelector instead") Constructor { UNKNOWN = CacheSetHelper::UNKNOWN, - REGEX = CacheSetHelper::REGEX, - TASK = CacheSetHelper::TASK, - FNMATCH = CacheSetHelper::FNMATCH }; -APT_IGNORE_DEPRECATED_PUSH - void setConstructor(Constructor const by) { ConstructedBy = (CacheSetHelper::PkgSelector)by; } -APT_IGNORE_DEPRECATED_POP - void setConstructor(CacheSetHelper::PkgSelector const by) { ConstructedBy = by; } CacheSetHelper::PkgSelector getConstructor() const { return ConstructedBy; } PackageContainerInterface(); explicit PackageContainerInterface(CacheSetHelper::PkgSelector const by); + PackageContainerInterface(PackageContainerInterface const &by); PackageContainerInterface& operator=(PackageContainerInterface const &other); virtual ~PackageContainerInterface(); - APT_DEPRECATED_MSG("Use helper.PackageFrom(CacheSetHelper::TASK, …) instead") static bool FromTask(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper) { - return helper.PackageFrom(CacheSetHelper::TASK, pci, Cache, pattern); } - APT_DEPRECATED_MSG("Use helper.PackageFrom(CacheSetHelper::REGEX, …) instead") static bool FromRegEx(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper) { - return helper.PackageFrom(CacheSetHelper::REGEX, pci, Cache, pattern); } - APT_DEPRECATED_MSG("Use helper.PackageFrom(CacheSetHelper::FNMATCH, …) instead") static bool FromFnmatch(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper) { - return helper.PackageFrom(CacheSetHelper::FNMATCH, pci, Cache, pattern); } - APT_DEPRECATED_MSG("Use helper.PackageFrom(CacheSetHelper::PACKAGENAME, …) instead") static bool FromGroup(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string pattern, CacheSetHelper &helper) { - return helper.PackageFrom(CacheSetHelper::PACKAGENAME, pci, Cache, pattern); } - APT_DEPRECATED_MSG("Use helper.PackageFrom(CacheSetHelper::STRING, …) instead") static bool FromString(PackageContainerInterface * const pci, pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper) { - return helper.PackageFrom(CacheSetHelper::STRING, pci, Cache, pattern); } - APT_DEPRECATED_MSG("Use helper.PackageFromCommandLine instead") static bool FromCommandLine(PackageContainerInterface * const pci, pkgCacheFile &Cache, const char **cmdline, CacheSetHelper &helper) { - return helper.PackageFromCommandLine(pci, Cache, cmdline); } - - APT_DEPRECATED_MSG("enum moved to CacheSetHelper::PkgModifier") typedef CacheSetHelper::PkgModifier Modifier; - -APT_IGNORE_DEPRECATED_PUSH - APT_DEPRECATED_MSG("Use helper.PackageFromName instead") static pkgCache::PkgIterator FromName(pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper) { - return helper.PackageFromName(Cache, pattern); } - APT_DEPRECATED_MSG("Use helper.PackageFromModifierCommandLine instead") static bool FromModifierCommandLine(unsigned short &modID, PackageContainerInterface * const pci, - pkgCacheFile &Cache, const char * cmdline, - std::list const &mods, CacheSetHelper &helper) { - return helper.PackageFromModifierCommandLine(modID, pci, Cache, cmdline, mods); } -APT_IGNORE_DEPRECATED_POP - private: CacheSetHelper::PkgSelector ConstructedBy; void * const d; }; /*}}}*/ -template class PackageContainer : public PackageContainerInterface {/*{{{*/ +template class APT_PUBLIC PackageContainer : public PackageContainerInterface {/*{{{*/ /** \class APT::PackageContainer Simple wrapper around a container class like std::set to provide a similar @@ -438,9 +386,6 @@ public: /*{{{*/ PackageContainer() : PackageContainerInterface(CacheSetHelper::UNKNOWN) {} explicit PackageContainer(CacheSetHelper::PkgSelector const &by) : PackageContainerInterface(by) {} -APT_IGNORE_DEPRECATED_PUSH - APT_DEPRECATED_MSG("Construct with a CacheSetHelper::PkgSelector instead") explicit PackageContainer(Constructor const &by) : PackageContainerInterface((CacheSetHelper::PkgSelector)by) {} -APT_IGNORE_DEPRECATED_POP template PackageContainer(Itr first, Itr last) : PackageContainerInterface(CacheSetHelper::UNKNOWN), _cont(first, last) {} #if __cplusplus >= 201103L PackageContainer(std::initializer_list list) : PackageContainerInterface(CacheSetHelper::UNKNOWN), _cont(list) {} @@ -508,21 +453,6 @@ APT_IGNORE_DEPRECATED_POP return FromFnmatch(Cache, pattern, helper); } -APT_IGNORE_DEPRECATED_PUSH - /** \brief returns a package specified by a string - - \param Cache the package is in - \param pattern String the package name should be extracted from - \param helper responsible for error and message handling */ - APT_DEPRECATED_MSG("Use helper.PackageFromName instead") static pkgCache::PkgIterator FromName(pkgCacheFile &Cache, std::string const &pattern, CacheSetHelper &helper) { - return helper.PackageFromName(Cache, pattern); - } - APT_DEPRECATED_MSG("Use helper.PackageFromName instead") static pkgCache::PkgIterator FromName(pkgCacheFile &Cache, std::string const &pattern) { - CacheSetHelper helper; - return FromName(Cache, pattern, helper); - } -APT_IGNORE_DEPRECATED_POP - /** \brief returns all packages specified by a string \param Cache the packages are in @@ -752,7 +682,7 @@ typedef PackageContainer > PackageList; typedef PackageContainer > PackageDeque; typedef PackageContainer > PackageVector; -class VersionContainerInterface { /*{{{*/ +class APT_PUBLIC VersionContainerInterface { /*{{{*/ /** \class APT::VersionContainerInterface Same as APT::PackageContainerInterface, just for Versions */ @@ -792,17 +722,6 @@ public: virtual void clear() = 0; virtual size_t size() const = 0; - /** \brief specifies which version(s) will be returned if non is given */ - enum APT_DEPRECATED_MSG("enum moved to CacheSetHelper::VerSelector instead") Version { - ALL = CacheSetHelper::ALL, - CANDANDINST = CacheSetHelper::CANDANDINST, - CANDIDATE = CacheSetHelper::CANDIDATE, - INSTALLED = CacheSetHelper::INSTALLED, - CANDINST = CacheSetHelper::CANDINST, - INSTCAND = CacheSetHelper::INSTCAND, - NEWEST = CacheSetHelper::NEWEST - }; - struct Modifier { unsigned short const ID; const char * const Alias; @@ -811,45 +730,22 @@ public: Modifier (unsigned short const &id, const char * const alias, Position const &pos, enum CacheSetHelper::VerSelector const select) : ID(id), Alias(alias), Pos(pos), SelectVersion(select) {} -APT_IGNORE_DEPRECATED_PUSH - APT_DEPRECATED_MSG("Construct with a CacheSetHelper::VerSelector instead") Modifier(unsigned short const &id, const char * const alias, Position const &pos, - Version const &select) : ID(id), Alias(alias), Pos(pos), - SelectVersion((CacheSetHelper::VerSelector)select) {} -APT_IGNORE_DEPRECATED_POP }; static bool FromCommandLine(VersionContainerInterface * const vci, pkgCacheFile &Cache, const char **cmdline, CacheSetHelper::VerSelector const fallback, CacheSetHelper &helper); -APT_IGNORE_DEPRECATED_PUSH - APT_DEPRECATED_MSG("Use CacheSetHelper::VerSelector as fallback selector") static bool FromCommandLine(VersionContainerInterface * const vci, pkgCacheFile &Cache, - const char **cmdline, Version const &fallback, - CacheSetHelper &helper) { - return FromCommandLine(vci, Cache, cmdline, (CacheSetHelper::VerSelector)fallback, helper); - } -APT_IGNORE_DEPRECATED_POP static bool FromString(VersionContainerInterface * const vci, pkgCacheFile &Cache, std::string pkg, CacheSetHelper::VerSelector const fallback, CacheSetHelper &helper, bool const onlyFromName = false); -APT_IGNORE_DEPRECATED_PUSH - APT_DEPRECATED_MSG("Use CacheSetHelper::VerSelector as fallback selector") static bool FromString(VersionContainerInterface * const vci, pkgCacheFile &Cache, - std::string pkg, Version const &fallback, CacheSetHelper &helper, - bool const onlyFromName = false) { - return FromString(vci, Cache, pkg, (CacheSetHelper::VerSelector)fallback, helper, onlyFromName); - } -APT_IGNORE_DEPRECATED_POP + + static bool FromPattern(VersionContainerInterface *const vci, pkgCacheFile &Cache, + std::string pkg, CacheSetHelper::VerSelector const fallback, CacheSetHelper &helper); static bool FromPackage(VersionContainerInterface * const vci, pkgCacheFile &Cache, pkgCache::PkgIterator const &P, CacheSetHelper::VerSelector const fallback, CacheSetHelper &helper); -APT_IGNORE_DEPRECATED_PUSH - APT_DEPRECATED_MSG("Use CacheSetHelper::VerSelector as fallback selector") static bool FromPackage(VersionContainerInterface * const vci, pkgCacheFile &Cache, - pkgCache::PkgIterator const &P, Version const &fallback, - CacheSetHelper &helper) { - return FromPackage(vci, Cache, P, (CacheSetHelper::VerSelector)fallback, helper); - } -APT_IGNORE_DEPRECATED_POP static bool FromModifierCommandLine(unsigned short &modID, VersionContainerInterface * const vci, @@ -863,17 +759,9 @@ APT_IGNORE_DEPRECATED_POP pkgCache::DepIterator const &D, CacheSetHelper::VerSelector const selector, CacheSetHelper &helper); -APT_IGNORE_DEPRECATED_PUSH - APT_DEPRECATED_MSG("Use CacheSetHelper::VerSelector as fallback selector") static bool FromDependency(VersionContainerInterface * const vci, - pkgCacheFile &Cache, - pkgCache::DepIterator const &D, - Version const &selector, - CacheSetHelper &helper) { - return FromDependency(vci, Cache, D, (CacheSetHelper::VerSelector)selector, helper); - } -APT_IGNORE_DEPRECATED_POP VersionContainerInterface(); + VersionContainerInterface(VersionContainerInterface const &other); VersionContainerInterface& operator=(VersionContainerInterface const &other); virtual ~VersionContainerInterface(); private: @@ -899,7 +787,7 @@ protected: /*{{{*/ /*}}}*/ }; /*}}}*/ -template class VersionContainer : public VersionContainerInterface {/*{{{*/ +template class APT_PUBLIC VersionContainer : public VersionContainerInterface {/*{{{*/ /** \class APT::VersionContainer Simple wrapper around a container class like std::set to provide a similar @@ -1008,31 +896,7 @@ public: /*{{{*/ static VersionContainer FromString(pkgCacheFile &Cache, std::string pkg) { return FromString(Cache, pkg, CacheSetHelper::CANDINST); } -APT_IGNORE_DEPRECATED_PUSH - static VersionContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline, - Version const &fallback, CacheSetHelper &helper) { - VersionContainer vercon; - VersionContainerInterface::FromCommandLine(&vercon, Cache, cmdline, (CacheSetHelper::VerSelector)fallback, helper); - return vercon; - } - static VersionContainer FromCommandLine(pkgCacheFile &Cache, const char **cmdline, - Version const &fallback) { - CacheSetHelper helper; - return FromCommandLine(Cache, cmdline, (CacheSetHelper::VerSelector)fallback, helper); - } - static VersionContainer FromString(pkgCacheFile &Cache, std::string const &pkg, - Version const &fallback, CacheSetHelper &helper, - bool const /*onlyFromName = false*/) { - VersionContainer vercon; - VersionContainerInterface::FromString(&vercon, Cache, pkg, (CacheSetHelper::VerSelector)fallback, helper); - return vercon; - } - static VersionContainer FromString(pkgCacheFile &Cache, std::string pkg, - Version const &fallback) { - CacheSetHelper helper; - return FromString(Cache, pkg, (CacheSetHelper::VerSelector)fallback, helper); - } -APT_IGNORE_DEPRECATED_POP + /** \brief returns all versions specified for the package @@ -1051,19 +915,6 @@ APT_IGNORE_DEPRECATED_POP CacheSetHelper helper; return FromPackage(Cache, P, fallback, helper); } -APT_IGNORE_DEPRECATED_PUSH - static VersionContainer FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P, - Version const &fallback, CacheSetHelper &helper) { - VersionContainer vercon; - VersionContainerInterface::FromPackage(&vercon, Cache, P, (CacheSetHelper::VerSelector)fallback, helper); - return vercon; - } - static VersionContainer FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P, - Version const &fallback) { - CacheSetHelper helper; - return FromPackage(Cache, P, (CacheSetHelper::VerSelector)fallback, helper); - } -APT_IGNORE_DEPRECATED_POP static VersionContainer FromPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &P) { return FromPackage(Cache, P, CacheSetHelper::CANDIDATE); } @@ -1104,19 +955,6 @@ APT_IGNORE_DEPRECATED_POP CacheSetHelper helper; return FromDependency(Cache, D, selector, helper); } -APT_IGNORE_DEPRECATED_PUSH - static VersionContainer FromDependency(pkgCacheFile &Cache, pkgCache::DepIterator const &D, - Version const &selector, CacheSetHelper &helper) { - VersionContainer vercon; - VersionContainerInterface::FromDependency(&vercon, Cache, D, (CacheSetHelper::VerSelector)selector, helper); - return vercon; - } - static VersionContainer FromDependency(pkgCacheFile &Cache, pkgCache::DepIterator const &D, - Version const &selector) { - CacheSetHelper helper; - return FromDependency(Cache, D, (CacheSetHelper::VerSelector)selector, helper); - } -APT_IGNORE_DEPRECATED_POP static VersionContainer FromDependency(pkgCacheFile &Cache, pkgCache::DepIterator const &D) { return FromDependency(Cache, D, CacheSetHelper::CANDIDATE); } diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc index 151608b..5df03a9 100644 --- a/apt-pkg/cdrom.cc +++ b/apt-pkg/cdrom.cc @@ -923,12 +923,6 @@ pkgUdevCdromDevices::pkgUdevCdromDevices() /*{{{*/ { } /*}}}*/ - -bool pkgUdevCdromDevices::Dlopen() /*{{{*/ -{ - return true; -} - /*}}}*/ // convenience interface, this will just call ScanForRemovable /*{{{*/ vector pkgUdevCdromDevices::Scan() { diff --git a/apt-pkg/cdrom.h b/apt-pkg/cdrom.h index 6bc2b34..d3fc771 100644 --- a/apt-pkg/cdrom.h +++ b/apt-pkg/cdrom.h @@ -8,15 +8,11 @@ #include -#ifndef APT_8_CLEANER_HEADERS -#include -using namespace std; -#endif class Configuration; class OpProgress; -class pkgCdromStatus /*{{{*/ +class APT_PUBLIC pkgCdromStatus /*{{{*/ { void * const d; protected: @@ -39,7 +35,7 @@ class pkgCdromStatus /*{{{*/ virtual OpProgress* GetOpProgress() {return NULL; }; }; /*}}}*/ -class pkgCdrom /*{{{*/ +class APT_PUBLIC pkgCdrom /*{{{*/ { protected: enum { @@ -89,41 +85,20 @@ class pkgCdrom /*{{{*/ // class that uses libudev to find cdrom/removable devices dynamically -struct CdromDevice /*{{{*/ +struct APT_PUBLIC CdromDevice /*{{{*/ { std::string DeviceName; bool Mounted; std::string MountPath; }; /*}}}*/ -class pkgUdevCdromDevices /*{{{*/ +class APT_PUBLIC pkgUdevCdromDevices /*{{{*/ { void * const d; - - protected: - // old libudev dlopen structure, not used anymore, but can't break ABI - void *_padding; - struct _padding *(*_padding__new)(void); - int (*_padding__enumerate_add_match_property)(struct _padding_enumerate *_padding_enumerate, const char *property, const char *value); - int (*_padding__enumerate_scan_devices)(struct _padding_enumerate *_padding_enumerate); - struct _padding_list_entry *(*_padding__enumerate_get_list_entry)(struct _padding_enumerate *_padding_enumerate); - struct _padding_device *(*_padding__device_new_from_syspath)(struct _padding *_padding, const char *syspath); - struct _padding *(*_padding__enumerate_get__padding)(struct _padding_enumerate *_padding_enumerate); - const char *(*_padding__list_entry_get_name)(struct _padding_list_entry *list_entry); - const char *(*_padding__device_get_devnode)(struct _padding_device *_padding_device); - struct _padding_enumerate *(*_padding__enumerate_new)(struct _padding *_padding); - struct _padding_list_entry *(*_padding__list_entry_get_next)(struct _padding_list_entry *list_entry); - const char *(*_padding__device_get_property_value)(struct _padding_device *_padding_device, const char *key); - int (*_padding__enumerate_add_match_sysattr)(struct _padding_enumerate *_padding_enumerate, const char *property, const char *value); - // end lib_padding dlopen - public: pkgUdevCdromDevices(); virtual ~pkgUdevCdromDevices(); - // try to open - bool Dlopen(); - // convenience interface, this will just call ScanForRemovable // with "APT::cdrom::CdromOnly" std::vector Scan(); diff --git a/apt-pkg/clean.cc b/apt-pkg/clean.cc index f335554..9dd56e6 100644 --- a/apt-pkg/clean.cc +++ b/apt-pkg/clean.cc @@ -43,17 +43,9 @@ bool pkgArchiveCleaner::Go(std::string Dir,pkgCache &Cache) if (FileExists(Dir) == false) return true; - auto const withoutChangingDir = dynamic_cast(this); int const dirfd = open(Dir.c_str(), O_RDONLY | O_DIRECTORY | O_CLOEXEC); if (dirfd == -1) return _error->Errno("open",_("Unable to read %s"),Dir.c_str()); - std::string CWD; - if (withoutChangingDir == nullptr) - { - CWD = SafeGetCWD(); - if (fchdir(dirfd) != 0) - return _error->Errno("fchdir",_("Unable to change to %s"),Dir.c_str()); - } DIR * const D = fdopendir(dirfd); if (D == nullptr) return _error->Errno("opendir",_("Unable to read %s"),Dir.c_str()); @@ -131,18 +123,9 @@ bool pkgArchiveCleaner::Go(std::string Dir,pkgCache &Cache) continue; } - if (withoutChangingDir == nullptr) - { - APT_IGNORE_DEPRECATED_PUSH - Erase(Dir->d_name, Pkg, Ver, St); - APT_IGNORE_DEPRECATED_POP - } - else - withoutChangingDir->Erase(dirfd, Dir->d_name, Pkg, Ver, St); + Erase(dirfd, Dir->d_name, Pkg, Ver, St); } closedir(D); - if (withoutChangingDir == nullptr && chdir(CWD.c_str()) != 0) - return _error->Errno("chdir", _("Unable to change to %s"),Dir.c_str()); return true; } /*}}}*/ diff --git a/apt-pkg/clean.h b/apt-pkg/clean.h index d6490a0..21b90e5 100644 --- a/apt-pkg/clean.h +++ b/apt-pkg/clean.h @@ -9,9 +9,6 @@ #ifndef APTPKG_CLEAN_H #define APTPKG_CLEAN_H -#ifndef APT_10_CLEANER_HEADERS -#include -#endif #include @@ -19,14 +16,15 @@ class pkgCache; -class pkgArchiveCleaner +class APT_PUBLIC pkgArchiveCleaner { /** \brief dpointer placeholder (for later in case we need it) */ void * const d; protected: - - APT_DEPRECATED_MSG("Use pkgArchiveCleaner2 to avoid CWD expectations and chdir") virtual void Erase(const char * /*File*/,std::string /*Pkg*/,std::string /*Ver*/,struct stat & /*St*/) {}; + virtual void Erase(int const dirfd, char const * const File, + std::string const &Pkg,std::string const &Ver, + struct stat const &St) = 0; public: @@ -35,15 +33,6 @@ class pkgArchiveCleaner pkgArchiveCleaner(); virtual ~pkgArchiveCleaner(); }; -// TODO: merge classes and "erase" the old way -class pkgArchiveCleaner2: public pkgArchiveCleaner -{ - friend class pkgArchiveCleaner; -protected: - using pkgArchiveCleaner::Erase; - virtual void Erase(int const dirfd, char const * const File, - std::string const &Pkg,std::string const &Ver, - struct stat const &St) = 0; -}; + #endif diff --git a/apt-inst/contrib/arfile.cc b/apt-pkg/contrib/arfile.cc similarity index 100% rename from apt-inst/contrib/arfile.cc rename to apt-pkg/contrib/arfile.cc diff --git a/apt-inst/contrib/arfile.h b/apt-pkg/contrib/arfile.h similarity index 91% rename from apt-inst/contrib/arfile.h rename to apt-pkg/contrib/arfile.h index 8124208..9b13ed9 100644 --- a/apt-inst/contrib/arfile.h +++ b/apt-pkg/contrib/arfile.h @@ -16,13 +16,10 @@ #include #include -#ifndef APT_8_CLEANER_HEADERS -#include -#endif class FileFd; -class ARArchive +class APT_PUBLIC ARArchive { struct MemberHeader; public: @@ -44,8 +41,8 @@ class ARArchive const Member *FindMember(const char *Name) const; inline Member *Members() { return List; } - ARArchive(FileFd &File); - ~ARArchive(); + APT_PUBLIC explicit ARArchive(FileFd &File); + APT_PUBLIC ~ARArchive(); }; // A member of the archive diff --git a/apt-pkg/contrib/cdromutl.cc b/apt-pkg/contrib/cdromutl.cc index 9db3980..c0fe869 100644 --- a/apt-pkg/contrib/cdromutl.cc +++ b/apt-pkg/contrib/cdromutl.cc @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include #include @@ -181,7 +181,7 @@ bool MountCdrom(string Path, string DeviceName) from effecting the outcome. */ bool IdentCdrom(string CD,string &Res,unsigned int Version) { - MD5Summation Hash; + Hashes Hash(Hashes::MD5SUM); bool writable_media = false; int dirfd = open(CD.c_str(), O_RDONLY | O_DIRECTORY | O_CLOEXEC); @@ -254,7 +254,7 @@ bool IdentCdrom(string CD,string &Res,unsigned int Version) strprintf(S, "-%u.debug", Version); closedir(D); - Res = Hash.Result().Value().append(std::move(S)); + Res = Hash.GetHashString(Hashes::MD5SUM).HashValue().append(std::move(S)); return true; } /*}}}*/ diff --git a/apt-pkg/contrib/cdromutl.h b/apt-pkg/contrib/cdromutl.h index 4e07e42..1384cea 100644 --- a/apt-pkg/contrib/cdromutl.h +++ b/apt-pkg/contrib/cdromutl.h @@ -9,17 +9,16 @@ #ifndef PKGLIB_CDROMUTL_H #define PKGLIB_CDROMUTL_H +#include + #include -#ifndef APT_8_CLEANER_HEADERS -using std::string; -#endif // mount cdrom, DeviceName (e.g. /dev/sr0) is optional -bool MountCdrom(std::string Path, std::string DeviceName=""); -bool UnmountCdrom(std::string Path); -bool IdentCdrom(std::string CD,std::string &Res,unsigned int Version = 2); -bool IsMounted(std::string &Path); -std::string FindMountPointForDevice(const char *device); +APT_PUBLIC bool MountCdrom(std::string Path, std::string DeviceName=""); +APT_PUBLIC bool UnmountCdrom(std::string Path); +APT_PUBLIC bool IdentCdrom(std::string CD,std::string &Res,unsigned int Version = 2); +APT_PUBLIC bool IsMounted(std::string &Path); +APT_PUBLIC std::string FindMountPointForDevice(const char *device); #endif diff --git a/apt-pkg/contrib/cmndline.cc b/apt-pkg/contrib/cmndline.cc index b2a96ca..b80543c 100644 --- a/apt-pkg/contrib/cmndline.cc +++ b/apt-pkg/contrib/cmndline.cc @@ -300,7 +300,8 @@ bool CommandLine::HandleOpt(int &I,int argc,const char *argv[], // Skip the leading dash const char *J = argv[I]; - for (; *J != 0 && *J == '-'; J++); + for (; *J == '-'; J++) + ; const char *JEnd = strchr(J, '-'); if (JEnd != NULL) @@ -380,11 +381,6 @@ bool CommandLine::DispatchArg(Dispatch const * const Map,bool NoMatch) } return false; -} -bool CommandLine::DispatchArg(Dispatch *Map,bool NoMatch) -{ - Dispatch const * const Map2 = Map; - return DispatchArg(Map2, NoMatch); } /*}}}*/ // CommandLine::SaveInConfig - for output later in a logfile or so /*{{{*/ diff --git a/apt-pkg/contrib/cmndline.h b/apt-pkg/contrib/cmndline.h index bdd4f6e..40d384f 100644 --- a/apt-pkg/contrib/cmndline.h +++ b/apt-pkg/contrib/cmndline.h @@ -45,13 +45,10 @@ #include -#ifndef APT_8_CLEANER_HEADERS -#include -#endif class Configuration; -class CommandLine +class APT_PUBLIC CommandLine { public: struct Args; @@ -83,8 +80,6 @@ class CommandLine bool Parse(int argc,const char **argv); void ShowHelp(); unsigned int FileSize() const APT_PURE; - // FIXME: merge on next ABI break - bool DispatchArg(Dispatch *List,bool NoMatch = true); bool DispatchArg(Dispatch const * const List,bool NoMatch = true); static char const * GetCommand(Dispatch const * const Map, diff --git a/apt-pkg/contrib/configuration.cc b/apt-pkg/contrib/configuration.cc index 997ef74..931df9f 100644 --- a/apt-pkg/contrib/configuration.cc +++ b/apt-pkg/contrib/configuration.cc @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -1149,10 +1150,10 @@ bool ReadConfigFile(Configuration &Conf,const string &FName,bool const &AsSectio bool ReadConfigDir(Configuration &Conf,const string &Dir, bool const &AsSectional, unsigned const &Depth) { - bool good = true; - for (auto const &I : GetListOfFilesInDir(Dir, "conf", true, true)) - good = ReadConfigFile(Conf, I, AsSectional, Depth) && good; - return good; + auto const files = GetListOfFilesInDir(Dir, "conf", true, true); + return std::accumulate(files.cbegin(), files.cend(), true, [&](bool good, auto const &file) { + return ReadConfigFile(Conf, file, AsSectional, Depth) && good; + }); } /*}}}*/ // MatchAgainstConfig Constructor /*{{{*/ diff --git a/apt-pkg/contrib/configuration.h b/apt-pkg/contrib/configuration.h index 2a3ae1a..6ebf28d 100644 --- a/apt-pkg/contrib/configuration.h +++ b/apt-pkg/contrib/configuration.h @@ -35,11 +35,8 @@ #include -#ifndef APT_8_CLEANER_HEADERS -using std::string; -#endif -class Configuration +class APT_PUBLIC Configuration { public: @@ -119,7 +116,7 @@ class Configuration void Dump(std::ostream& str, char const * const root, char const * const format, bool const emptyValue); - Configuration(const Item *Root); + explicit Configuration(const Item *Root); Configuration(); ~Configuration(); @@ -130,7 +127,7 @@ class Configuration APT_HIDDEN void clearPatterns(); public: - MatchAgainstConfig(char const * Config); + explicit MatchAgainstConfig(char const * Config); virtual ~MatchAgainstConfig(); /** \brief Returns \b true for a string matching one of the patterns */ @@ -142,13 +139,13 @@ class Configuration }; }; -extern Configuration *_config; +APT_PUBLIC extern Configuration *_config; -bool ReadConfigFile(Configuration &Conf,const std::string &FName, +APT_PUBLIC bool ReadConfigFile(Configuration &Conf,const std::string &FName, bool const &AsSectional = false, unsigned const &Depth = 0); -bool ReadConfigDir(Configuration &Conf,const std::string &Dir, +APT_PUBLIC bool ReadConfigDir(Configuration &Conf,const std::string &Dir, bool const &AsSectional = false, unsigned const &Depth = 0); diff --git a/apt-pkg/contrib/crc-16.cc b/apt-pkg/contrib/crc-16.cc deleted file mode 100644 index 2e396ab..0000000 --- a/apt-pkg/contrib/crc-16.cc +++ /dev/null @@ -1,77 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -/* ###################################################################### - - CRC16 - Compute a 16bit crc very quickly - - This was ripped out of the linux 2.2 kernel source (irda/crc.c) and - is credited to ppp.c by Michael Callahan and - Al Longyear - - Modified by Jason Gunthorpe to fit the local coding - style, this code is believed to be in the Public Domain. - - ##################################################################### */ - /*}}}*/ -// Include Files /*{{{*/ -#include - -#include - /*}}}*/ - -/* - * This mysterious table is just the CRC of each possible byte. It can be - * computed using the standard bit-at-a-time methods. The polynomial can - * be seen in entry 128, 0x8408. This corresponds to x^0 + x^5 + x^12. - * Add the implicit x^16, and you have the standard CRC-CCITT. - */ -static unsigned short const crc16_table[256] = -{ - 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, - 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, - 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, - 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, - 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, - 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, - 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, - 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, - 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, - 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, - 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, - 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, - 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, - 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, - 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, - 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, - 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, - 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, - 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, - 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, - 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, - 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, - 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, - 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, - 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, - 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, - 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, - 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, - 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, - 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, - 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, - 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 -}; - -/* Recompute the FCS with one more character appended. */ -#define CalcFCS(fcs, c) (((fcs) >> 8) ^ crc16_table[((fcs) ^ (c)) & 0xff]) -unsigned short AddCRC16Byte(unsigned short fcs, unsigned char byte) -{ - return CalcFCS(fcs, byte); -} -unsigned short AddCRC16(unsigned short fcs, void const *Buf, - unsigned long long len) -{ - unsigned char const *buf = (unsigned char const *)Buf; - while (len--) - fcs = CalcFCS(fcs, *buf++); - return fcs; -} diff --git a/apt-pkg/contrib/crc-16.h b/apt-pkg/contrib/crc-16.h deleted file mode 100644 index 3e07560..0000000 --- a/apt-pkg/contrib/crc-16.h +++ /dev/null @@ -1,19 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -/* ###################################################################### - - CRC16 - Compute a 16bit crc very quickly - - ##################################################################### */ - /*}}}*/ -#ifndef APTPKG_CRC16_H -#define APTPKG_CRC16_H - -#include - -#define INIT_FCS 0xffff -unsigned short AddCRC16Byte(unsigned short fcs, unsigned char byte) APT_PURE; -unsigned short AddCRC16(unsigned short fcs, void const *buf, - unsigned long long len) APT_PURE; - -#endif diff --git a/apt-pkg/contrib/error.cc b/apt-pkg/contrib/error.cc index 3c397ea..ac53b96 100644 --- a/apt-pkg/contrib/error.cc +++ b/apt-pkg/contrib/error.cc @@ -15,6 +15,7 @@ // Include Files /*{{{*/ #include +#include #include #include @@ -242,3 +243,90 @@ void GlobalError::MergeWithStack() { Stacks.pop_back(); } /*}}}*/ + +// GlobalError::Item::operator<< /*{{{*/ +APT_HIDDEN std::ostream &operator<<(std::ostream &out, GlobalError::Item i) +{ + static constexpr auto COLOR_RESET = "\033[0m"; + static constexpr auto COLOR_NOTICE = "\033[33m"; // normal yellow + static constexpr auto COLOR_WARN = "\033[1;33m"; // bold yellow + static constexpr auto COLOR_ERROR = "\033[1;31m"; // bold red + + bool use_color = _config->FindB("APT::Color", false); + + if (use_color) + { + switch (i.Type) + { + case GlobalError::FATAL: + case GlobalError::ERROR: + out << COLOR_ERROR; + break; + case GlobalError::WARNING: + out << COLOR_WARN; + break; + case GlobalError::NOTICE: + out << COLOR_NOTICE; + break; + default: + break; + } + } + + switch (i.Type) + { + case GlobalError::FATAL: + case GlobalError::ERROR: + out << 'E'; + break; + case GlobalError::WARNING: + out << 'W'; + break; + case GlobalError::NOTICE: + out << 'N'; + break; + case GlobalError::DEBUG: + out << 'D'; + break; + } + out << ": "; + + if (use_color) + { + switch (i.Type) + { + case GlobalError::FATAL: + case GlobalError::ERROR: + case GlobalError::WARNING: + case GlobalError::NOTICE: + out << COLOR_RESET; + break; + default: + break; + } + } + + std::string::size_type line_start = 0; + std::string::size_type line_end; + while ((line_end = i.Text.find_first_of("\n\r", line_start)) != std::string::npos) + { + if (line_start != 0) + out << std::endl + << " "; + out << i.Text.substr(line_start, line_end - line_start); + line_start = i.Text.find_first_not_of("\n\r", line_end + 1); + if (line_start == std::string::npos) + break; + } + if (line_start == 0) + out << i.Text; + else if (line_start != std::string::npos) + out << std::endl + << " " << i.Text.substr(line_start); + + if (use_color) + out << COLOR_RESET; + + return out; +} + /*}}}*/ diff --git a/apt-pkg/contrib/error.h b/apt-pkg/contrib/error.h index d0f4507..24eead8 100644 --- a/apt-pkg/contrib/error.h +++ b/apt-pkg/contrib/error.h @@ -48,7 +48,7 @@ #include #include -class GlobalError /*{{{*/ +class APT_PUBLIC GlobalError /*{{{*/ { public: /*{{{*/ /** \brief a message can have one of following severity */ @@ -315,33 +315,11 @@ private: /*{{{*/ Item(char const *Text, MsgType const &Type) : Text(Text), Type(Type) {}; - APT_HIDDEN friend std::ostream& operator<< (std::ostream &out, Item i) { - switch(i.Type) { - case FATAL: - case ERROR: out << 'E'; break; - case WARNING: out << 'W'; break; - case NOTICE: out << 'N'; break; - case DEBUG: out << 'D'; break; - } - out << ": "; - std::string::size_type line_start = 0; - std::string::size_type line_end; - while ((line_end = i.Text.find_first_of("\n\r", line_start)) != std::string::npos) { - if (line_start != 0) - out << std::endl << " "; - out << i.Text.substr(line_start, line_end - line_start); - line_start = i.Text.find_first_not_of("\n\r", line_end + 1); - if (line_start == std::string::npos) - break; - } - if (line_start == 0) - out << i.Text; - else if (line_start != std::string::npos) - out << std::endl << " " << i.Text.substr(line_start); - return out; - } + APT_HIDDEN friend std::ostream &operator<<(std::ostream &out, Item i); }; + APT_HIDDEN friend std::ostream &operator<<(std::ostream &out, Item i); + std::list Messages; bool PendingFlag; @@ -359,7 +337,9 @@ private: /*{{{*/ /*}}}*/ // The 'extra-ansi' syntax is used to help with collisions. -GlobalError *_GetErrorObj(); -#define _error _GetErrorObj() +APT_PUBLIC GlobalError *_GetErrorObj(); +static struct { + inline GlobalError* operator ->() { return _GetErrorObj(); } +} _error APT_UNUSED; #endif diff --git a/apt-inst/contrib/extracttar.cc b/apt-pkg/contrib/extracttar.cc similarity index 99% rename from apt-inst/contrib/extracttar.cc rename to apt-pkg/contrib/extracttar.cc index 42032ad..9bb0a55 100644 --- a/apt-inst/contrib/extracttar.cc +++ b/apt-pkg/contrib/extracttar.cc @@ -76,10 +76,6 @@ ExtractTar::~ExtractTar() } /*}}}*/ // ExtractTar::Done - Reap the gzip sub process /*{{{*/ -bool ExtractTar::Done(bool) -{ - return Done(); -} bool ExtractTar::Done() { return InFd.Close(); diff --git a/apt-inst/contrib/extracttar.h b/apt-pkg/contrib/extracttar.h similarity index 85% rename from apt-inst/contrib/extracttar.h rename to apt-pkg/contrib/extracttar.h index c0b340e..a3c862a 100644 --- a/apt-inst/contrib/extracttar.h +++ b/apt-pkg/contrib/extracttar.h @@ -18,15 +18,10 @@ #include -#ifndef APT_8_CLEANER_HEADERS -#include -#include -using std::min; -#endif class pkgDirStream; -class ExtractTar +class APT_PUBLIC ExtractTar { protected: @@ -48,7 +43,6 @@ class ExtractTar // Fork and reap gzip bool StartGzip(); bool Done(); - APT_DEPRECATED_MSG("Parameter Force is ignored, use Done() instead.") bool Done(bool Force); public: diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index 4f12349..045dbe1 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -25,7 +25,6 @@ #include #include #include -#include #include #include @@ -86,9 +85,6 @@ using namespace std; -/* Should be a multiple of the common page size (4096) */ -static constexpr unsigned long long APT_BUFFER_SIZE = 64 * 1024; - // RunScripts - Run a set of scripts from a configuration subtree /*{{{*/ // --------------------------------------------------------------------- /* */ @@ -224,6 +220,30 @@ bool RemoveFile(char const * const Function, std::string const &FileName)/*{{{*/ is done all other calls to GetLock in any other process will fail with -1. The return result is the fd of the file, the call should call close at some time. */ + +static std::string GetProcessName(int pid) +{ + struct HideError + { + int err; + HideError() : err(errno) { _error->PushToStack(); } + ~HideError() + { + errno = err; + _error->RevertToStack(); + } + } hideError; + std::string path; + strprintf(path, "/proc/%d/status", pid); + FileFd status(path, FileFd::ReadOnly); + std::string line; + while (status.ReadLine(line)) + { + if (line.substr(0, 5) == "Name:") + return line.substr(6); + } + return ""; +} int GetLock(string File,bool Errors) { // GetLock() is used in aptitude on directories with public-write access @@ -257,6 +277,20 @@ int GetLock(string File,bool Errors) { // always close to not leak resources int Tmp = errno; + + if ((errno == EACCES || errno == EAGAIN)) + { + fl.l_type = F_WRLCK; + fl.l_whence = SEEK_SET; + fl.l_start = 0; + fl.l_len = 0; + fl.l_pid = -1; + fcntl(FD, F_GETLK, &fl); + } + else + { + fl.l_pid = -1; + } close(FD); errno = Tmp; @@ -267,8 +301,23 @@ int GetLock(string File,bool Errors) } if (Errors == true) - _error->Errno("open",_("Could not get lock %s"),File.c_str()); - + { + // We only do the lookup in the if ((errno == EACCES || errno == EAGAIN)) + // case, so we do not need to show the errno strerrr here... + if (fl.l_pid != -1) + { + auto name = GetProcessName(fl.l_pid); + if (name.empty()) + _error->Error(_("Could not get lock %s. It is held by process %d"), File.c_str(), fl.l_pid); + else + _error->Error(_("Could not get lock %s. It is held by process %d (%s)"), File.c_str(), fl.l_pid, name.c_str()); + } + else + _error->Errno("open", _("Could not get lock %s"), File.c_str()); + + _error->Notice(_("Be aware that removing the lock file is not a solution and may break your system.")); + } + return -1; } @@ -1731,7 +1780,7 @@ class APT_HIDDEN ZstdFileFdPrivate : public FileFdPrivate #ifdef HAVE_ZSTD ZSTD_DStream *dctx; ZSTD_CStream *cctx; - size_t res; + size_t res = 0; FileFd backend; simple_buffer zstd_buffer; // Count of bytes that the decompressor expects to read next, or buffer size. @@ -1948,7 +1997,7 @@ class APT_HIDDEN LzmaFileFdPrivate: public FileFdPrivate { /*{{{*/ bool eof; bool compressing; - LZMAFILE(FileFd * const fd) : file(nullptr), filefd(fd), eof(false), compressing(false) { buffer[0] = '\0'; } + explicit LZMAFILE(FileFd * const fd) : file(nullptr), filefd(fd), eof(false), compressing(false) { buffer[0] = '\0'; } ~LZMAFILE() { if (compressing == true && filefd->Failed() == false) @@ -3018,19 +3067,6 @@ bool FileFd::FileFdError(const char *Description,...) { return false; } /*}}}*/ -gzFile FileFd::gzFd() { /*{{{*/ -#ifdef HAVE_ZLIB - GzipFileFdPrivate * const gzipd = dynamic_cast(d); - if (gzipd == nullptr) - return nullptr; - else - return gzipd->gz; -#else - return nullptr; -#endif -} - /*}}}*/ - // Glob - wrapper around "glob()" /*{{{*/ std::vector Glob(std::string const &pattern, int flags) { @@ -3153,16 +3189,6 @@ bool Rename(std::string From, std::string To) /*{{{*/ return true; } /*}}}*/ -bool Popen(const char* Args[], FileFd &Fd, pid_t &Child, FileFd::OpenMode Mode)/*{{{*/ -{ - return Popen(Args, Fd, Child, Mode, true); -} - /*}}}*/ -bool Popen(const char* Args[], FileFd &Fd, pid_t &Child, FileFd::OpenMode Mode, bool CaptureStderr)/*{{{*/ -{ - return Popen(Args, Fd, Child, Mode, CaptureStderr, false); -} - /*}}}*/ bool Popen(const char *Args[], FileFd &Fd, pid_t &Child, FileFd::OpenMode Mode, bool CaptureStderr, bool Sandbox) /*{{{*/ { int fd; diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h index 9005b81..dd16aa7 100644 --- a/apt-pkg/contrib/fileutl.h +++ b/apt-pkg/contrib/fileutl.h @@ -30,15 +30,12 @@ #include -#ifndef APT_8_CLEANER_HEADERS -using std::string; -#endif /* Define this for python-apt */ #define APT_HAS_GZIP 1 class FileFdPrivate; -class FileFd +class APT_PUBLIC FileFd { friend class FileFdPrivate; friend class GzipFileFdPrivate; @@ -133,20 +130,6 @@ class FileFd unsigned long long FileSize(); time_t ModificationTime(); - /* You want to use 'unsigned long long' if you are talking about a file - to be able to support large files (>2 or >4 GB) properly. - This shouldn't happen all to often for the indexes, but deb's might be… - And as the auto-conversation converts a 'unsigned long *' to a 'bool' - instead of 'unsigned long long *' we need to provide this explicitly - - otherwise applications magically start to fail… */ - bool Read(void *To,unsigned long long Size,unsigned long *Actual) APT_DEPRECATED_MSG("The Actual variable you pass in should be an unsigned long long") - { - unsigned long long R; - bool const T = Read(To, Size, &R); - *Actual = R; - return T; - } - bool Open(std::string FileName,unsigned int const Mode,CompressMode Compress,unsigned long const AccessMode = 0666); bool Open(std::string FileName,unsigned int const Mode,APT::Configuration::Compressor const &compressor,unsigned long const AccessMode = 0666); inline bool Open(std::string const &FileName,unsigned int const Mode, unsigned long const AccessMode = 0666) { @@ -163,7 +146,6 @@ class FileFd // Simple manipulators inline int Fd() {return iFd;}; inline void Fd(int fd) { OpenDescriptor(fd, ReadWrite);}; - gzFile gzFd() APT_DEPRECATED_MSG("Implementation detail, do not use to be able to support bzip2, xz and co") APT_PURE; inline bool IsOpen() {return iFd >= 0;}; inline bool Failed() {return (Flags & Fail) == Fail;}; @@ -192,29 +174,29 @@ class FileFd APT_HIDDEN bool FileFdError(const char* Description,...) APT_PRINTF(2) APT_COLD; }; -bool RunScripts(const char *Cnf); -bool CopyFile(FileFd &From,FileFd &To); -bool RemoveFile(char const * const Function, std::string const &FileName); -bool RemoveFileAt(char const * const Function, int const dirfd, std::string const &FileName); -int GetLock(std::string File,bool Errors = true); -bool FileExists(std::string File); -bool RealFileExists(std::string File); -bool DirectoryExists(std::string const &Path); -bool CreateDirectory(std::string const &Parent, std::string const &Path); -time_t GetModificationTime(std::string const &Path); -bool Rename(std::string From, std::string To); +APT_PUBLIC bool RunScripts(const char *Cnf); +APT_PUBLIC bool CopyFile(FileFd &From,FileFd &To); +APT_PUBLIC bool RemoveFile(char const * const Function, std::string const &FileName); +APT_PUBLIC bool RemoveFileAt(char const * const Function, int const dirfd, std::string const &FileName); +APT_PUBLIC int GetLock(std::string File,bool Errors = true); +APT_PUBLIC bool FileExists(std::string File); +APT_PUBLIC bool RealFileExists(std::string File); +APT_PUBLIC bool DirectoryExists(std::string const &Path); +APT_PUBLIC bool CreateDirectory(std::string const &Parent, std::string const &Path); +APT_PUBLIC time_t GetModificationTime(std::string const &Path); +APT_PUBLIC bool Rename(std::string From, std::string To); -std::string GetTempDir(); -std::string GetTempDir(std::string const &User); -FileFd* GetTempFile(std::string const &Prefix = "", +APT_PUBLIC std::string GetTempDir(); +APT_PUBLIC std::string GetTempDir(std::string const &User); +APT_PUBLIC FileFd* GetTempFile(std::string const &Prefix = "", bool ImmediateUnlink = true, FileFd * const TmpFd = NULL); // FIXME: GetTempFile should always return a buffered file -FileFd* GetTempFile(std::string const &Prefix, +APT_HIDDEN FileFd* GetTempFile(std::string const &Prefix, bool ImmediateUnlink , FileFd * const TmpFd, - bool Buffered) APT_HIDDEN; + bool Buffered); /** \brief Ensure the existence of the given Path * @@ -222,24 +204,24 @@ FileFd* GetTempFile(std::string const &Prefix, * /apt/ will be removed before CreateDirectory call. * \param Path which should exist after (successful) call */ -bool CreateAPTDirectoryIfNeeded(std::string const &Parent, std::string const &Path); +APT_PUBLIC bool CreateAPTDirectoryIfNeeded(std::string const &Parent, std::string const &Path); -std::vector GetListOfFilesInDir(std::string const &Dir, std::string const &Ext, +APT_PUBLIC std::vector GetListOfFilesInDir(std::string const &Dir, std::string const &Ext, bool const &SortList, bool const &AllowNoExt=false); -std::vector GetListOfFilesInDir(std::string const &Dir, std::vector const &Ext, +APT_PUBLIC std::vector GetListOfFilesInDir(std::string const &Dir, std::vector const &Ext, bool const &SortList); -std::vector GetListOfFilesInDir(std::string const &Dir, bool SortList); -std::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(std::set keep_fds); -void MergeKeepFdsFromConfiguration(std::set &keep_fds); -bool ExecWait(pid_t Pid,const char *Name,bool Reap = false); +APT_PUBLIC std::vector GetListOfFilesInDir(std::string const &Dir, bool SortList); +APT_PUBLIC std::string SafeGetCWD(); +APT_PUBLIC void SetCloseExec(int Fd,bool Close); +APT_PUBLIC void SetNonBlock(int Fd,bool Block); +APT_PUBLIC bool WaitFd(int Fd,bool write = false,unsigned long timeout = 0); +APT_PUBLIC pid_t ExecFork(); +APT_PUBLIC pid_t ExecFork(std::set keep_fds); +APT_PUBLIC void MergeKeepFdsFromConfiguration(std::set &keep_fds); +APT_PUBLIC bool ExecWait(pid_t Pid,const char *Name,bool Reap = false); // check if the given file starts with a PGP cleartext signature -bool StartsWithGPGClearTextSignature(std::string const &FileName); +APT_PUBLIC bool StartsWithGPGClearTextSignature(std::string const &FileName); /** change file attributes to requested known good values * @@ -251,7 +233,7 @@ bool StartsWithGPGClearTextSignature(std::string const &FileName); * @param group is the (new) group owning the file, e.g. root * @param mode is the access mode of the file, e.g. 0644 */ -bool ChangeOwnerAndPermissionOfFile(char const * const requester, char const * const file, char const * const user, char const * const group, mode_t const mode); +APT_PUBLIC bool ChangeOwnerAndPermissionOfFile(char const * const requester, char const * const file, char const * const user, char const * const group, mode_t const mode); /** * \brief Drop privileges @@ -264,23 +246,23 @@ bool ChangeOwnerAndPermissionOfFile(char const * const requester, char const * c * * \return true on success, false on failure with _error set */ -bool DropPrivileges(); +APT_PUBLIC bool DropPrivileges(); // File string manipulators -std::string flNotDir(std::string File); -std::string flNotFile(std::string File); -std::string flNoLink(std::string File); -std::string flExtension(std::string File); -std::string flCombine(std::string Dir,std::string File); +APT_PUBLIC std::string flNotDir(std::string File); +APT_PUBLIC std::string flNotFile(std::string File); +APT_PUBLIC std::string flNoLink(std::string File); +APT_PUBLIC std::string flExtension(std::string File); +APT_PUBLIC std::string flCombine(std::string Dir,std::string File); /** \brief Takes a file path and returns the absolute path */ -std::string flAbsPath(std::string File); +APT_PUBLIC std::string flAbsPath(std::string File); /** \brief removes superfluous /./ and // from path */ APT_HIDDEN std::string flNormalize(std::string file); // simple c++ glob -std::vector Glob(std::string const &pattern, int flags=0); +APT_PUBLIC std::vector Glob(std::string const &pattern, int flags=0); /** \brief Popen() implementation that execv() instead of using a shell * @@ -294,9 +276,7 @@ std::vector Glob(std::string const &pattern, int flags=0); * \param Sandbox True if this should run sandboxed * \return true on success, false on failure with _error set */ -bool Popen(const char *Args[], FileFd &Fd, pid_t &Child, FileFd::OpenMode Mode, bool CaptureStderr, bool Sandbox) APT_HIDDEN; -bool Popen(const char* Args[], FileFd &Fd, pid_t &Child, FileFd::OpenMode Mode, bool CaptureStderr); -bool Popen(const char* Args[], FileFd &Fd, pid_t &Child, FileFd::OpenMode Mode); +APT_PUBLIC bool Popen(const char *Args[], FileFd &Fd, pid_t &Child, FileFd::OpenMode Mode, bool CaptureStderr = true, bool Sandbox = false); APT_HIDDEN bool OpenConfigurationFileFd(std::string const &File, FileFd &Fd); diff --git a/apt-pkg/contrib/gpgv.h b/apt-pkg/contrib/gpgv.h index 2a4cdad..1cabed4 100644 --- a/apt-pkg/contrib/gpgv.h +++ b/apt-pkg/contrib/gpgv.h @@ -14,9 +14,6 @@ #include #include -#ifndef APT_10_CLEANER_HEADERS -#include -#endif class FileFd; @@ -42,7 +39,7 @@ class FileFd; * @param fd is used as a pipe for the standard output of gpgv * @param key is the specific one to be used instead of using all */ -void ExecGPGV(std::string const &File, std::string const &FileSig, +APT_PUBLIC void ExecGPGV(std::string const &File, std::string const &FileSig, int const &statusfd, int fd[2], std::string const &Key = "") APT_NORETURN; inline APT_NORETURN void ExecGPGV(std::string const &File, std::string const &FileSig, int const &statusfd = -1) { @@ -73,7 +70,7 @@ inline APT_NORETURN void ExecGPGV(std::string const &File, std::string const &Fi * @param SignatureFile is the FileFd all signatures will be written to * @return true if the splitting was successful, false otherwise */ -bool SplitClearSignedFile(std::string const &InFile, FileFd * const ContentFile, +APT_PUBLIC bool SplitClearSignedFile(std::string const &InFile, FileFd * const ContentFile, std::vector * const ContentHeader, FileFd * const SignatureFile); /** \brief open a file which might be clear-signed @@ -87,6 +84,6 @@ bool SplitClearSignedFile(std::string const &InFile, FileFd * const ContentFile, * @param[out] MessageFile is the FileFd in which the file will be opened * @return true if opening was successful, otherwise false */ -bool OpenMaybeClearSignedFile(std::string const &ClearSignedFileName, FileFd &MessageFile); +APT_PUBLIC bool OpenMaybeClearSignedFile(std::string const &ClearSignedFileName, FileFd &MessageFile); #endif diff --git a/apt-pkg/contrib/hashes.cc b/apt-pkg/contrib/hashes.cc index 98b92cc..8733f63 100644 --- a/apt-pkg/contrib/hashes.cc +++ b/apt-pkg/contrib/hashes.cc @@ -15,18 +15,32 @@ #include #include #include -#include -#include -#include +#include +#include #include #include #include +#include #include #include #include + +#include /*}}}*/ +static const constexpr struct HashAlgo +{ + const char *name; + int gcryAlgo; + Hashes::SupportedHashes ourAlgo; +} Algorithms[] = { + {"MD5Sum", GCRY_MD_MD5, Hashes::MD5SUM}, + {"SHA1", GCRY_MD_SHA1, Hashes::SHA1SUM}, + {"SHA256", GCRY_MD_SHA256, Hashes::SHA256SUM}, + {"SHA512", GCRY_MD_SHA512, Hashes::SHA512SUM}, +}; + const char * HashString::_SupportedHashes[] = { "SHA512", "SHA256", "SHA1", "MD5Sum", "Checksum-FileSize", NULL @@ -89,27 +103,27 @@ std::string HashString::GetHashForFile(std::string filename) const /*{{{*/ FileFd Fd(filename, FileFd::ReadOnly); if(strcasecmp(Type.c_str(), "MD5Sum") == 0) { - MD5Summation MD5; + Hashes MD5(Hashes::MD5SUM); MD5.AddFD(Fd); - fileHash = (std::string)MD5.Result(); + fileHash = MD5.GetHashString(Hashes::MD5SUM).Hash; } else if (strcasecmp(Type.c_str(), "SHA1") == 0) { - SHA1Summation SHA1; + Hashes SHA1(Hashes::SHA1SUM); SHA1.AddFD(Fd); - fileHash = (std::string)SHA1.Result(); + fileHash = SHA1.GetHashString(Hashes::SHA1SUM).Hash; } else if (strcasecmp(Type.c_str(), "SHA256") == 0) { - SHA256Summation SHA256; + Hashes SHA256(Hashes::SHA256SUM); SHA256.AddFD(Fd); - fileHash = (std::string)SHA256.Result(); + fileHash = SHA256.GetHashString(Hashes::SHA256SUM).Hash; } else if (strcasecmp(Type.c_str(), "SHA512") == 0) { - SHA512Summation SHA512; + Hashes SHA512(Hashes::SHA512SUM); SHA512.AddFD(Fd); - fileHash = (std::string)SHA512.Result(); + fileHash = SHA512.GetHashString(Hashes::SHA512SUM).Hash; } else if (strcasecmp(Type.c_str(), "Checksum-FileSize") == 0) strprintf(fileHash, "%llu", Fd.FileSize()); @@ -169,10 +183,7 @@ bool HashStringList::usable() const /*{{{*/ if (forcedType.empty() == true) { // See if there is at least one usable hash - for (auto const &hs: list) - if (hs.usable()) - return true; - return false; + return std::any_of(list.begin(), list.end(), [](auto const &hs) { return hs.usable(); }); } return find(forcedType) != NULL; } @@ -289,50 +300,68 @@ bool HashStringList::operator!=(HashStringList const &other) const class PrivateHashes { public: unsigned long long FileSize; - unsigned int CalcHashes; + gcry_md_hd_t hd; + + void maybeInit() + { + + // Yikes, we got to initialize libgcrypt, or we get warnings. But we + // abstract away libgcrypt in Hashes from our users - they are not + // supposed to know what the hashing backend is, so we can't force + // them to init themselves as libgcrypt folks want us to. So this + // only leaves us with this option... + if (!gcry_control(GCRYCTL_INITIALIZATION_FINISHED_P)) + { + if (!gcry_check_version(nullptr)) + { + fprintf(stderr, "libgcrypt is too old (need %s, have %s)\n", + "nullptr", gcry_check_version(NULL)); + exit(2); + } + + gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0); + } + } + + explicit PrivateHashes(unsigned int const CalcHashes) : FileSize(0) + { + maybeInit(); + gcry_md_open(&hd, 0, 0); + for (auto & Algo : Algorithms) + { + if ((CalcHashes & Algo.ourAlgo) == Algo.ourAlgo) + gcry_md_enable(hd, Algo.gcryAlgo); + } + } - explicit PrivateHashes(unsigned int const CalcHashes) : FileSize(0), CalcHashes(CalcHashes) {} explicit PrivateHashes(HashStringList const &Hashes) : FileSize(0) { - unsigned int calcHashes = Hashes.usable() ? 0 : ~0; - if (Hashes.find("MD5Sum") != NULL) - calcHashes |= Hashes::MD5SUM; - if (Hashes.find("SHA1") != NULL) - calcHashes |= Hashes::SHA1SUM; - if (Hashes.find("SHA256") != NULL) - calcHashes |= Hashes::SHA256SUM; - if (Hashes.find("SHA512") != NULL) - calcHashes |= Hashes::SHA512SUM; - CalcHashes = calcHashes; + maybeInit(); + gcry_md_open(&hd, 0, 0); + for (auto & Algo : Algorithms) + { + if (not Hashes.usable() || Hashes.find(Algo.name) != NULL) + gcry_md_enable(hd, Algo.gcryAlgo); + } + } + ~PrivateHashes() + { + gcry_md_close(hd); } }; /*}}}*/ // Hashes::Add* - Add the contents of data or FD /*{{{*/ bool Hashes::Add(const unsigned char * const Data, unsigned long long const Size) { - if (Size == 0) - return true; - bool Res = true; -APT_IGNORE_DEPRECATED_PUSH - if ((d->CalcHashes & MD5SUM) == MD5SUM) - Res &= MD5.Add(Data, Size); - if ((d->CalcHashes & SHA1SUM) == SHA1SUM) - Res &= SHA1.Add(Data, Size); - if ((d->CalcHashes & SHA256SUM) == SHA256SUM) - Res &= SHA256.Add(Data, Size); - if ((d->CalcHashes & SHA512SUM) == SHA512SUM) - Res &= SHA512.Add(Data, Size); -APT_IGNORE_DEPRECATED_POP - d->FileSize += Size; - return Res; -} -bool Hashes::Add(const unsigned char * const Data, unsigned long long const Size, unsigned int const Hashes) -{ - d->CalcHashes = Hashes; - return Add(Data, Size); + if (Size != 0) + { + gcry_md_write(d->hd, Data, Size); + d->FileSize += Size; + } + return true; } bool Hashes::AddFD(int const Fd,unsigned long long Size) { - unsigned char Buf[64*64]; + unsigned char Buf[APT_BUFFER_SIZE]; bool const ToEOF = (Size == UntilEOF); while (Size != 0 || ToEOF) { @@ -349,14 +378,9 @@ bool Hashes::AddFD(int const Fd,unsigned long long Size) } return true; } -bool Hashes::AddFD(int const Fd,unsigned long long Size, unsigned int const Hashes) -{ - d->CalcHashes = Hashes; - return AddFD(Fd, Size); -} bool Hashes::AddFD(FileFd &Fd,unsigned long long Size) { - unsigned char Buf[64*64]; + unsigned char Buf[APT_BUFFER_SIZE]; bool const ToEOF = (Size == 0); while (Size != 0 || ToEOF) { @@ -377,32 +401,52 @@ bool Hashes::AddFD(FileFd &Fd,unsigned long long Size) return false; } return true; -} -bool Hashes::AddFD(FileFd &Fd,unsigned long long Size, unsigned int const Hashes) -{ - d->CalcHashes = Hashes; - return AddFD(Fd, Size); } /*}}}*/ + +static APT_PURE std::string HexDigest(gcry_md_hd_t hd, int algo) +{ + char Conv[16] = + {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', + 'c', 'd', 'e', 'f'}; + + auto Size = gcry_md_get_algo_dlen(algo); + char Result[((Size)*2) + 1]; + Result[(Size)*2] = 0; + + auto Sum = gcry_md_read(hd, algo); + + // Convert each char into two letters + size_t J = 0; + size_t I = 0; + for (; I != (Size)*2; J++, I += 2) + { + Result[I] = Conv[Sum[J] >> 4]; + Result[I + 1] = Conv[Sum[J] & 0xF]; + } + return std::string(Result); +}; + HashStringList Hashes::GetHashStringList() { HashStringList hashes; -APT_IGNORE_DEPRECATED_PUSH - if ((d->CalcHashes & MD5SUM) == MD5SUM) - hashes.push_back(HashString("MD5Sum", MD5.Result().Value())); - if ((d->CalcHashes & SHA1SUM) == SHA1SUM) - hashes.push_back(HashString("SHA1", SHA1.Result().Value())); - if ((d->CalcHashes & SHA256SUM) == SHA256SUM) - hashes.push_back(HashString("SHA256", SHA256.Result().Value())); - if ((d->CalcHashes & SHA512SUM) == SHA512SUM) - hashes.push_back(HashString("SHA512", SHA512.Result().Value())); -APT_IGNORE_DEPRECATED_POP + for (auto & Algo : Algorithms) + if (gcry_md_is_enabled(d->hd, Algo.gcryAlgo)) + hashes.push_back(HashString(Algo.name, HexDigest(d->hd, Algo.gcryAlgo))); hashes.FileSize(d->FileSize); + return hashes; } -APT_IGNORE_DEPRECATED_PUSH + +HashString Hashes::GetHashString(SupportedHashes hash) +{ + for (auto & Algo : Algorithms) + if (hash == Algo.ourAlgo) + return HashString(Algo.name, HexDigest(d->hd, Algo.gcryAlgo)); + + abort(); +} Hashes::Hashes() : d(new PrivateHashes(~0)) { } Hashes::Hashes(unsigned int const Hashes) : d(new PrivateHashes(Hashes)) {} Hashes::Hashes(HashStringList const &Hashes) : d(new PrivateHashes(Hashes)) {} Hashes::~Hashes() { delete d; } -APT_IGNORE_DEPRECATED_POP diff --git a/apt-pkg/contrib/hashes.h b/apt-pkg/contrib/hashes.h index 28bfd34..422c1e0 100644 --- a/apt-pkg/contrib/hashes.h +++ b/apt-pkg/contrib/hashes.h @@ -13,29 +13,18 @@ #define APTPKG_HASHES_H #include -#include -#include -#include #include #include - -#ifndef APT_8_CLEANER_HEADERS -using std::min; -using std::vector; -#endif -#ifndef APT_10_CLEANER_HEADERS -#include -#include #include -#endif + class FileFd; // helper class that contains hash function name // and hash -class HashString +class APT_PUBLIC HashString { protected: std::string Type; @@ -47,14 +36,12 @@ class HashString public: HashString(std::string Type, std::string Hash); - HashString(std::string StringedHashString); // init from str as "type:hash" + explicit HashString(std::string StringedHashString); // init from str as "type:hash" HashString(); // get hash type used std::string HashType() const { return Type; }; std::string HashValue() const { return Hash; }; - APT_DEPRECATED_MSG("method was const-ified") std::string HashType() { return Type; }; - APT_DEPRECATED_MSG("method was const-ified") std::string HashValue() { return Hash; }; // verify the given filename against the currently loaded hash bool VerifyFile(std::string filename) const; @@ -74,7 +61,7 @@ class HashString static APT_PURE const char** SupportedHashes(); }; -class HashStringList +class APT_PUBLIC HashStringList { public: /** find best hash if no specific one is requested @@ -165,11 +152,11 @@ class HashStringList HashStringList() {} // simplifying API-compatibility constructors - HashStringList(std::string const &hash) { + explicit HashStringList(std::string const &hash) { if (hash.empty() == false) list.push_back(HashString(hash)); } - HashStringList(char const * const hash) { + explicit HashStringList(char const * const hash) { if (hash != NULL && hash[0] != '\0') list.push_back(HashString(hash)); } @@ -179,37 +166,32 @@ class HashStringList }; class PrivateHashes; -class Hashes +class APT_PUBLIC Hashes { PrivateHashes * const d; - public: - /* those will disappear in the future as it is hard to add new ones this way. - * Use Add* to build the results and get them via GetHashStringList() instead */ - APT_DEPRECATED_MSG("Use general .Add* and .GetHashStringList methods instead of hardcoding specific hashes") MD5Summation MD5; - APT_DEPRECATED_MSG("Use general .Add* and .GetHashStringList methods instead of hardcoding specific hashes") SHA1Summation SHA1; - APT_DEPRECATED_MSG("Use general .Add* and .GetHashStringList methods instead of hardcoding specific hashes") SHA256Summation SHA256; - APT_DEPRECATED_MSG("Use general .Add* and .GetHashStringList methods instead of hardcoding specific hashes") SHA512Summation SHA512; - static const int UntilEOF = 0; bool Add(const unsigned char * const Data, unsigned long long const Size) APT_NONNULL(2); - APT_DEPRECATED_MSG("Construct accordingly instead of choosing hashes while adding") bool Add(const unsigned char * const Data, unsigned long long const Size, unsigned int const Hashes) APT_NONNULL(2); inline bool Add(const char * const Data) APT_NONNULL(2) {return Add(reinterpret_cast(Data),strlen(Data));}; + inline bool Add(const char *const Data, unsigned long long const Size) APT_NONNULL(2) + { + return Add(reinterpret_cast(Data), Size); + }; inline bool Add(const unsigned char * const Beg,const unsigned char * const End) APT_NONNULL(2,3) {return Add(Beg,End-Beg);}; enum SupportedHashes { MD5SUM = (1 << 0), SHA1SUM = (1 << 1), SHA256SUM = (1 << 2), SHA512SUM = (1 << 3) }; bool AddFD(int const Fd,unsigned long long Size = 0); - APT_DEPRECATED_MSG("Construct accordingly instead of choosing hashes while adding") bool AddFD(int const Fd,unsigned long long Size, unsigned int const Hashes); bool AddFD(FileFd &Fd,unsigned long long Size = 0); - APT_DEPRECATED_MSG("Construct accordingly instead of choosing hashes while adding") bool AddFD(FileFd &Fd,unsigned long long Size, unsigned int const Hashes); HashStringList GetHashStringList(); -APT_IGNORE_DEPRECATED_PUSH + /** Get a specific hash. It is an error to use a hash that was not hashes */ + HashString GetHashString(SupportedHashes hash); + /** create a Hashes object to calculate all supported hashes * * If ALL is too much, you can limit which Hashes are calculated @@ -217,34 +199,10 @@ APT_IGNORE_DEPRECATED_PUSH * which hashes to generate. */ Hashes(); /** @param Hashes bitflag composed of #SupportedHashes */ - Hashes(unsigned int const Hashes); + explicit Hashes(unsigned int const Hashes); /** @param Hashes is a list of hashes */ - Hashes(HashStringList const &Hashes); + explicit Hashes(HashStringList const &Hashes); virtual ~Hashes(); -APT_IGNORE_DEPRECATED_POP - - private: - APT_HIDDEN APT_PURE inline unsigned int boolsToFlag(bool const addMD5, bool const addSHA1, bool const addSHA256, bool const addSHA512) - { - unsigned int hashes = ~0; - if (addMD5 == false) hashes &= ~MD5SUM; - if (addSHA1 == false) hashes &= ~SHA1SUM; - if (addSHA256 == false) hashes &= ~SHA256SUM; - if (addSHA512 == false) hashes &= ~SHA512SUM; - return hashes; - } - - public: -APT_IGNORE_DEPRECATED_PUSH - APT_DEPRECATED_MSG("Construct accordingly instead of choosing hashes while adding") bool AddFD(int const Fd, unsigned long long Size, bool const addMD5, - bool const addSHA1, bool const addSHA256, bool const addSHA512) { - return AddFD(Fd, Size, boolsToFlag(addMD5, addSHA1, addSHA256, addSHA512)); - }; - APT_DEPRECATED_MSG("Construct accordingly instead of choosing hashes while adding") bool AddFD(FileFd &Fd, unsigned long long Size, bool const addMD5, - bool const addSHA1, bool const addSHA256, bool const addSHA512) { - return AddFD(Fd, Size, boolsToFlag(addMD5, addSHA1, addSHA256, addSHA512)); - }; -APT_IGNORE_DEPRECATED_POP }; #endif diff --git a/apt-pkg/contrib/hashsum.cc b/apt-pkg/contrib/hashsum.cc deleted file mode 100644 index e8e86e9..0000000 --- a/apt-pkg/contrib/hashsum.cc +++ /dev/null @@ -1,52 +0,0 @@ -// Cryptographic API Base -#include - -#include - -#include "hashsum_template.h" -#include -#include - -// Summation::AddFD - Add content of file into the checksum /*{{{*/ -// --------------------------------------------------------------------- -/* */ -bool SummationImplementation::AddFD(int const Fd, unsigned long long Size) { - unsigned char Buf[64 * 64]; - bool const ToEOF = (Size == 0); - while (Size != 0 || ToEOF) - { - unsigned long long n = sizeof(Buf); - if (!ToEOF) n = std::min(Size, n); - ssize_t const Res = read(Fd, Buf, n); - if (Res < 0 || (!ToEOF && Res != (ssize_t) n)) // error, or short read - return false; - if (ToEOF && Res == 0) // EOF - break; - Size -= Res; - Add(Buf,Res); - } - return true; -} -bool SummationImplementation::AddFD(FileFd &Fd, unsigned long long Size) { - unsigned char Buf[64 * 64]; - bool const ToEOF = (Size == 0); - while (Size != 0 || ToEOF) - { - unsigned long long n = sizeof(Buf); - if (!ToEOF) n = std::min(Size, n); - unsigned long long a = 0; - if (Fd.Read(Buf, n, &a) == false) // error - return false; - if (ToEOF == false) - { - if (a != n) // short read - return false; - } - else if (a == 0) // EOF - break; - Size -= a; - Add(Buf, a); - } - return true; -} - /*}}}*/ diff --git a/apt-pkg/contrib/hashsum_template.h b/apt-pkg/contrib/hashsum_template.h deleted file mode 100644 index f11fc2f..0000000 --- a/apt-pkg/contrib/hashsum_template.h +++ /dev/null @@ -1,141 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -/* ###################################################################### - - HashSumValueTemplate - Generic Storage for a hash value - - ##################################################################### */ - /*}}}*/ -#ifndef APTPKG_HASHSUM_TEMPLATE_H -#define APTPKG_HASHSUM_TEMPLATE_H - -#include -#include -#ifdef APT_PKG_EXPOSE_STRING_VIEW -#include -#endif - -#include - -#ifndef APT_10_CLEANER_HEADERS -#include -#include -#include -#endif -#ifndef APT_8_CLEANER_HEADERS -using std::string; -using std::min; -#endif - -class FileFd; - -template -class HashSumValue -{ - unsigned char Sum[N/8]; - - public: - - // Accessors - bool operator ==(const HashSumValue &rhs) const - { - return memcmp(Sum,rhs.Sum,sizeof(Sum)) == 0; - } - bool operator !=(const HashSumValue &rhs) const - { - return memcmp(Sum,rhs.Sum,sizeof(Sum)) != 0; - } - - std::string Value() const - { - char Conv[16] = - { '0','1','2','3','4','5','6','7','8','9','a','b', - 'c','d','e','f' - }; - char Result[((N/8)*2)+1]; - Result[(N/8)*2] = 0; - - // Convert each char into two letters - int J = 0; - int I = 0; - for (; I != (N/8)*2; J++,I += 2) - { - Result[I] = Conv[Sum[J] >> 4]; - Result[I + 1] = Conv[Sum[J] & 0xF]; - } - return std::string(Result); - } - - inline void Value(unsigned char S[N/8]) - { - for (int I = 0; I != sizeof(Sum); ++I) - S[I] = Sum[I]; - } - - inline operator std::string() const - { - return Value(); - } - -#ifdef APT_PKG_EXPOSE_STRING_VIEW - APT_HIDDEN bool Set(APT::StringView Str) - { - return Hex2Num(Str,Sum,sizeof(Sum)); - } -#else - bool Set(std::string Str) - { - return Hex2Num(Str,Sum,sizeof(Sum)); - } -#endif - inline void Set(unsigned char S[N/8]) - { - for (int I = 0; I != sizeof(Sum); ++I) - Sum[I] = S[I]; - } - - explicit HashSumValue(std::string const &Str) - { - memset(Sum,0,sizeof(Sum)); - Set(Str); - } -#ifdef APT_PKG_EXPOSE_STRING_VIEW - APT_HIDDEN explicit HashSumValue(APT::StringView const &Str) - { - memset(Sum,0,sizeof(Sum)); - Set(Str); - } - APT_HIDDEN explicit HashSumValue(const char *Str) - { - memset(Sum,0,sizeof(Sum)); - Set(Str); - } -#endif - HashSumValue() - { - memset(Sum,0,sizeof(Sum)); - } -}; - -class SummationImplementation -{ - public: - virtual bool Add(const unsigned char *inbuf, unsigned long long inlen) APT_NONNULL(2) = 0; - inline bool Add(const char *inbuf, unsigned long long const inlen) APT_NONNULL(2) - { return Add(reinterpret_cast(inbuf), inlen); } - - inline bool Add(const unsigned char *Data) APT_NONNULL(2) - { return Add(Data, strlen(reinterpret_cast(Data))); } - inline bool Add(const char *Data) APT_NONNULL(2) - { return Add(reinterpret_cast(Data), strlen(Data)); } - - inline bool Add(const unsigned char *Beg, const unsigned char *End) APT_NONNULL(2,3) - { return Add(Beg, End - Beg); } - inline bool Add(const char *Beg, const char *End) APT_NONNULL(2,3) - { return Add(reinterpret_cast(Beg), End - Beg); } - - bool AddFD(int Fd, unsigned long long Size = 0); - bool AddFD(FileFd &Fd, unsigned long long Size = 0); -}; - -#endif diff --git a/apt-pkg/contrib/macros.h b/apt-pkg/contrib/macros.h index 57d3f6c..f37eb58 100644 --- a/apt-pkg/contrib/macros.h +++ b/apt-pkg/contrib/macros.h @@ -13,40 +13,9 @@ #ifndef MACROS_H #define MACROS_H -// MIN_VAL(SINT16) will return -0x8000 and MAX_VAL(SINT16) = 0x7FFF -#define MIN_VAL(t) (((t)(-1) > 0) ? (t)( 0) : (t)(((1L<<(sizeof(t)*8-1)) ))) -#define MAX_VAL(t) (((t)(-1) > 0) ? (t)(-1) : (t)(((1L<<(sizeof(t)*8-1))-1))) - -// Min/Max functions -#if !defined(MIN) -#if defined(__HIGHC__) -#define MIN(x,y) _min(x,y) -#define MAX(x,y) _max(x,y) -#endif - -// GNU C++ has a min/max operator -#if defined(__GNUG__) -#define MIN(A,B) ((A) ? (B)) -#endif - -/* Templates tend to mess up existing code that uses min/max because of the - strict matching requirements */ -#if !defined(MIN) -#define MIN(A,B) ((A) < (B)?(A):(B)) -#define MAX(A,B) ((A) > (B)?(A):(B)) -#endif -#endif - -/* Bound functions, bound will return the value b within the limits a-c - bounv will change b so that it is within the limits of a-c. */ -#define _bound(a,b,c) MIN(c,MAX(b,a)) -#define _boundv(a,b,c) b = _bound(a,b,c) -#define ABS(a) (((a) < (0)) ?-(a) : (a)) - /* Useful count macro, use on an array of things and it will return the number of items in the array */ -#define _count(a) (sizeof(a)/sizeof(a[0])) +#define APT_ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) // Flag Macros #define FLAG(f) (1L << (f)) @@ -60,6 +29,7 @@ #define APT_GCC_VERSION 0 #endif +#ifdef APT_COMPILING_APT /* likely() and unlikely() can be used to mark boolean expressions as (not) likely true which will help the compiler to optimise */ #if APT_GCC_VERSION >= 0x0300 @@ -69,24 +39,25 @@ #define likely(x) (x) #define unlikely(x) (x) #endif +#endif #if APT_GCC_VERSION >= 0x0300 #define APT_DEPRECATED __attribute__ ((deprecated)) #define APT_DEPRECATED_MSG(X) __attribute__ ((deprecated(X))) // __attribute__((const)) is too dangerous for us, we end up using it wrongly - #define APT_CONST __attribute__((pure)) #define APT_PURE __attribute__((pure)) #define APT_NORETURN __attribute__((noreturn)) #define APT_PRINTF(n) __attribute__((format(printf, n, n + 1))) #define APT_WEAK __attribute__((weak)); + #define APT_UNUSED __attribute__((unused)) #else #define APT_DEPRECATED #define APT_DEPRECATED_MSG - #define APT_CONST #define APT_PURE #define APT_NORETURN #define APT_PRINTF(n) #define APT_WEAK + #define APT_UNUSED #endif #if APT_GCC_VERSION > 0x0302 @@ -116,26 +87,6 @@ #define APT_HOT #endif -#ifndef APT_10_CLEANER_HEADERS -#if APT_GCC_VERSION >= 0x0300 - #define __must_check __attribute__ ((warn_unused_result)) - #define __deprecated __attribute__ ((deprecated)) - #define __attrib_const __attribute__ ((__const__)) - #define __like_printf(n) __attribute__((format(printf, n, n + 1))) -#else - #define __must_check /* no warn_unused_result */ - #define __deprecated /* no deprecated */ - #define __attrib_const /* no const attribute */ - #define __like_printf(n) /* no like-printf */ -#endif -#if APT_GCC_VERSION >= 0x0403 - #define __cold __attribute__ ((__cold__)) - #define __hot __attribute__ ((__hot__)) -#else - #define __cold /* no cold marker */ - #define __hot /* no hot marker */ -#endif -#endif #if __GNUC__ >= 4 #define APT_IGNORE_DEPRECATED_PUSH \ @@ -165,9 +116,12 @@ // reverse-dependencies of libapt-pkg against the new SONAME. // Non-ABI-Breaks should only increase RELEASE number. // See also buildlib/libversion.mak -#define APT_PKG_MAJOR 5 +#define APT_PKG_MAJOR 6 #define APT_PKG_MINOR 0 -#define APT_PKG_RELEASE 2 +#define APT_PKG_RELEASE 0 #define APT_PKG_ABI ((APT_PKG_MAJOR * 100) + APT_PKG_MINOR) +/* Should be a multiple of the common page size (4096) */ +static constexpr unsigned long long APT_BUFFER_SIZE = 64 * 1024; + #endif diff --git a/apt-pkg/contrib/md5.cc b/apt-pkg/contrib/md5.cc deleted file mode 100644 index c3b5299..0000000 --- a/apt-pkg/contrib/md5.cc +++ /dev/null @@ -1,279 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -/* ###################################################################### - - MD5Sum - MD5 Message Digest Algorithm. - - This code implements the MD5 message-digest algorithm. The algorithm is - due to Ron Rivest. This code was written by Colin Plumb in 1993, no - copyright is claimed. This code is in the public domain; do with it what - you wish. - - Equivalent code is available from RSA Data Security, Inc. This code has - been tested against that, and is equivalent, except that you don't need to - include two pages of legalese with every copy. - - To compute the message digest of a chunk of bytes, instantiate the class, - and repeatedly call one of the Add() members. When finished the Result - method will return the Hash and finalize the value. - - Changed so as no longer to depend on Colin Plumb's `usual.h' header - definitions; now uses stuff from dpkg's config.h. - - Ian Jackson . - - Changed into a C++ interface and made work with APT's config.h. - - Jason Gunthorpe - - Still in the public domain. - - The classes use arrays of char that are a specific size. We cast those - arrays to uint8_t's and go from there. This allows us to advoid using - the uncommon inttypes.h in a public header or internally newing memory. - In theory if C9x becomes nicely accepted - - ##################################################################### */ - /*}}}*/ -// Include Files /*{{{*/ -#include - -#include - -#include -#include - /*}}}*/ - -// byteSwap - Swap bytes in a buffer /*{{{*/ -// --------------------------------------------------------------------- -/* Swap n 32 bit longs in given buffer */ -#ifdef WORDS_BIGENDIAN -static void byteSwap(uint32_t *buf, unsigned words) -{ - uint8_t *p = (uint8_t *)buf; - - do - { - *buf++ = (uint32_t)((unsigned)p[3] << 8 | p[2]) << 16 | - ((unsigned)p[1] << 8 | p[0]); - p += 4; - } while (--words); -} -#else -#define byteSwap(buf,words) -#endif - /*}}}*/ -// MD5Transform - Alters an existing MD5 hash /*{{{*/ -// --------------------------------------------------------------------- -/* The core of the MD5 algorithm, this alters an existing MD5 hash to - reflect the addition of 16 longwords of new data. Add blocks - the data and converts bytes into longwords for this routine. */ - -// The four core functions - F1 is optimized somewhat -// #define F1(x, y, z) (x & y | ~x & z) -#define F1(x, y, z) (z ^ (x & (y ^ z))) -#define F2(x, y, z) F1(z, x, y) -#define F3(x, y, z) (x ^ y ^ z) -#define F4(x, y, z) (y ^ (x | ~z)) - -// This is the central step in the MD5 algorithm. -#define MD5STEP(f,w,x,y,z,in,s) \ - (w += f(x,y,z) + in, w = (w<>(32-s)) + x) - -static void MD5Transform(uint32_t buf[4], uint32_t const in[16]) -{ - uint32_t a, b, c, d; - - a = buf[0]; - b = buf[1]; - c = buf[2]; - d = buf[3]; - - MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); - MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); - MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); - MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); - MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); - MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); - MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); - MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); - MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); - MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); - MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); - MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); - MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); - MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); - MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); - MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); - - MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); - MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); - MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); - MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); - MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); - MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); - MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); - MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); - MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); - MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); - MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); - MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); - MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); - MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); - MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); - MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); - - MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); - MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); - MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); - MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); - MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); - MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); - MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); - MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); - MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); - MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); - MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); - MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); - MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); - MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); - MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); - MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); - - MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); - MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); - MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); - MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); - MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); - MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); - MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); - MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); - MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); - MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); - MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); - MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); - MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); - MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); - MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); - MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); - - buf[0] += a; - buf[1] += b; - buf[2] += c; - buf[3] += d; -} - /*}}}*/ -// MD5Summation::MD5Summation - Initialize the summer /*{{{*/ -// --------------------------------------------------------------------- -/* This assigns the deep magic initial values */ -MD5Summation::MD5Summation() -{ - uint32_t *buf = (uint32_t *)Buf; - uint32_t *bytes = (uint32_t *)Bytes; - - buf[0] = 0x67452301; - buf[1] = 0xefcdab89; - buf[2] = 0x98badcfe; - buf[3] = 0x10325476; - - bytes[0] = 0; - bytes[1] = 0; - Done = false; -} - /*}}}*/ -// MD5Summation::Add - 'Add' a data set to the hash /*{{{*/ -// --------------------------------------------------------------------- -/* */ -bool MD5Summation::Add(const unsigned char *data,unsigned long long len) -{ - if (Done == true) - return false; - if (len == 0) - return true; - - uint32_t *buf = (uint32_t *)Buf; - uint32_t *bytes = (uint32_t *)Bytes; - uint32_t *in = (uint32_t *)In; - - // Update byte count and carry (this could be done with a long long?) - uint32_t t = bytes[0]; - if ((bytes[0] = t + len) < t) - bytes[1]++; - - // Space available (at least 1) - t = 64 - (t & 0x3f); - if (t > len) - { - memcpy((unsigned char *)in + 64 - t,data,len); - return true; - } - - // First chunk is an odd size - memcpy((unsigned char *)in + 64 - t,data,t); - byteSwap(in, 16); - MD5Transform(buf,in); - data += t; - len -= t; - - // Process data in 64-byte chunks - while (len >= 64) - { - memcpy(in,data,64); - byteSwap(in,16); - MD5Transform(buf,in); - data += 64; - len -= 64; - } - - // Handle any remaining bytes of data. - memcpy(in,data,len); - - return true; -} - /*}}}*/ -// MD5Summation::Result - Returns the value of the sum /*{{{*/ -// --------------------------------------------------------------------- -/* Because this must add in the last bytes of the series it prevents anyone - from calling add after. */ -MD5SumValue MD5Summation::Result() -{ - uint32_t *buf = (uint32_t *)Buf; - uint32_t *bytes = (uint32_t *)Bytes; - uint32_t *in = (uint32_t *)In; - - if (Done == false) - { - // Number of bytes in In - int count = bytes[0] & 0x3f; - unsigned char *p = (unsigned char *)in + count; - - // Set the first char of padding to 0x80. There is always room. - *p++ = 0x80; - - // Bytes of padding needed to make 56 bytes (-8..55) - count = 56 - 1 - count; - - // Padding forces an extra block - if (count < 0) - { - memset(p,0,count + 8); - byteSwap(in, 16); - MD5Transform(buf,in); - p = (unsigned char *)in; - count = 56; - } - - memset(p, 0, count); - byteSwap(in, 14); - - // Append length in bits and transform - in[14] = bytes[0] << 3; - in[15] = bytes[1] << 3 | bytes[0] >> 29; - MD5Transform(buf,in); - byteSwap(buf,4); - Done = true; - } - - MD5SumValue V; - V.Set((unsigned char *)buf); - return V; -} - /*}}}*/ diff --git a/apt-pkg/contrib/md5.h b/apt-pkg/contrib/md5.h deleted file mode 100644 index 38b6c68..0000000 --- a/apt-pkg/contrib/md5.h +++ /dev/null @@ -1,58 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -/* ###################################################################### - - MD5SumValue - Storage for a MD5Sum - MD5Summation - MD5 Message Digest Algorithm. - - This is a C++ interface to a set of MD5Sum functions. The class can - store a MD5Sum in 16 bytes of memory. - - A MD5Sum is used to generate a (hopefully) unique 16 byte number for a - block of data. This can be used to guard against corruption of a file. - MD5 should not be used for tamper protection, use SHA or something more - secure. - - There are two classes because computing a MD5 is not a continual - operation unless 64 byte blocks are used. Also the summation requires an - extra 18*4 bytes to operate. - - ##################################################################### */ - /*}}}*/ -#ifndef APTPKG_MD5_H -#define APTPKG_MD5_H - -#include - -#include "hashsum_template.h" - -#ifndef APT_10_CLEANER_HEADERS -#include -#include -#include -#endif -#ifndef APT_8_CLEANER_HEADERS -using std::string; -using std::min; -#endif - -typedef HashSumValue<128> MD5SumValue; - -class MD5Summation : public SummationImplementation -{ - uint32_t Buf[4]; - unsigned char Bytes[2*4]; - unsigned char In[16*4]; - bool Done; - - public: - - bool Add(const unsigned char *inbuf, unsigned long long inlen) APT_OVERRIDE APT_NONNULL(2); - using SummationImplementation::Add; - - MD5SumValue Result(); - - MD5Summation(); -}; - -#endif diff --git a/apt-pkg/contrib/mmap.cc b/apt-pkg/contrib/mmap.cc index ee6a21c..0204911 100644 --- a/apt-pkg/contrib/mmap.cc +++ b/apt-pkg/contrib/mmap.cc @@ -357,25 +357,26 @@ unsigned long DynamicMMap::Allocate(unsigned long ItemSize) // Look for a matching pool entry Pool *I; - Pool *Empty = 0; for (I = Pools; I != Pools + PoolCount; ++I) { - if (I->ItemSize == 0) - Empty = I; if (I->ItemSize == ItemSize) break; } - // No pool is allocated, use an unallocated one - if (I == Pools + PoolCount) + // No pool is allocated, use an unallocated one. + if (unlikely(I == Pools + PoolCount)) { + for (I = Pools; I != Pools + PoolCount; ++I) + { + if (I->ItemSize == 0) + break; + } // Woops, we ran out, the calling code should allocate more. - if (Empty == 0) + if (I == Pools + PoolCount) { _error->Error("Ran out of allocation pools"); return 0; } - - I = Empty; + I->ItemSize = ItemSize; I->Count = 0; } diff --git a/apt-pkg/contrib/mmap.h b/apt-pkg/contrib/mmap.h index 63d54d2..76db7b5 100644 --- a/apt-pkg/contrib/mmap.h +++ b/apt-pkg/contrib/mmap.h @@ -29,10 +29,6 @@ #include -#ifndef APT_8_CLEANER_HEADERS -#include -using std::string; -#endif class FileFd; @@ -74,7 +70,7 @@ class MMap bool Sync(unsigned long Start,unsigned long Stop); MMap(FileFd &F,unsigned long Flags); - MMap(unsigned long Flags); + explicit MMap(unsigned long Flags); virtual ~MMap(); }; diff --git a/apt-pkg/contrib/netrc.cc b/apt-pkg/contrib/netrc.cc index 48114ba..a6f408c 100644 --- a/apt-pkg/contrib/netrc.cc +++ b/apt-pkg/contrib/netrc.cc @@ -11,6 +11,7 @@ ##################################################################### */ /*}}}*/ #include +#include #include #include @@ -47,6 +48,8 @@ bool MaybeAddAuth(FileFd &NetRCFile, URI &Uri) std::string line; while (NetRCFile.Eof() == false || line.empty() == false) { + bool protocolSpecified = false; + if (line.empty()) { if (NetRCFile.ReadLine(line) == false) @@ -72,6 +75,20 @@ bool MaybeAddAuth(FileFd &NetRCFile, URI &Uri) active_token = MACHINE; break; case MACHINE: + // If token contains a protocol: Check it first, and strip it away if + // it matches. If it does not match, ignore this stanza. + // If there is no protocol, only allow https protocols. + protocolSpecified = token.find("://") != std::string::npos; + if (protocolSpecified) + { + if (not APT::String::Startswith(token, Uri.Access + "://")) + { + active_token = NO; + break; + } + token.erase(0, Uri.Access.length() + 3); + } + if (token.find('/') == std::string::npos) { if (Uri.Port != 0 && Uri.Host == token) @@ -88,6 +105,15 @@ bool MaybeAddAuth(FileFd &NetRCFile, URI &Uri) else active_token = NO; } + + if (active_token == GOOD_MACHINE && not protocolSpecified) + { + if (Uri.Access != "https" && Uri.Access != "tor+https") + { + _error->Warning(_("%s: Credentials for %s match, but the protocol is not encrypted. Annotate with %s:// to use."), NetRCFile.Name().c_str(), token.c_str(), Uri.Access.c_str()); + active_token = NO; + } + } break; case GOOD_MACHINE: if (token == "login") @@ -141,55 +167,3 @@ bool MaybeAddAuth(FileFd &NetRCFile, URI &Uri) } return false; } - -void maybe_add_auth(URI &Uri, std::string NetRCFile) -{ - if (FileExists(NetRCFile) == false) - return; - FileFd fd; - if (fd.Open(NetRCFile, FileFd::ReadOnly)) - MaybeAddAuth(fd, Uri); -} - -/* Check if we are authorized. */ -bool IsAuthorized(pkgCache::PkgFileIterator const I, std::vector> &authconfs) -{ - if (authconfs.empty()) - { - _error->PushToStack(); - auto const netrc = _config->FindFile("Dir::Etc::netrc"); - if (not netrc.empty()) - { - authconfs.emplace_back(new FileFd()); - authconfs.back()->Open(netrc, FileFd::ReadOnly); - } - - auto const netrcparts = _config->FindDir("Dir::Etc::netrcparts"); - if (not netrcparts.empty()) - { - for (auto const &netrc : GetListOfFilesInDir(netrcparts, "conf", true, true)) - { - authconfs.emplace_back(new FileFd()); - authconfs.back()->Open(netrc, FileFd::ReadOnly); - } - } - _error->RevertToStack(); - } - - // FIXME: Use the full base url - URI uri(std::string("http://") + I.Site() + "/"); - for (auto &authconf : authconfs) - { - if (not authconf->IsOpen()) - continue; - if (not authconf->Seek(0)) - continue; - - MaybeAddAuth(*authconf, uri); - - if (not uri.User.empty() || not uri.Password.empty()) - return true; - } - - return false; -} diff --git a/apt-pkg/contrib/netrc.h b/apt-pkg/contrib/netrc.h index 80d95ac..4443979 100644 --- a/apt-pkg/contrib/netrc.h +++ b/apt-pkg/contrib/netrc.h @@ -13,27 +13,14 @@ #ifndef NETRC_H #define NETRC_H -#include #include -#include #include -#include -#ifndef APT_8_CLEANER_HEADERS -#include -#endif -#ifndef APT_15_CLEANER_HEADERS -#define DOT_CHAR "." -#define DIR_CHAR "/" -#endif class URI; class FileFd; -APT_DEPRECATED_MSG("Use FileFd-based MaybeAddAuth instead") -void maybe_add_auth(URI &Uri, std::string NetRCFile); -bool MaybeAddAuth(FileFd &NetRCFile, URI &Uri); -bool IsAuthorized(pkgCache::PkgFileIterator const I, std::vector> &authconfs) APT_HIDDEN; +APT_PUBLIC bool MaybeAddAuth(FileFd &NetRCFile, URI &Uri); #endif diff --git a/apt-pkg/contrib/progress.cc b/apt-pkg/contrib/progress.cc index 806bd47..03f88d4 100644 --- a/apt-pkg/contrib/progress.cc +++ b/apt-pkg/contrib/progress.cc @@ -91,7 +91,10 @@ void OpProgress::SubProgress(unsigned long long SubTotal,const string &Op, an update the display would be swamped and the system much slower. This provides an upper bound on the update rate. */ bool OpProgress::CheckChange(float Interval) -{ +{ + // For absolute progress, we assume every call is relevant. + if (_config->FindB("APT::Internal::OpProgress::Absolute", false)) + return true; // New major progress indication if (Op != LastOp) { @@ -123,7 +126,7 @@ bool OpProgress::CheckChange(float Interval) std::chrono::duration Delta = std::chrono::seconds(NowTime.tv_sec - LastTime.tv_sec) + - std::chrono::microseconds(NowTime.tv_sec - LastTime.tv_usec); + std::chrono::microseconds(NowTime.tv_usec - LastTime.tv_usec); if (Delta.count() < Interval) return false; @@ -199,9 +202,14 @@ void OpTextProgress::Update() Write(S); cout << endl; } - - // Print the spinner - snprintf(S,sizeof(S),_("%c%s... %u%%"),'\r',Op.c_str(),(unsigned int)Percent); + + // Print the spinner. Absolute progress shows us a time progress. + if (_config->FindB("APT::Internal::OpProgress::Absolute", false) && Total != -1llu) + snprintf(S, sizeof(S), _("%c%s... %llu/%llus"), '\r', Op.c_str(), Current, Total); + else if (_config->FindB("APT::Internal::OpProgress::Absolute", false)) + snprintf(S, sizeof(S), _("%c%s... %llus"), '\r', Op.c_str(), Current); + else + snprintf(S, sizeof(S), _("%c%s... %u%%"), '\r', Op.c_str(), (unsigned int)Percent); Write(S); OldOp = Op; diff --git a/apt-pkg/contrib/progress.h b/apt-pkg/contrib/progress.h index 4406a38..d6a698a 100644 --- a/apt-pkg/contrib/progress.h +++ b/apt-pkg/contrib/progress.h @@ -24,13 +24,11 @@ #include #include -#ifndef APT_8_CLEANER_HEADERS -using std::string; -#endif class Configuration; -class OpProgress +class APT_PUBLIC OpProgress { + friend class OpTextProgress; unsigned long long Current; unsigned long long Total; unsigned long long Size; @@ -65,7 +63,7 @@ class OpProgress virtual ~OpProgress() {}; }; -class OpTextProgress : public OpProgress +class APT_PUBLIC OpTextProgress : public OpProgress { protected: @@ -80,9 +78,9 @@ class OpTextProgress : public OpProgress virtual void Done() APT_OVERRIDE; - OpTextProgress(bool NoUpdate = false) : NoUpdate(NoUpdate), + explicit OpTextProgress(bool NoUpdate = false) : NoUpdate(NoUpdate), NoDisplay(false), LastLen(0) {}; - OpTextProgress(Configuration &Config); + explicit OpTextProgress(Configuration &Config); virtual ~OpTextProgress() {Done();}; }; diff --git a/apt-pkg/contrib/proxy.h b/apt-pkg/contrib/proxy.h index 2cbcd07..f6d70ea 100644 --- a/apt-pkg/contrib/proxy.h +++ b/apt-pkg/contrib/proxy.h @@ -10,7 +10,7 @@ #define PKGLIB_PROXY_H class URI; -bool AutoDetectProxy(URI &URL); +APT_PUBLIC bool AutoDetectProxy(URI &URL); #endif diff --git a/apt-pkg/contrib/sha1.cc b/apt-pkg/contrib/sha1.cc deleted file mode 100644 index bf0b9d6..0000000 --- a/apt-pkg/contrib/sha1.cc +++ /dev/null @@ -1,273 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -/* ###################################################################### - - SHA1 - SHA-1 Secure Hash Algorithm. - - This file is a Public Domain wrapper for the Public Domain SHA1 - calculation code that is at it's end. - - The algorithm was originally implemented by - Steve Reid and later modified by - James H. Brown . - - Modifications for APT were done by Alfredo K. Kojima and Jason - Gunthorpe. - - Still in the public domain. - - Test Vectors (from FIPS PUB 180-1) - "abc" - A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1 - A million repetitions of "a" - 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F - - ##################################################################### - */ - /*}}} */ -// Include Files /*{{{*/ -#include - -#include - -#include -#include - /*}}}*/ - -// SHA1Transform - Alters an existing SHA-1 hash /*{{{*/ -// --------------------------------------------------------------------- -/* The core of the SHA-1 algorithm. This alters an existing SHA-1 hash to - reflect the addition of 16 longwords of new data. Other routines convert - incoming stream data into 16 long word chunks for this routine */ - -#define rol(value,bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) - -/* blk0() and blk() perform the initial expand. */ -/* I got the idea of expanding during the round function from SSLeay */ -#ifndef WORDS_BIGENDIAN -#define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \ - |(rol(block->l[i],8)&0x00FF00FF)) -#else -#define blk0(i) block->l[i] -#endif -#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \ - ^block->l[(i+2)&15]^block->l[i&15],1)) - -/* (R0+R1),R2,R3,R4 are the different operations used in SHA1 */ -#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30); -#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30); -#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30); -#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30); -#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30); - -static void SHA1Transform(uint32_t state[5],uint8_t const buffer[64]) -{ - uint32_t a,b,c,d,e; - typedef union - { - uint8_t c[64]; - uint32_t l[16]; - } - CHAR64LONG16; - CHAR64LONG16 workspace, *block; - - block = &workspace; - memcpy(block,buffer,sizeof(workspace)); - - /* Copy context->state[] to working vars */ - a = state[0]; - b = state[1]; - c = state[2]; - d = state[3]; - e = state[4]; - - /* 4 rounds of 20 operations each. Loop unrolled. */ - R0(a,b,c,d,e,0); - R0(e,a,b,c,d,1); - R0(d,e,a,b,c,2); - R0(c,d,e,a,b,3); - R0(b,c,d,e,a,4); - R0(a,b,c,d,e,5); - R0(e,a,b,c,d,6); - R0(d,e,a,b,c,7); - R0(c,d,e,a,b,8); - R0(b,c,d,e,a,9); - R0(a,b,c,d,e,10); - R0(e,a,b,c,d,11); - R0(d,e,a,b,c,12); - R0(c,d,e,a,b,13); - R0(b,c,d,e,a,14); - R0(a,b,c,d,e,15); - R1(e,a,b,c,d,16); - R1(d,e,a,b,c,17); - R1(c,d,e,a,b,18); - R1(b,c,d,e,a,19); - R2(a,b,c,d,e,20); - R2(e,a,b,c,d,21); - R2(d,e,a,b,c,22); - R2(c,d,e,a,b,23); - R2(b,c,d,e,a,24); - R2(a,b,c,d,e,25); - R2(e,a,b,c,d,26); - R2(d,e,a,b,c,27); - R2(c,d,e,a,b,28); - R2(b,c,d,e,a,29); - R2(a,b,c,d,e,30); - R2(e,a,b,c,d,31); - R2(d,e,a,b,c,32); - R2(c,d,e,a,b,33); - R2(b,c,d,e,a,34); - R2(a,b,c,d,e,35); - R2(e,a,b,c,d,36); - R2(d,e,a,b,c,37); - R2(c,d,e,a,b,38); - R2(b,c,d,e,a,39); - R3(a,b,c,d,e,40); - R3(e,a,b,c,d,41); - R3(d,e,a,b,c,42); - R3(c,d,e,a,b,43); - R3(b,c,d,e,a,44); - R3(a,b,c,d,e,45); - R3(e,a,b,c,d,46); - R3(d,e,a,b,c,47); - R3(c,d,e,a,b,48); - R3(b,c,d,e,a,49); - R3(a,b,c,d,e,50); - R3(e,a,b,c,d,51); - R3(d,e,a,b,c,52); - R3(c,d,e,a,b,53); - R3(b,c,d,e,a,54); - R3(a,b,c,d,e,55); - R3(e,a,b,c,d,56); - R3(d,e,a,b,c,57); - R3(c,d,e,a,b,58); - R3(b,c,d,e,a,59); - R4(a,b,c,d,e,60); - R4(e,a,b,c,d,61); - R4(d,e,a,b,c,62); - R4(c,d,e,a,b,63); - R4(b,c,d,e,a,64); - R4(a,b,c,d,e,65); - R4(e,a,b,c,d,66); - R4(d,e,a,b,c,67); - R4(c,d,e,a,b,68); - R4(b,c,d,e,a,69); - R4(a,b,c,d,e,70); - R4(e,a,b,c,d,71); - R4(d,e,a,b,c,72); - R4(c,d,e,a,b,73); - R4(b,c,d,e,a,74); - R4(a,b,c,d,e,75); - R4(e,a,b,c,d,76); - R4(d,e,a,b,c,77); - R4(c,d,e,a,b,78); - R4(b,c,d,e,a,79); - - /* Add the working vars back into context.state[] */ - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - state[4] += e; -} - /*}}}*/ - -// SHA1Summation::SHA1Summation - Constructor /*{{{*/ -// --------------------------------------------------------------------- -/* */ -SHA1Summation::SHA1Summation() -{ - uint32_t *state = (uint32_t *)State; - uint32_t *count = (uint32_t *)Count; - - /* SHA1 initialization constants */ - state[0] = 0x67452301; - state[1] = 0xEFCDAB89; - state[2] = 0x98BADCFE; - state[3] = 0x10325476; - state[4] = 0xC3D2E1F0; - count[0] = 0; - count[1] = 0; - Done = false; -} - /*}}}*/ -// SHA1Summation::Result - Return checksum value /*{{{*/ -// --------------------------------------------------------------------- -/* Add() may not be called after this */ -SHA1SumValue SHA1Summation::Result() -{ - uint32_t *state = (uint32_t *)State; - uint32_t *count = (uint32_t *)Count; - - // Apply the padding - if (Done == false) - { - unsigned char finalcount[8]; - - for (unsigned i = 0; i < 8; i++) - { - // Endian independent - finalcount[i] = (unsigned char) ((count[(i >= 4 ? 0 : 1)] - >> ((3 - (i & 3)) * 8)) & 255); - } - - Add((unsigned char *) "\200",1); - while ((count[0] & 504) != 448) - Add((unsigned char *) "\0",1); - - Add(finalcount,8); /* Should cause a SHA1Transform() */ - - } - - Done = true; - - // Transfer over the result - SHA1SumValue Value; - unsigned char res[20]; - for (unsigned i = 0; i < 20; i++) - { - res[i] = (unsigned char) - ((state[i >> 2] >> ((3 - (i & 3)) * 8)) & 255); - } - Value.Set(res); - return Value; -} - /*}}}*/ -// SHA1Summation::Add - Adds content of buffer into the checksum /*{{{*/ -// --------------------------------------------------------------------- -/* May not be called after Result() is called */ -bool SHA1Summation::Add(const unsigned char *data,unsigned long long len) -{ - if (Done) - return false; - if (len == 0) - return true; - - uint32_t *state = (uint32_t *)State; - uint32_t *count = (uint32_t *)Count; - uint8_t *buffer = (uint8_t *)Buffer; - uint32_t i,j; - - j = (count[0] >> 3) & 63; - if ((count[0] += len << 3) < (len << 3)) - count[1]++; - count[1] += (len >> 29); - if ((j + len) > 63) - { - memcpy(&buffer[j],data,(i = 64 - j)); - SHA1Transform(state,buffer); - for (; i + 63 < len; i += 64) - { - SHA1Transform(state,&data[i]); - } - j = 0; - } - else - i = 0; - memcpy(&buffer[j],&data[i],len - i); - - return true; -} - /*}}}*/ diff --git a/apt-pkg/contrib/sha1.h b/apt-pkg/contrib/sha1.h deleted file mode 100644 index dffb950..0000000 --- a/apt-pkg/contrib/sha1.h +++ /dev/null @@ -1,47 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -/* ###################################################################### - - SHA1SumValue - Storage for a SHA-1 hash. - SHA1Summation - SHA-1 Secure Hash Algorithm. - - This is a C++ interface to a set of SHA1Sum functions, that mirrors - the equivalent MD5 classes. - - ##################################################################### */ - /*}}}*/ -#ifndef APTPKG_SHA1_H -#define APTPKG_SHA1_H - -#include "hashsum_template.h" - -#ifndef APT_10_CLEANER_HEADERS -#include -#include -#include -#endif -#ifndef APT_8_CLEANER_HEADERS -using std::string; -using std::min; -#endif - -typedef HashSumValue<160> SHA1SumValue; - -class SHA1Summation : public SummationImplementation -{ - /* assumes 64-bit alignment just in case */ - unsigned char Buffer[64] __attribute__((aligned(8))); - unsigned char State[5*4] __attribute__((aligned(8))); - unsigned char Count[2*4] __attribute__((aligned(8))); - bool Done; - - public: - bool Add(const unsigned char *inbuf, unsigned long long inlen) APT_OVERRIDE APT_NONNULL(2); - using SummationImplementation::Add; - - SHA1SumValue Result(); - - SHA1Summation(); -}; - -#endif diff --git a/apt-pkg/contrib/sha2.h b/apt-pkg/contrib/sha2.h deleted file mode 100644 index e1a8c6c..0000000 --- a/apt-pkg/contrib/sha2.h +++ /dev/null @@ -1,108 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -/* ###################################################################### - - SHA{512,256}SumValue - Storage for a SHA-{512,256} hash. - SHA{512,256}Summation - SHA-{512,256} Secure Hash Algorithm. - - This is a C++ interface to a set of SHA{512,256}Sum functions, that mirrors - the equivalent MD5 & SHA1 classes. - - ##################################################################### */ - /*}}}*/ -#ifndef APTPKG_SHA2_H -#define APTPKG_SHA2_H - -#include - -#include "hashsum_template.h" -#include "sha2_internal.h" - -#ifndef APT_10_CLEANER_HEADERS -#include -#include -#include -#endif - - -typedef HashSumValue<512> SHA512SumValue; -typedef HashSumValue<256> SHA256SumValue; - -class SHA2SummationBase : public SummationImplementation -{ - protected: - bool Done; - public: - bool Add(const unsigned char *inbuf, unsigned long long len) APT_OVERRIDE APT_NONNULL(2) = 0; - - void Result(); -}; - -class SHA256Summation : public SHA2SummationBase -{ - SHA256_CTX ctx; - unsigned char Sum[32]; - - public: - bool Add(const unsigned char *inbuf, unsigned long long len) APT_OVERRIDE APT_NONNULL(2) - { - if (Done) - return false; - SHA256_Update(&ctx, inbuf, len); - return true; - }; - using SummationImplementation::Add; - - SHA256SumValue Result() - { - if (!Done) { - SHA256_Final(Sum, &ctx); - Done = true; - } - SHA256SumValue res; - res.Set(Sum); - return res; - }; - SHA256Summation() - { - SHA256_Init(&ctx); - Done = false; - memset(&Sum, 0, sizeof(Sum)); - }; -}; - -class SHA512Summation : public SHA2SummationBase -{ - SHA512_CTX ctx; - unsigned char Sum[64]; - - public: - bool Add(const unsigned char *inbuf, unsigned long long len) APT_OVERRIDE APT_NONNULL(2) - { - if (Done) - return false; - SHA512_Update(&ctx, inbuf, len); - return true; - }; - using SummationImplementation::Add; - - SHA512SumValue Result() - { - if (!Done) { - SHA512_Final(Sum, &ctx); - Done = true; - } - SHA512SumValue res; - res.Set(Sum); - return res; - }; - SHA512Summation() - { - SHA512_Init(&ctx); - Done = false; - memset(&Sum, 0, sizeof(Sum)); - }; -}; - - -#endif diff --git a/apt-pkg/contrib/sha256.h b/apt-pkg/contrib/sha256.h deleted file mode 100644 index 15146c9..0000000 --- a/apt-pkg/contrib/sha256.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef APTPKG_SHA256_H -#define APTPKG_SHA256_H - -#include "sha2.h" - -#warning "This header is deprecated, please include sha2.h instead" - -#endif diff --git a/apt-pkg/contrib/sha2_internal.cc b/apt-pkg/contrib/sha2_internal.cc deleted file mode 100644 index 92a4a86..0000000 --- a/apt-pkg/contrib/sha2_internal.cc +++ /dev/null @@ -1,1089 +0,0 @@ -/* - * FILE: sha2.c - * AUTHOR: Aaron D. Gifford - http://www.aarongifford.com/ - * - * Copyright (c) 2000-2001, Aaron D. Gifford - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the names of contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ -#include - -#include "sha2_internal.h" -#include /* assert() */ -#include -#include /* memcpy()/memset() or bcopy()/bzero() */ - -/* - * ASSERT NOTE: - * Some sanity checking code is included using assert(). On my FreeBSD - * system, this additional code can be removed by compiling with NDEBUG - * defined. Check your own systems manpage on assert() to see how to - * compile WITHOUT the sanity checking code on your system. - * - * UNROLLED TRANSFORM LOOP NOTE: - * You can define SHA2_UNROLL_TRANSFORM to use the unrolled transform - * loop version for the hash transform rounds (defined using macros - * later in this file). Either define on the command line, for example: - * - * cc -DSHA2_UNROLL_TRANSFORM -o sha2 sha2.c sha2prog.c - * - * or define below: - * - * #define SHA2_UNROLL_TRANSFORM - * - */ - - -/*** SHA-256/384/512 Machine Architecture Definitions *****************/ -/* - * BYTE_ORDER NOTE: - * - * Please make sure that your system defines BYTE_ORDER. If your - * architecture is little-endian, make sure it also defines - * LITTLE_ENDIAN and that the two (BYTE_ORDER and LITTLE_ENDIAN) are - * equivalent. - * - * If your system does not define the above, then you can do so by - * hand like this: - * - * #define LITTLE_ENDIAN 1234 - * #define BIG_ENDIAN 4321 - * - * And for little-endian machines, add: - * - * #define BYTE_ORDER LITTLE_ENDIAN - * - * Or for big-endian machines: - * - * #define BYTE_ORDER BIG_ENDIAN - * - * The FreeBSD machine this was written on defines BYTE_ORDER - * appropriately by including (which in turn includes - * where the appropriate definitions are actually - * made). - */ -#if !defined(BYTE_ORDER) || (BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != BIG_ENDIAN) -#error Define BYTE_ORDER to be equal to either LITTLE_ENDIAN or BIG_ENDIAN -#endif - -/* - * Define the followingsha2_* types to types of the correct length on - * the native architecture. Most BSD systems and Linux define u_intXX_t - * types. Machines with very recent ANSI C headers, can use the - * uintXX_t definintions from inttypes.h by defining SHA2_USE_INTTYPES_H - * during compile or in the sha.h header file. - * - * Machines that support neither u_intXX_t nor inttypes.h's uintXX_t - * will need to define these three typedefs below (and the appropriate - * ones in sha.h too) by hand according to their system architecture. - * - * Thank you, Jun-ichiro itojun Hagino, for suggesting using u_intXX_t - * types and pointing out recent ANSI C support for uintXX_t in inttypes.h. - */ -#ifdef SHA2_USE_INTTYPES_H - -typedef uint8_t sha2_byte; /* Exactly 1 byte */ -typedef uint32_t sha2_word32; /* Exactly 4 bytes */ -typedef uint64_t sha2_word64; /* Exactly 8 bytes */ - -#else /* SHA2_USE_INTTYPES_H */ - -typedef u_int8_t sha2_byte; /* Exactly 1 byte */ -typedef u_int32_t sha2_word32; /* Exactly 4 bytes */ -typedef u_int64_t sha2_word64; /* Exactly 8 bytes */ - -#endif /* SHA2_USE_INTTYPES_H */ - - -/*** SHA-256/384/512 Various Length Definitions ***********************/ -/* NOTE: Most of these are in sha2.h */ -#define SHA256_SHORT_BLOCK_LENGTH (SHA256_BLOCK_LENGTH - 8) -#define SHA384_SHORT_BLOCK_LENGTH (SHA384_BLOCK_LENGTH - 16) -#define SHA512_SHORT_BLOCK_LENGTH (SHA512_BLOCK_LENGTH - 16) - - -/*** ENDIAN REVERSAL MACROS *******************************************/ -#if BYTE_ORDER == LITTLE_ENDIAN -#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) -#define REVERSE32(w,x) { \ - (x) = __builtin_bswap32(w); \ -} -#define REVERSE64(w,x) { \ - (x) = __builtin_bswap64(w); \ -} -#else -#define REVERSE32(w,x) { \ - sha2_word32 tmp = (w); \ - tmp = (tmp >> 16) | (tmp << 16); \ - (x) = ((tmp & 0xff00ff00UL) >> 8) | ((tmp & 0x00ff00ffUL) << 8); \ -} -#define REVERSE64(w,x) { \ - sha2_word64 tmp = (w); \ - tmp = (tmp >> 32) | (tmp << 32); \ - tmp = ((tmp & 0xff00ff00ff00ff00ULL) >> 8) | \ - ((tmp & 0x00ff00ff00ff00ffULL) << 8); \ - (x) = ((tmp & 0xffff0000ffff0000ULL) >> 16) | \ - ((tmp & 0x0000ffff0000ffffULL) << 16); \ -} -#endif -#endif /* BYTE_ORDER == LITTLE_ENDIAN */ - -/* - * Macro for incrementally adding the unsigned 64-bit integer n to the - * unsigned 128-bit integer (represented using a two-element array of - * 64-bit words): - */ -#define ADDINC128(w,n) { \ - (w)[0] += (sha2_word64)(n); \ - if ((w)[0] < (n)) { \ - (w)[1]++; \ - } \ -} - -/* - * Macros for copying blocks of memory and for zeroing out ranges - * of memory. Using these macros makes it easy to switch from - * using memset()/memcpy() and using bzero()/bcopy(). - * - * Please define either SHA2_USE_MEMSET_MEMCPY or define - * SHA2_USE_BZERO_BCOPY depending on which function set you - * choose to use: - */ -#if !defined(SHA2_USE_MEMSET_MEMCPY) && !defined(SHA2_USE_BZERO_BCOPY) -/* Default to memset()/memcpy() if no option is specified */ -#define SHA2_USE_MEMSET_MEMCPY 1 -#endif -#if defined(SHA2_USE_MEMSET_MEMCPY) && defined(SHA2_USE_BZERO_BCOPY) -/* Abort with an error if BOTH options are defined */ -#error Define either SHA2_USE_MEMSET_MEMCPY or SHA2_USE_BZERO_BCOPY, not both! -#endif - -#ifdef SHA2_USE_MEMSET_MEMCPY -#define MEMSET_BZERO(p,l) memset((p), 0, (l)) -#define MEMCPY_BCOPY(d,s,l) memcpy((d), (s), (l)) -#endif -#ifdef SHA2_USE_BZERO_BCOPY -#define MEMSET_BZERO(p,l) bzero((p), (l)) -#define MEMCPY_BCOPY(d,s,l) bcopy((s), (d), (l)) -#endif - - -/*** THE SIX LOGICAL FUNCTIONS ****************************************/ -/* - * Bit shifting and rotation (used by the six SHA-XYZ logical functions: - * - * NOTE: The naming of R and S appears backwards here (R is a SHIFT and - * S is a ROTATION) because the SHA-256/384/512 description document - * (see http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf) uses this - * same "backwards" definition. - */ -/* Shift-right (used in SHA-256, SHA-384, and SHA-512): */ -#define R(b,x) ((x) >> (b)) -/* 32-bit Rotate-right (used in SHA-256): */ -#define S32(b,x) (((x) >> (b)) | ((x) << (32 - (b)))) -/* 64-bit Rotate-right (used in SHA-384 and SHA-512): */ -#define S64(b,x) (((x) >> (b)) | ((x) << (64 - (b)))) - -/* Two of six logical functions used in SHA-256, SHA-384, and SHA-512: */ -#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z))) -#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) - -/* Four of six logical functions used in SHA-256: */ -#define Sigma0_256(x) (S32(2, (x)) ^ S32(13, (x)) ^ S32(22, (x))) -#define Sigma1_256(x) (S32(6, (x)) ^ S32(11, (x)) ^ S32(25, (x))) -#define sigma0_256(x) (S32(7, (x)) ^ S32(18, (x)) ^ R(3 , (x))) -#define sigma1_256(x) (S32(17, (x)) ^ S32(19, (x)) ^ R(10, (x))) - -/* Four of six logical functions used in SHA-384 and SHA-512: */ -#define Sigma0_512(x) (S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x))) -#define Sigma1_512(x) (S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x))) -#define sigma0_512(x) (S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7, (x))) -#define sigma1_512(x) (S64(19, (x)) ^ S64(61, (x)) ^ R( 6, (x))) - -/*** INTERNAL FUNCTION PROTOTYPES *************************************/ -/* NOTE: These should not be accessed directly from outside this - * library -- they are intended for private internal visibility/use - * only. - */ -static void SHA512_Last(SHA512_CTX*); -static void SHA256_Transform(SHA256_CTX*, const sha2_word32*); -static void SHA512_Transform(SHA512_CTX*, const sha2_word64*); - - -/*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/ -/* Hash constant words K for SHA-256: */ -const static sha2_word32 K256[64] = { - 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, - 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, - 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL, - 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL, - 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, - 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, - 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, - 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL, - 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL, - 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, - 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, - 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, - 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL, - 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL, - 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, - 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL -}; - -/* Initial hash value H for SHA-256: */ -const static sha2_word32 sha256_initial_hash_value[8] = { - 0x6a09e667UL, - 0xbb67ae85UL, - 0x3c6ef372UL, - 0xa54ff53aUL, - 0x510e527fUL, - 0x9b05688cUL, - 0x1f83d9abUL, - 0x5be0cd19UL -}; - -/* Hash constant words K for SHA-384 and SHA-512: */ -const static sha2_word64 K512[80] = { - 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, - 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL, - 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, - 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, - 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, - 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, - 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, - 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL, - 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, - 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, - 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, - 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL, - 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, - 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL, - 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, - 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, - 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, - 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL, - 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, - 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL, - 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, - 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, - 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, - 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL, - 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, - 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL, - 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, - 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, - 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, - 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, - 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, - 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL, - 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, - 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, - 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, - 0x113f9804bef90daeULL, 0x1b710b35131c471bULL, - 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, - 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL, - 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, - 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL -}; - -/* Initial hash value H for SHA-384 */ -const static sha2_word64 sha384_initial_hash_value[8] = { - 0xcbbb9d5dc1059ed8ULL, - 0x629a292a367cd507ULL, - 0x9159015a3070dd17ULL, - 0x152fecd8f70e5939ULL, - 0x67332667ffc00b31ULL, - 0x8eb44a8768581511ULL, - 0xdb0c2e0d64f98fa7ULL, - 0x47b5481dbefa4fa4ULL -}; - -/* Initial hash value H for SHA-512 */ -const static sha2_word64 sha512_initial_hash_value[8] = { - 0x6a09e667f3bcc908ULL, - 0xbb67ae8584caa73bULL, - 0x3c6ef372fe94f82bULL, - 0xa54ff53a5f1d36f1ULL, - 0x510e527fade682d1ULL, - 0x9b05688c2b3e6c1fULL, - 0x1f83d9abfb41bd6bULL, - 0x5be0cd19137e2179ULL -}; - -/* - * Constant used by SHA256/384/512_End() functions for converting the - * digest to a readable hexadecimal character string: - */ -static const char *sha2_hex_digits = "0123456789abcdef"; - - -/*** SHA-256: *********************************************************/ -void SHA256_Init(SHA256_CTX* context) { - if (context == (SHA256_CTX*)0) { - return; - } - MEMCPY_BCOPY(context->state, sha256_initial_hash_value, SHA256_DIGEST_LENGTH); - MEMSET_BZERO(context->buffer, SHA256_BLOCK_LENGTH); - context->bitcount = 0; -} - -#ifdef SHA2_UNROLL_TRANSFORM - -/* Unrolled SHA-256 round macros: */ - -#if BYTE_ORDER == LITTLE_ENDIAN - -#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \ - REVERSE32(*data++, W256[j]); \ - T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \ - K256[j] + W256[j]; \ - (d) += T1; \ - (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ - j++ - - -#else /* BYTE_ORDER == LITTLE_ENDIAN */ - -#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \ - T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \ - K256[j] + (W256[j] = *data++); \ - (d) += T1; \ - (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ - j++ - -#endif /* BYTE_ORDER == LITTLE_ENDIAN */ - -#define ROUND256(a,b,c,d,e,f,g,h) \ - s0 = W256[(j+1)&0x0f]; \ - s0 = sigma0_256(s0); \ - s1 = W256[(j+14)&0x0f]; \ - s1 = sigma1_256(s1); \ - T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + K256[j] + \ - (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0); \ - (d) += T1; \ - (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ - j++ - -static void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) { - sha2_word32 a, b, c, d, e, f, g, h, s0, s1; - sha2_word32 T1, *W256; - int j; - - W256 = (sha2_word32*)context->buffer; - - /* Initialize registers with the prev. intermediate value */ - a = context->state[0]; - b = context->state[1]; - c = context->state[2]; - d = context->state[3]; - e = context->state[4]; - f = context->state[5]; - g = context->state[6]; - h = context->state[7]; - - j = 0; - do { - /* Rounds 0 to 15 (unrolled): */ - ROUND256_0_TO_15(a,b,c,d,e,f,g,h); - ROUND256_0_TO_15(h,a,b,c,d,e,f,g); - ROUND256_0_TO_15(g,h,a,b,c,d,e,f); - ROUND256_0_TO_15(f,g,h,a,b,c,d,e); - ROUND256_0_TO_15(e,f,g,h,a,b,c,d); - ROUND256_0_TO_15(d,e,f,g,h,a,b,c); - ROUND256_0_TO_15(c,d,e,f,g,h,a,b); - ROUND256_0_TO_15(b,c,d,e,f,g,h,a); - } while (j < 16); - - /* Now for the remaining rounds to 64: */ - do { - ROUND256(a,b,c,d,e,f,g,h); - ROUND256(h,a,b,c,d,e,f,g); - ROUND256(g,h,a,b,c,d,e,f); - ROUND256(f,g,h,a,b,c,d,e); - ROUND256(e,f,g,h,a,b,c,d); - ROUND256(d,e,f,g,h,a,b,c); - ROUND256(c,d,e,f,g,h,a,b); - ROUND256(b,c,d,e,f,g,h,a); - } while (j < 64); - - /* Compute the current intermediate hash value */ - context->state[0] += a; - context->state[1] += b; - context->state[2] += c; - context->state[3] += d; - context->state[4] += e; - context->state[5] += f; - context->state[6] += g; - context->state[7] += h; - - /* Clean up */ - a = b = c = d = e = f = g = h = T1 = 0; -} - -#else /* SHA2_UNROLL_TRANSFORM */ - -static void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) { - sha2_word32 a, b, c, d, e, f, g, h, s0, s1; - sha2_word32 T1, T2, *W256; - int j; - - W256 = (sha2_word32*)context->buffer; - - /* Initialize registers with the prev. intermediate value */ - a = context->state[0]; - b = context->state[1]; - c = context->state[2]; - d = context->state[3]; - e = context->state[4]; - f = context->state[5]; - g = context->state[6]; - h = context->state[7]; - - j = 0; - do { -#if BYTE_ORDER == LITTLE_ENDIAN - /* Copy data while converting to host byte order */ - REVERSE32(*data++,W256[j]); - /* Apply the SHA-256 compression function to update a..h */ - T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + W256[j]; -#else /* BYTE_ORDER == LITTLE_ENDIAN */ - /* Apply the SHA-256 compression function to update a..h with copy */ - T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + (W256[j] = *data++); -#endif /* BYTE_ORDER == LITTLE_ENDIAN */ - T2 = Sigma0_256(a) + Maj(a, b, c); - h = g; - g = f; - f = e; - e = d + T1; - d = c; - c = b; - b = a; - a = T1 + T2; - - j++; - } while (j < 16); - - do { - /* Part of the message block expansion: */ - s0 = W256[(j+1)&0x0f]; - s0 = sigma0_256(s0); - s1 = W256[(j+14)&0x0f]; - s1 = sigma1_256(s1); - - /* Apply the SHA-256 compression function to update a..h */ - T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + - (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0); - T2 = Sigma0_256(a) + Maj(a, b, c); - h = g; - g = f; - f = e; - e = d + T1; - d = c; - c = b; - b = a; - a = T1 + T2; - - j++; - } while (j < 64); - - /* Compute the current intermediate hash value */ - context->state[0] += a; - context->state[1] += b; - context->state[2] += c; - context->state[3] += d; - context->state[4] += e; - context->state[5] += f; - context->state[6] += g; - context->state[7] += h; - - /* Clean up */ - a = b = c = d = e = f = g = h = T1 = T2 = 0; -} - -#endif /* SHA2_UNROLL_TRANSFORM */ - -void SHA256_Update(SHA256_CTX* context, const sha2_byte *data, size_t len) { - unsigned int freespace, usedspace; - - if (len == 0) { - /* Calling with no data is valid - we do nothing */ - return; - } - - /* Sanity check: */ - assert(context != (SHA256_CTX*)0 && data != (sha2_byte*)0); - - usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH; - if (usedspace > 0) { - /* Calculate how much free space is available in the buffer */ - freespace = SHA256_BLOCK_LENGTH - usedspace; - - if (len >= freespace) { - /* Fill the buffer completely and process it */ - MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace); - context->bitcount += freespace << 3; - len -= freespace; - data += freespace; - SHA256_Transform(context, (sha2_word32*)context->buffer); - } else { - /* The buffer is not yet full */ - MEMCPY_BCOPY(&context->buffer[usedspace], data, len); - context->bitcount += len << 3; - /* Clean up: */ - usedspace = freespace = 0; - return; - } - } - while (len >= SHA256_BLOCK_LENGTH) { - /* Process as many complete blocks as we can */ - sha2_byte buffer[SHA256_BLOCK_LENGTH]; - MEMCPY_BCOPY(buffer, data, SHA256_BLOCK_LENGTH); - SHA256_Transform(context, (sha2_word32*)buffer); - context->bitcount += SHA256_BLOCK_LENGTH << 3; - len -= SHA256_BLOCK_LENGTH; - data += SHA256_BLOCK_LENGTH; - } - if (len > 0) { - /* There's left-overs, so save 'em */ - MEMCPY_BCOPY(context->buffer, data, len); - context->bitcount += len << 3; - } - /* Clean up: */ - usedspace = freespace = 0; -} - -void SHA256_Final(sha2_byte digest[], SHA256_CTX* context) { - sha2_word32 *d = (sha2_word32*)digest; - unsigned int usedspace; - - /* Sanity check: */ - assert(context != (SHA256_CTX*)0); - - /* If no digest buffer is passed, we don't bother doing this: */ - if (digest != (sha2_byte*)0) { - usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH; -#if BYTE_ORDER == LITTLE_ENDIAN - /* Convert FROM host byte order */ - REVERSE64(context->bitcount,context->bitcount); -#endif - if (usedspace > 0) { - /* Begin padding with a 1 bit: */ - context->buffer[usedspace++] = 0x80; - - if (usedspace <= SHA256_SHORT_BLOCK_LENGTH) { - /* Set-up for the last transform: */ - MEMSET_BZERO(&context->buffer[usedspace], SHA256_SHORT_BLOCK_LENGTH - usedspace); - } else { - if (usedspace < SHA256_BLOCK_LENGTH) { - MEMSET_BZERO(&context->buffer[usedspace], SHA256_BLOCK_LENGTH - usedspace); - } - /* Do second-to-last transform: */ - SHA256_Transform(context, (sha2_word32*)context->buffer); - - /* And set-up for the last transform: */ - MEMSET_BZERO(context->buffer, SHA256_SHORT_BLOCK_LENGTH); - } - } else { - /* Set-up for the last transform: */ - MEMSET_BZERO(context->buffer, SHA256_SHORT_BLOCK_LENGTH); - - /* Begin padding with a 1 bit: */ - *context->buffer = 0x80; - } - /* Set the bit count: */ - union { - sha2_byte* c; - sha2_word64* l; - } bitcount; - bitcount.c = &context->buffer[SHA256_SHORT_BLOCK_LENGTH]; - *(bitcount.l) = context->bitcount; - - /* Final transform: */ - SHA256_Transform(context, (sha2_word32*)context->buffer); - -#if BYTE_ORDER == LITTLE_ENDIAN - { - /* Convert TO host byte order */ - int j; - for (j = 0; j < 8; j++) { - REVERSE32(context->state[j],context->state[j]); - *d++ = context->state[j]; - } - } -#else - MEMCPY_BCOPY(d, context->state, SHA256_DIGEST_LENGTH); -#endif - } - - /* Clean up state data: */ - MEMSET_BZERO(context, sizeof(*context)); - usedspace = 0; -} - -char *SHA256_End(SHA256_CTX* context, char buffer[]) { - sha2_byte digest[SHA256_DIGEST_LENGTH], *d = digest; - int i; - - /* Sanity check: */ - assert(context != (SHA256_CTX*)0); - - if (buffer != (char*)0) { - SHA256_Final(digest, context); - - for (i = 0; i < SHA256_DIGEST_LENGTH; i++) { - *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4]; - *buffer++ = sha2_hex_digits[*d & 0x0f]; - d++; - } - *buffer = (char)0; - } else { - MEMSET_BZERO(context, sizeof(*context)); - } - MEMSET_BZERO(digest, SHA256_DIGEST_LENGTH); - return buffer; -} - -char* SHA256_Data(const sha2_byte* data, size_t len, char digest[SHA256_DIGEST_STRING_LENGTH]) { - SHA256_CTX context; - - SHA256_Init(&context); - SHA256_Update(&context, data, len); - return SHA256_End(&context, digest); -} - - -/*** SHA-512: *********************************************************/ -void SHA512_Init(SHA512_CTX* context) { - if (context == (SHA512_CTX*)0) { - return; - } - MEMCPY_BCOPY(context->state, sha512_initial_hash_value, SHA512_DIGEST_LENGTH); - MEMSET_BZERO(context->buffer, SHA512_BLOCK_LENGTH); - context->bitcount[0] = context->bitcount[1] = 0; -} - -#ifdef SHA2_UNROLL_TRANSFORM - -/* Unrolled SHA-512 round macros: */ -#if BYTE_ORDER == LITTLE_ENDIAN - -#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \ - REVERSE64(*data++, W512[j]); \ - T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \ - K512[j] + W512[j]; \ - (d) += T1, \ - (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)), \ - j++ - - -#else /* BYTE_ORDER == LITTLE_ENDIAN */ - -#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \ - T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \ - K512[j] + (W512[j] = *data++); \ - (d) += T1; \ - (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \ - j++ - -#endif /* BYTE_ORDER == LITTLE_ENDIAN */ - -#define ROUND512(a,b,c,d,e,f,g,h) \ - s0 = W512[(j+1)&0x0f]; \ - s0 = sigma0_512(s0); \ - s1 = W512[(j+14)&0x0f]; \ - s1 = sigma1_512(s1); \ - T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + \ - (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); \ - (d) += T1; \ - (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \ - j++ - -static void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) { - sha2_word64 a, b, c, d, e, f, g, h, s0, s1; - sha2_word64 T1, *W512 = (sha2_word64*)context->buffer; - int j; - - /* Initialize registers with the prev. intermediate value */ - a = context->state[0]; - b = context->state[1]; - c = context->state[2]; - d = context->state[3]; - e = context->state[4]; - f = context->state[5]; - g = context->state[6]; - h = context->state[7]; - - j = 0; - do { - ROUND512_0_TO_15(a,b,c,d,e,f,g,h); - ROUND512_0_TO_15(h,a,b,c,d,e,f,g); - ROUND512_0_TO_15(g,h,a,b,c,d,e,f); - ROUND512_0_TO_15(f,g,h,a,b,c,d,e); - ROUND512_0_TO_15(e,f,g,h,a,b,c,d); - ROUND512_0_TO_15(d,e,f,g,h,a,b,c); - ROUND512_0_TO_15(c,d,e,f,g,h,a,b); - ROUND512_0_TO_15(b,c,d,e,f,g,h,a); - } while (j < 16); - - /* Now for the remaining rounds up to 79: */ - do { - ROUND512(a,b,c,d,e,f,g,h); - ROUND512(h,a,b,c,d,e,f,g); - ROUND512(g,h,a,b,c,d,e,f); - ROUND512(f,g,h,a,b,c,d,e); - ROUND512(e,f,g,h,a,b,c,d); - ROUND512(d,e,f,g,h,a,b,c); - ROUND512(c,d,e,f,g,h,a,b); - ROUND512(b,c,d,e,f,g,h,a); - } while (j < 80); - - /* Compute the current intermediate hash value */ - context->state[0] += a; - context->state[1] += b; - context->state[2] += c; - context->state[3] += d; - context->state[4] += e; - context->state[5] += f; - context->state[6] += g; - context->state[7] += h; - - /* Clean up */ - a = b = c = d = e = f = g = h = T1 = 0; -} - -#else /* SHA2_UNROLL_TRANSFORM */ - -static void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) { - sha2_word64 a, b, c, d, e, f, g, h, s0, s1; - sha2_word64 T1, T2, *W512 = (sha2_word64*)context->buffer; - int j; - - /* Initialize registers with the prev. intermediate value */ - a = context->state[0]; - b = context->state[1]; - c = context->state[2]; - d = context->state[3]; - e = context->state[4]; - f = context->state[5]; - g = context->state[6]; - h = context->state[7]; - - j = 0; - do { -#if BYTE_ORDER == LITTLE_ENDIAN - /* Convert TO host byte order */ - REVERSE64(*data++, W512[j]); - /* Apply the SHA-512 compression function to update a..h */ - T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + W512[j]; -#else /* BYTE_ORDER == LITTLE_ENDIAN */ - /* Apply the SHA-512 compression function to update a..h with copy */ - T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + (W512[j] = *data++); -#endif /* BYTE_ORDER == LITTLE_ENDIAN */ - T2 = Sigma0_512(a) + Maj(a, b, c); - h = g; - g = f; - f = e; - e = d + T1; - d = c; - c = b; - b = a; - a = T1 + T2; - - j++; - } while (j < 16); - - do { - /* Part of the message block expansion: */ - s0 = W512[(j+1)&0x0f]; - s0 = sigma0_512(s0); - s1 = W512[(j+14)&0x0f]; - s1 = sigma1_512(s1); - - /* Apply the SHA-512 compression function to update a..h */ - T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + - (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); - T2 = Sigma0_512(a) + Maj(a, b, c); - h = g; - g = f; - f = e; - e = d + T1; - d = c; - c = b; - b = a; - a = T1 + T2; - - j++; - } while (j < 80); - - /* Compute the current intermediate hash value */ - context->state[0] += a; - context->state[1] += b; - context->state[2] += c; - context->state[3] += d; - context->state[4] += e; - context->state[5] += f; - context->state[6] += g; - context->state[7] += h; - - /* Clean up */ - a = b = c = d = e = f = g = h = T1 = T2 = 0; -} - -#endif /* SHA2_UNROLL_TRANSFORM */ - -void SHA512_Update(SHA512_CTX* context, const sha2_byte *data, size_t len) { - unsigned int freespace, usedspace; - - if (len == 0) { - /* Calling with no data is valid - we do nothing */ - return; - } - - /* Sanity check: */ - assert(context != (SHA512_CTX*)0 && data != (sha2_byte*)0); - - usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH; - if (usedspace > 0) { - /* Calculate how much free space is available in the buffer */ - freespace = SHA512_BLOCK_LENGTH - usedspace; - - if (len >= freespace) { - /* Fill the buffer completely and process it */ - MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace); - ADDINC128(context->bitcount, freespace << 3); - len -= freespace; - data += freespace; - SHA512_Transform(context, (sha2_word64*)context->buffer); - } else { - /* The buffer is not yet full */ - MEMCPY_BCOPY(&context->buffer[usedspace], data, len); - ADDINC128(context->bitcount, len << 3); - /* Clean up: */ - usedspace = freespace = 0; - return; - } - } - while (len >= SHA512_BLOCK_LENGTH) { - /* Process as many complete blocks as we can */ - sha2_byte buffer[SHA512_BLOCK_LENGTH]; - MEMCPY_BCOPY(buffer, data, SHA512_BLOCK_LENGTH); - SHA512_Transform(context, (sha2_word64*)buffer); - ADDINC128(context->bitcount, SHA512_BLOCK_LENGTH << 3); - len -= SHA512_BLOCK_LENGTH; - data += SHA512_BLOCK_LENGTH; - } - if (len > 0) { - /* There's left-overs, so save 'em */ - MEMCPY_BCOPY(context->buffer, data, len); - ADDINC128(context->bitcount, len << 3); - } - /* Clean up: */ - usedspace = freespace = 0; -} - -static void SHA512_Last(SHA512_CTX* context) { - unsigned int usedspace; - - usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH; -#if BYTE_ORDER == LITTLE_ENDIAN - /* Convert FROM host byte order */ - REVERSE64(context->bitcount[0],context->bitcount[0]); - REVERSE64(context->bitcount[1],context->bitcount[1]); -#endif - if (usedspace > 0) { - /* Begin padding with a 1 bit: */ - context->buffer[usedspace++] = 0x80; - - if (usedspace <= SHA512_SHORT_BLOCK_LENGTH) { - /* Set-up for the last transform: */ - MEMSET_BZERO(&context->buffer[usedspace], SHA512_SHORT_BLOCK_LENGTH - usedspace); - } else { - if (usedspace < SHA512_BLOCK_LENGTH) { - MEMSET_BZERO(&context->buffer[usedspace], SHA512_BLOCK_LENGTH - usedspace); - } - /* Do second-to-last transform: */ - SHA512_Transform(context, (sha2_word64*)context->buffer); - - /* And set-up for the last transform: */ - MEMSET_BZERO(context->buffer, SHA512_BLOCK_LENGTH - 2); - } - } else { - /* Prepare for final transform: */ - MEMSET_BZERO(context->buffer, SHA512_SHORT_BLOCK_LENGTH); - - /* Begin padding with a 1 bit: */ - *context->buffer = 0x80; - } - /* Store the length of input data (in bits): */ - union { - sha2_byte* c; - sha2_word64* l; - } bitcount; - bitcount.c = &context->buffer[SHA512_SHORT_BLOCK_LENGTH]; - bitcount.l[0] = context->bitcount[1]; - bitcount.l[1] = context->bitcount[0]; - - /* Final transform: */ - SHA512_Transform(context, (sha2_word64*)context->buffer); -} - -void SHA512_Final(sha2_byte digest[], SHA512_CTX* context) { - sha2_word64 *d = (sha2_word64*)digest; - - /* Sanity check: */ - assert(context != (SHA512_CTX*)0); - - /* If no digest buffer is passed, we don't bother doing this: */ - if (digest != (sha2_byte*)0) { - SHA512_Last(context); - - /* Save the hash data for output: */ -#if BYTE_ORDER == LITTLE_ENDIAN - { - /* Convert TO host byte order */ - int j; - for (j = 0; j < 8; j++) { - REVERSE64(context->state[j],context->state[j]); - *d++ = context->state[j]; - } - } -#else - MEMCPY_BCOPY(d, context->state, SHA512_DIGEST_LENGTH); -#endif - } - - /* Zero out state data */ - MEMSET_BZERO(context, sizeof(*context)); -} - -char *SHA512_End(SHA512_CTX* context, char buffer[]) { - sha2_byte digest[SHA512_DIGEST_LENGTH], *d = digest; - int i; - - /* Sanity check: */ - assert(context != (SHA512_CTX*)0); - - if (buffer != (char*)0) { - SHA512_Final(digest, context); - - for (i = 0; i < SHA512_DIGEST_LENGTH; i++) { - *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4]; - *buffer++ = sha2_hex_digits[*d & 0x0f]; - d++; - } - *buffer = (char)0; - } else { - MEMSET_BZERO(context, sizeof(*context)); - } - MEMSET_BZERO(digest, SHA512_DIGEST_LENGTH); - return buffer; -} - -char* SHA512_Data(const sha2_byte* data, size_t len, char digest[SHA512_DIGEST_STRING_LENGTH]) { - SHA512_CTX context; - - SHA512_Init(&context); - SHA512_Update(&context, data, len); - return SHA512_End(&context, digest); -} - - -/*** SHA-384: *********************************************************/ -void SHA384_Init(SHA384_CTX* context) { - if (context == (SHA384_CTX*)0) { - return; - } - MEMCPY_BCOPY(context->state, sha384_initial_hash_value, SHA512_DIGEST_LENGTH); - MEMSET_BZERO(context->buffer, SHA384_BLOCK_LENGTH); - context->bitcount[0] = context->bitcount[1] = 0; -} - -void SHA384_Update(SHA384_CTX* context, const sha2_byte* data, size_t len) { - SHA512_Update((SHA512_CTX*)context, data, len); -} - -void SHA384_Final(sha2_byte digest[], SHA384_CTX* context) { - sha2_word64 *d = (sha2_word64*)digest; - - /* Sanity check: */ - assert(context != (SHA384_CTX*)0); - - /* If no digest buffer is passed, we don't bother doing this: */ - if (digest != (sha2_byte*)0) { - SHA512_Last((SHA512_CTX*)context); - - /* Save the hash data for output: */ -#if BYTE_ORDER == LITTLE_ENDIAN - { - /* Convert TO host byte order */ - int j; - for (j = 0; j < 6; j++) { - REVERSE64(context->state[j],context->state[j]); - *d++ = context->state[j]; - } - } -#else - MEMCPY_BCOPY(d, context->state, SHA384_DIGEST_LENGTH); -#endif - } - - /* Zero out state data */ - MEMSET_BZERO(context, sizeof(*context)); -} - -char *SHA384_End(SHA384_CTX* context, char buffer[]) { - sha2_byte digest[SHA384_DIGEST_LENGTH], *d = digest; - int i; - - /* Sanity check: */ - assert(context != (SHA384_CTX*)0); - - if (buffer != (char*)0) { - SHA384_Final(digest, context); - - for (i = 0; i < SHA384_DIGEST_LENGTH; i++) { - *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4]; - *buffer++ = sha2_hex_digits[*d & 0x0f]; - d++; - } - *buffer = (char)0; - } else { - MEMSET_BZERO(context, sizeof(*context)); - } - MEMSET_BZERO(digest, SHA384_DIGEST_LENGTH); - return buffer; -} - -char* SHA384_Data(const sha2_byte* data, size_t len, char digest[SHA384_DIGEST_STRING_LENGTH]) { - SHA384_CTX context; - - SHA384_Init(&context); - SHA384_Update(&context, data, len); - return SHA384_End(&context, digest); -} - diff --git a/apt-pkg/contrib/sha2_internal.h b/apt-pkg/contrib/sha2_internal.h deleted file mode 100644 index 78d1d36..0000000 --- a/apt-pkg/contrib/sha2_internal.h +++ /dev/null @@ -1,188 +0,0 @@ -/* - * FILE: sha2.h - * AUTHOR: Aaron D. Gifford - http://www.aarongifford.com/ - * - * Copyright (c) 2000-2001, Aaron D. Gifford - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the names of contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#ifndef __SHA2_H__ -#define __SHA2_H__ - -/* - * Import u_intXX_t size_t type definitions from system headers. You - * may need to change this, or define these things yourself in this - * file. - */ -#include - -#ifdef SHA2_USE_INTTYPES_H - -#include -#include - -#endif /* SHA2_USE_INTTYPES_H */ - - -/*** SHA-256/384/512 Various Length Definitions ***********************/ -#define SHA256_BLOCK_LENGTH 64 -#define SHA256_DIGEST_LENGTH 32 -#define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1) -#define SHA384_BLOCK_LENGTH 128 -#define SHA384_DIGEST_LENGTH 48 -#define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1) -#define SHA512_BLOCK_LENGTH 128 -#define SHA512_DIGEST_LENGTH 64 -#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1) - - -/*** SHA-256/384/512 Context Structures *******************************/ -/* NOTE: If your architecture does not define either u_intXX_t types or - * uintXX_t (from inttypes.h), you may need to define things by hand - * for your system: - */ -#if 0 -typedef unsigned char u_int8_t; /* 1-byte (8-bits) */ -typedef unsigned int u_int32_t; /* 4-bytes (32-bits) */ -typedef unsigned long long u_int64_t; /* 8-bytes (64-bits) */ -#endif -/* - * Most BSD systems already define u_intXX_t types, as does Linux. - * Some systems, however, like Compaq's Tru64 Unix instead can use - * uintXX_t types defined by very recent ANSI C standards and included - * in the file: - * - * #include - * - * If you choose to use then please define: - * - * #define SHA2_USE_INTTYPES_H - * - * Or on the command line during compile: - * - * cc -DSHA2_USE_INTTYPES_H ... - */ -#ifdef SHA2_USE_INTTYPES_H - -typedef struct _SHA256_CTX { - uint32_t state[8]; - uint64_t bitcount; - uint8_t buffer[SHA256_BLOCK_LENGTH]; -} SHA256_CTX; -typedef struct _SHA512_CTX { - uint64_t state[8]; - uint64_t bitcount[2]; - uint8_t buffer[SHA512_BLOCK_LENGTH]; -} SHA512_CTX; - -#else /* SHA2_USE_INTTYPES_H */ - -typedef struct _SHA256_CTX { - u_int32_t state[8]; - u_int64_t bitcount; - u_int8_t buffer[SHA256_BLOCK_LENGTH]; -} SHA256_CTX; -typedef struct _SHA512_CTX { - u_int64_t state[8]; - u_int64_t bitcount[2]; - u_int8_t buffer[SHA512_BLOCK_LENGTH]; -} SHA512_CTX; - -#endif /* SHA2_USE_INTTYPES_H */ - -typedef SHA512_CTX SHA384_CTX; - - -/*** SHA-256/384/512 Function Prototypes ******************************/ -#ifndef NOPROTO -#ifdef SHA2_USE_INTTYPES_H - -void SHA256_Init(SHA256_CTX *); -void SHA256_Update(SHA256_CTX*, const uint8_t*, size_t); -void SHA256_Final(uint8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*); -char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]); -char* SHA256_Data(const uint8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]); - -void SHA384_Init(SHA384_CTX*); -void SHA384_Update(SHA384_CTX*, const uint8_t*, size_t); -void SHA384_Final(uint8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*); -char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]); -char* SHA384_Data(const uint8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]); - -void SHA512_Init(SHA512_CTX*); -void SHA512_Update(SHA512_CTX*, const uint8_t*, size_t); -void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*); -char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]); -char* SHA512_Data(const uint8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]); - -#else /* SHA2_USE_INTTYPES_H */ - -void SHA256_Init(SHA256_CTX *); -void SHA256_Update(SHA256_CTX*, const u_int8_t*, size_t); -void SHA256_Final(u_int8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*); -char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]); -char* SHA256_Data(const u_int8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]); - -void SHA384_Init(SHA384_CTX*); -void SHA384_Update(SHA384_CTX*, const u_int8_t*, size_t); -void SHA384_Final(u_int8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*); -char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]); -char* SHA384_Data(const u_int8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]); - -void SHA512_Init(SHA512_CTX*); -void SHA512_Update(SHA512_CTX*, const u_int8_t*, size_t); -void SHA512_Final(u_int8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*); -char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]); -char* SHA512_Data(const u_int8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]); - -#endif /* SHA2_USE_INTTYPES_H */ - -#else /* NOPROTO */ - -void SHA256_Init(); -void SHA256_Update(); -void SHA256_Final(); -char* SHA256_End(); -char* SHA256_Data(); - -void SHA384_Init(); -void SHA384_Update(); -void SHA384_Final(); -char* SHA384_End(); -char* SHA384_Data(); - -void SHA512_Init(); -void SHA512_Update(); -void SHA512_Final(); -char* SHA512_End(); -char* SHA512_Data(); - -#endif /* NOPROTO */ - -#endif /* __SHA2_H__ */ - diff --git a/apt-pkg/contrib/sptr.h b/apt-pkg/contrib/sptr.h deleted file mode 100644 index 77806d9..0000000 --- a/apt-pkg/contrib/sptr.h +++ /dev/null @@ -1,74 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -/* ###################################################################### - - Trivial non-ref counted 'smart pointer' - - This is really only good to eliminate - { - delete Foo; - return; - } - - Blocks from functions. - - I think G++ has become good enough that doing this won't have much - code size implications. - - ##################################################################### */ - /*}}}*/ -#ifndef SMART_POINTER_H -#define SMART_POINTER_H -#include - -template -class APT_DEPRECATED_MSG("use std::unique_ptr instead") SPtr -{ - public: - T *Ptr; - - inline T *operator ->() {return Ptr;}; - inline T &operator *() {return *Ptr;}; - inline operator T *() {return Ptr;}; - inline operator void *() {return Ptr;}; - inline T *UnGuard() {T *Tmp = Ptr; Ptr = 0; return Tmp;}; - inline void operator =(T *N) {Ptr = N;}; - inline bool operator ==(T *lhs) const {return Ptr == lhs;}; - inline bool operator !=(T *lhs) const {return Ptr != lhs;}; - inline T*Get() {return Ptr;}; - - inline SPtr(T *Ptr) : Ptr(Ptr) {}; - inline SPtr() : Ptr(0) {}; - inline ~SPtr() {delete Ptr;}; -}; - -template -class APT_DEPRECATED_MSG("use std::unique_ptr instead") SPtrArray -{ - public: - T *Ptr; - - //inline T &operator *() {return *Ptr;}; - inline operator T *() {return Ptr;}; - inline operator void *() {return Ptr;}; - inline T *UnGuard() {T *Tmp = Ptr; Ptr = 0; return Tmp;}; - //inline T &operator [](signed long I) {return Ptr[I];}; - inline void operator =(T *N) {Ptr = N;}; - inline bool operator ==(T *lhs) const {return Ptr == lhs;}; - inline bool operator !=(T *lhs) const {return Ptr != lhs;}; - inline T *Get() {return Ptr;}; - - inline SPtrArray(T *Ptr) : Ptr(Ptr) {}; - inline SPtrArray() : Ptr(0) {}; -#if __GNUC__ >= 4 - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wunsafe-loop-optimizations" - // gcc warns about this, but we can do nothing here… -#endif - inline ~SPtrArray() {delete [] Ptr;}; -#if __GNUC__ >= 4 - #pragma GCC diagnostic pop -#endif -}; - -#endif diff --git a/apt-pkg/contrib/srvrec.cc b/apt-pkg/contrib/srvrec.cc index a97d9c6..7d9bf11 100644 --- a/apt-pkg/contrib/srvrec.cc +++ b/apt-pkg/contrib/srvrec.cc @@ -17,6 +17,7 @@ #include #include +#include #include #include @@ -61,11 +62,15 @@ bool GetSrvRecords(std::string name, std::vector &Result) unsigned char answer[PACKETSZ]; int answer_len, compressed_name_len; int answer_count; + struct __res_state res; - if (res_init() != 0) + if (res_ninit(&res) != 0) return _error->Errno("res_init", "Failed to init resolver"); - answer_len = res_query(name.c_str(), C_IN, T_SRV, answer, sizeof(answer)); + // Close on return + std::shared_ptr guard(&res, res_nclose); + + answer_len = res_nquery(&res, name.c_str(), C_IN, T_SRV, answer, sizeof(answer)); if (answer_len == -1) return false; if (answer_len < (int)sizeof(HEADER)) diff --git a/apt-pkg/contrib/srvrec.h b/apt-pkg/contrib/srvrec.h index e22b7a1..e5d0f43 100644 --- a/apt-pkg/contrib/srvrec.h +++ b/apt-pkg/contrib/srvrec.h @@ -13,7 +13,9 @@ #include #include -class SrvRec +#include + +class APT_PUBLIC SrvRec { public: std::string target; @@ -40,15 +42,15 @@ class SrvRec /** \brief Get SRV records from host/port (builds the query string internally) */ -bool GetSrvRecords(std::string name, std::vector &Result); +APT_PUBLIC bool GetSrvRecords(std::string name, std::vector &Result); /** \brief Get SRV records for query string like: _http._tcp.example.com */ -bool GetSrvRecords(std::string host, int port, std::vector &Result); +APT_PUBLIC bool GetSrvRecords(std::string host, int port, std::vector &Result); /** \brief Pop a single SRV record from the vector of SrvRec taking * priority and weight into account */ -SrvRec PopFromSrvRecs(std::vector &Recs); +APT_PUBLIC SrvRec PopFromSrvRecs(std::vector &Recs); #endif diff --git a/apt-pkg/contrib/string_view.h b/apt-pkg/contrib/string_view.h index 536744e..05aad33 100644 --- a/apt-pkg/contrib/string_view.h +++ b/apt-pkg/contrib/string_view.h @@ -9,7 +9,7 @@ * (at your option) any later version. */ -#if !defined(APT_STRINGVIEW_H) && defined(APT_PKG_EXPOSE_STRING_VIEW) +#if !defined(APT_STRINGVIEW_H) #define APT_STRINGVIEW_H #include #include @@ -24,7 +24,7 @@ namespace APT { * used by APT. It is not meant to be used in programs, only inside the * library for performance critical paths. */ -class APT_HIDDEN StringView { +class StringView { const char *data_; size_t size_; @@ -123,10 +123,15 @@ static inline int StringViewCompareFast(StringView a, StringView b) { return memcmp(a.data(), b.data(), a.size()); } - +static constexpr inline APT::StringView operator""_sv(const char *data, size_t size) +{ + return APT::StringView(data, size); +} } inline bool operator ==(const char *other, APT::StringView that); inline bool operator ==(const char *other, APT::StringView that) { return that.operator==(other); } +inline bool operator ==(std::string const &other, APT::StringView that); +inline bool operator ==(std::string const &other, APT::StringView that) { return that.operator==(other); } #endif diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc index 50344d1..9724729 100644 --- a/apt-pkg/contrib/strutl.cc +++ b/apt-pkg/contrib/strutl.cc @@ -40,6 +40,7 @@ #include #include #include +#include #include /*}}}*/ @@ -96,6 +97,53 @@ std::string Join(std::vector list, const std::string &sep) return oss.str(); } +// Returns string display length honoring multi-byte characters +size_t DisplayLength(StringView str) +{ + size_t len = 0; + + const char *p = str.data(); + const char *const end = str.end(); + + mbstate_t state{}; + while (p < end) + { + wchar_t wch; + size_t res = mbrtowc(&wch, p, end - p, &state); + switch (res) + { + case 0: + // Null wide character (i.e. L'\0') - stop + p = end; + break; + + case static_cast(-1): + // Byte sequence is invalid. Assume that it's + // a single-byte single-width character. + len += 1; + p += 1; + + // state is undefined in this case - reset it + state = {}; + + break; + + case static_cast(-2): + // Byte sequence is too short. Assume that it's + // an incomplete single-width character and stop. + len += 1; + p = end; + break; + + default: + len += wcwidth(wch); + p += res; + } + } + + return len; +} + } } /*}}}*/ @@ -239,7 +287,8 @@ bool ParseQuoteWord(const char *&String,string &Res) { // Skip leading whitespace const char *C = String; - for (;*C != 0 && *C == ' '; C++); + for (; *C == ' '; C++) + ; if (*C == 0) return false; @@ -287,7 +336,8 @@ bool ParseQuoteWord(const char *&String,string &Res) Res = Buffer; // Skip ending white space - for (;*C != 0 && isspace(*C) != 0; C++); + for (; isspace(*C) != 0; C++) + ; String = C; return true; } @@ -300,7 +350,8 @@ bool ParseCWord(const char *&String,string &Res) { // Skip leading whitespace const char *C = String; - for (;*C != 0 && *C == ' '; C++); + for (; *C == ' '; C++) + ; if (*C == 0) return false; @@ -806,10 +857,6 @@ int StringToBool(const string &Text,int Default) // --------------------------------------------------------------------- /* This converts a time_t into a string time representation that is year 2000 compliant and timezone neutral */ -string TimeRFC1123(time_t Date) -{ - return TimeRFC1123(Date, false); -} string TimeRFC1123(time_t Date, bool const NumericTimezone) { struct tm Conv; @@ -997,7 +1044,7 @@ static time_t timegm(struct tm *t) we allow them here to to be able to reuse the method. Either way, a date must be in UTC or parsing will fail. Previous implementations of this method used to ignore the timezone and assume always UTC. */ -bool RFC1123StrToTime(const char* const str,time_t &time) +bool RFC1123StrToTime(std::string const &str,time_t &time) { unsigned short day = 0; signed int year = 0; // yes, Y23K problem – we going to worry then… @@ -1099,57 +1146,6 @@ bool FTPMDTMStrToTime(const char* const str,time_t &time) return true; } /*}}}*/ -// StrToTime - Converts a string into a time_t /*{{{*/ -// --------------------------------------------------------------------- -/* This handles all 3 popular time formats including RFC 1123, RFC 1036 - and the C library asctime format. It requires the GNU library function - 'timegm' to convert a struct tm in UTC to a time_t. For some bizzar - reason the C library does not provide any such function :< This also - handles the weird, but unambiguous FTP time format*/ -bool StrToTime(const string &Val,time_t &Result) -{ - struct tm Tm; - char Month[10]; - - // Skip the day of the week - const char *I = strchr(Val.c_str(), ' '); - - // Handle RFC 1123 time - Month[0] = 0; - if (sscanf(I," %2d %3s %4d %2d:%2d:%2d GMT",&Tm.tm_mday,Month,&Tm.tm_year, - &Tm.tm_hour,&Tm.tm_min,&Tm.tm_sec) != 6) - { - // Handle RFC 1036 time - if (sscanf(I," %2d-%3s-%3d %2d:%2d:%2d GMT",&Tm.tm_mday,Month, - &Tm.tm_year,&Tm.tm_hour,&Tm.tm_min,&Tm.tm_sec) == 6) - Tm.tm_year += 1900; - else - { - // asctime format - if (sscanf(I," %3s %2d %2d:%2d:%2d %4d",Month,&Tm.tm_mday, - &Tm.tm_hour,&Tm.tm_min,&Tm.tm_sec,&Tm.tm_year) != 6) - { - // 'ftp' time - if (sscanf(Val.c_str(),"%4d%2d%2d%2d%2d%2d",&Tm.tm_year,&Tm.tm_mon, - &Tm.tm_mday,&Tm.tm_hour,&Tm.tm_min,&Tm.tm_sec) != 6) - return false; - Tm.tm_mon--; - } - } - } - - Tm.tm_isdst = 0; - if (Month[0] != 0) - Tm.tm_mon = MonthConv(Month); - else - Tm.tm_mon = 0; // we don't have a month, so pick something - Tm.tm_year -= 1900; - - // Convert to local time and then to GMT - Result = timegm(&Tm); - return true; -} - /*}}}*/ // StrToNum - Convert a fixed length string to a number /*{{{*/ // --------------------------------------------------------------------- /* This is used in decoding the crazy fixed length string headers in @@ -1257,11 +1253,6 @@ static int HexDigit(int c) // Hex2Num - Convert a long hex number into a buffer /*{{{*/ // --------------------------------------------------------------------- /* The length of the buffer must be exactly 1/2 the length of the string. */ -bool Hex2Num(const string &Str,unsigned char *Num,unsigned int Length) -{ - return Hex2Num(APT::StringView(Str), Num, Length); -} - bool Hex2Num(const APT::StringView Str,unsigned char *Num,unsigned int Length) { if (Str.length() != Length*2) diff --git a/apt-pkg/contrib/strutl.h b/apt-pkg/contrib/strutl.h index 9f74f8c..c25c620 100644 --- a/apt-pkg/contrib/strutl.h +++ b/apt-pkg/contrib/strutl.h @@ -20,53 +20,43 @@ #include #include #include -#ifdef APT_PKG_EXPOSE_STRING_VIEW #include -#endif #include #include #include "macros.h" -#ifndef APT_10_CLEANER_HEADERS -#include -#endif -#ifndef APT_8_CLEANER_HEADERS -using std::string; -using std::vector; -using std::ostream; -#endif namespace APT { namespace String { - std::string Strip(const std::string &s); - bool Endswith(const std::string &s, const std::string &ending); - bool Startswith(const std::string &s, const std::string &starting); - std::string Join(std::vector list, const std::string &sep); - + APT_PUBLIC std::string Strip(const std::string &s); + APT_PUBLIC bool Endswith(const std::string &s, const std::string &ending); + APT_PUBLIC bool Startswith(const std::string &s, const std::string &starting); + APT_PUBLIC std::string Join(std::vector list, const std::string &sep); + // Returns string display length honoring multi-byte characters + APT_PUBLIC size_t DisplayLength(StringView str); } } -bool UTF8ToCodeset(const char *codeset, const std::string &orig, std::string *dest); -char *_strstrip(char *String); -char *_strrstrip(char *String); // right strip only -char *_strtabexpand(char *String,size_t Len); -bool ParseQuoteWord(const char *&String,std::string &Res); -bool ParseCWord(const char *&String,std::string &Res); -std::string QuoteString(const std::string &Str,const char *Bad); -std::string DeQuoteString(const std::string &Str); -std::string DeQuoteString(std::string::const_iterator const &begin, std::string::const_iterator const &end); +APT_PUBLIC bool UTF8ToCodeset(const char *codeset, const std::string &orig, std::string *dest); +APT_PUBLIC char *_strstrip(char *String); +APT_PUBLIC char *_strrstrip(char *String); // right strip only +APT_PUBLIC char *_strtabexpand(char *String,size_t Len); +APT_PUBLIC bool ParseQuoteWord(const char *&String,std::string &Res); +APT_PUBLIC bool ParseCWord(const char *&String,std::string &Res); +APT_PUBLIC std::string QuoteString(const std::string &Str,const char *Bad); +APT_PUBLIC std::string DeQuoteString(const std::string &Str); +APT_PUBLIC std::string DeQuoteString(std::string::const_iterator const &begin, std::string::const_iterator const &end); // unescape (\0XX and \xXX) from a string -std::string DeEscapeString(const std::string &input); - -std::string SizeToStr(double Bytes); -std::string TimeToStr(unsigned long Sec); -std::string Base64Encode(const std::string &Str); -std::string OutputInDepth(const unsigned long Depth, const char* Separator=" "); -std::string URItoFileName(const std::string &URI); -APT_DEPRECATED_MSG("Specify if GMT is required or a numeric timezone can be used") std::string TimeRFC1123(time_t Date); +APT_PUBLIC std::string DeEscapeString(const std::string &input); + +APT_PUBLIC std::string SizeToStr(double Bytes); +APT_PUBLIC std::string TimeToStr(unsigned long Sec); +APT_PUBLIC std::string Base64Encode(const std::string &Str); +APT_PUBLIC std::string OutputInDepth(const unsigned long Depth, const char* Separator=" "); +APT_PUBLIC std::string URItoFileName(const std::string &URI); /** returns a datetime string as needed by HTTP/1.1 and Debian files. * * Note: The date will always be represented in a UTC timezone @@ -76,7 +66,7 @@ APT_DEPRECATED_MSG("Specify if GMT is required or a numeric timezone can be used * of GMT as timezone instead. \b true means that the timezone should be denoted * as "+0000" while \b false uses "GMT". */ -std::string TimeRFC1123(time_t Date, bool const NumericTimezone); +APT_PUBLIC std::string TimeRFC1123(time_t Date, bool const NumericTimezone); /** parses time as needed by HTTP/1.1 and Debian files. * * HTTP/1.1 prefers dates in RFC1123 format (but the other two obsolete date formats @@ -92,26 +82,22 @@ std::string TimeRFC1123(time_t Date, bool const NumericTimezone); * parsing is successful, undefined otherwise. * @return \b true if parsing was successful, otherwise \b false. */ -bool RFC1123StrToTime(const char* const str,time_t &time) APT_MUSTCHECK; -bool FTPMDTMStrToTime(const char* const str,time_t &time) APT_MUSTCHECK; -APT_DEPRECATED_MSG("Use RFC1123StrToTime or FTPMDTMStrToTime as needed instead") bool StrToTime(const std::string &Val,time_t &Result); -std::string LookupTag(const std::string &Message,const char *Tag,const char *Default = 0); -int StringToBool(const std::string &Text,int Default = -1); -bool ReadMessages(int Fd, std::vector &List); -bool StrToNum(const char *Str,unsigned long &Res,unsigned Len,unsigned Base = 0); -bool StrToNum(const char *Str,unsigned long long &Res,unsigned Len,unsigned Base = 0); -bool Base256ToNum(const char *Str,unsigned long &Res,unsigned int Len); -bool Base256ToNum(const char *Str,unsigned long long &Res,unsigned int Len); -bool Hex2Num(const std::string &Str,unsigned char *Num,unsigned int Length); -#ifdef APT_PKG_EXPOSE_STRING_VIEW -APT_HIDDEN bool Hex2Num(const APT::StringView Str,unsigned char *Num,unsigned int Length); -#endif +APT_PUBLIC bool RFC1123StrToTime(const std::string &str,time_t &time) APT_MUSTCHECK; +APT_PUBLIC bool FTPMDTMStrToTime(const char* const str,time_t &time) APT_MUSTCHECK; +APT_PUBLIC std::string LookupTag(const std::string &Message,const char *Tag,const char *Default = 0); +APT_PUBLIC int StringToBool(const std::string &Text,int Default = -1); +APT_PUBLIC bool ReadMessages(int Fd, std::vector &List); +APT_PUBLIC bool StrToNum(const char *Str,unsigned long &Res,unsigned Len,unsigned Base = 0); +APT_PUBLIC bool StrToNum(const char *Str,unsigned long long &Res,unsigned Len,unsigned Base = 0); +APT_PUBLIC bool Base256ToNum(const char *Str,unsigned long &Res,unsigned int Len); +APT_PUBLIC bool Base256ToNum(const char *Str,unsigned long long &Res,unsigned int Len); +APT_PUBLIC bool Hex2Num(const APT::StringView Str,unsigned char *Num,unsigned int Length); // input changing string split -bool TokSplitString(char Tok,char *Input,char **List, +APT_PUBLIC bool TokSplitString(char Tok,char *Input,char **List, unsigned long ListMax); // split a given string by a char -std::vector VectorizeString(std::string const &haystack, char const &split) APT_PURE; +APT_PUBLIC std::vector VectorizeString(std::string const &haystack, char const &split) APT_PURE; /* \brief Return a vector of strings from string "input" where "sep" * is used as the delimiter string. @@ -127,14 +113,14 @@ std::vector VectorizeString(std::string const &haystack, char const * if used the string is only split on maxsplit places and the last * item in the vector contains the remainder string. */ -std::vector StringSplit(std::string const &input, +APT_PUBLIC std::vector StringSplit(std::string const &input, std::string const &sep, unsigned int maxsplit=std::numeric_limits::max()) APT_PURE; -void ioprintf(std::ostream &out,const char *format,...) APT_PRINTF(2); -void strprintf(std::string &out,const char *format,...) APT_PRINTF(2); -char *safe_snprintf(char *Buffer,char *End,const char *Format,...) APT_PRINTF(3); -bool CheckDomainList(const std::string &Host, const std::string &List); +APT_PUBLIC void ioprintf(std::ostream &out,const char *format,...) APT_PRINTF(2); +APT_PUBLIC void strprintf(std::string &out,const char *format,...) APT_PRINTF(2); +APT_PUBLIC char *safe_snprintf(char *Buffer,char *End,const char *Format,...) APT_PRINTF(3); +APT_PUBLIC bool CheckDomainList(const std::string &Host, const std::string &List); /* Do some compat mumbo jumbo */ #define tolower_ascii tolower_ascii_inline @@ -157,7 +143,7 @@ static inline int isspace_ascii_inline(int const c) return (c >= 9 && c <= 13) || c == ' '; } -std::string StripEpoch(const std::string &VerStr); +APT_PUBLIC std::string StripEpoch(const std::string &VerStr); #define APT_MKSTRCMP(name,func) \ inline APT_PURE int name(const char *A,const char *B) {return func(A,A+strlen(A),B,B+strlen(B));} \ @@ -172,20 +158,20 @@ inline APT_PURE int name(const std::string& A,const char *B) {return func(A.begi inline APT_PURE int name(const std::string& A,const std::string& B) {return func(A.begin(),A.end(),B.begin(),B.end());} \ inline APT_PURE int name(const std::string& A,const char *B,const char *BEnd) {return func(A.begin(),A.end(),B,BEnd);} -int APT_PURE stringcmp(const char *A,const char *AEnd,const char *B,const char *BEnd); -int APT_PURE stringcasecmp(const char *A,const char *AEnd,const char *B,const char *BEnd); +APT_PUBLIC int APT_PURE stringcmp(const char *A,const char *AEnd,const char *B,const char *BEnd); +APT_PUBLIC int APT_PURE stringcasecmp(const char *A,const char *AEnd,const char *B,const char *BEnd); /* We assume that GCC 3 indicates that libstdc++3 is in use too. In that case the definition of string::const_iterator is not the same as const char * and we need these extra functions */ #if __GNUC__ >= 3 -int APT_PURE stringcmp(std::string::const_iterator A,std::string::const_iterator AEnd, +APT_PUBLIC int APT_PURE stringcmp(std::string::const_iterator A,std::string::const_iterator AEnd, const char *B,const char *BEnd); -int APT_PURE stringcmp(std::string::const_iterator A,std::string::const_iterator AEnd, +APT_PUBLIC int APT_PURE stringcmp(std::string::const_iterator A,std::string::const_iterator AEnd, std::string::const_iterator B,std::string::const_iterator BEnd); -int APT_PURE stringcasecmp(std::string::const_iterator A,std::string::const_iterator AEnd, +APT_PUBLIC int APT_PURE stringcasecmp(std::string::const_iterator A,std::string::const_iterator AEnd, const char *B,const char *BEnd); -int APT_PURE stringcasecmp(std::string::const_iterator A,std::string::const_iterator AEnd, +APT_PUBLIC int APT_PURE stringcasecmp(std::string::const_iterator A,std::string::const_iterator AEnd, std::string::const_iterator B,std::string::const_iterator BEnd); inline APT_PURE int stringcmp(std::string::const_iterator A,std::string::const_iterator Aend,const char *B) {return stringcmp(A,Aend,B,B+strlen(B));} @@ -196,12 +182,12 @@ APT_MKSTRCMP2(stringcmp,stringcmp) APT_MKSTRCMP2(stringcasecmp,stringcasecmp) // Return the length of a NULL-terminated string array -size_t APT_PURE strv_length(const char **str_array); +APT_PUBLIC size_t APT_PURE strv_length(const char **str_array); inline const char *DeNull(const char *s) {return (s == 0?"(null)":s);} -class URI +class APT_PUBLIC URI { void CopyFrom(const std::string &From); @@ -220,8 +206,8 @@ class URI static std::string SiteOnly(const std::string &URI); static std::string ArchiveOnly(const std::string &URI); static std::string NoUserPassword(const std::string &URI); - - URI(std::string Path) {CopyFrom(Path);} + + explicit URI(std::string Path) { CopyFrom(Path); } URI() : Port(0) {} }; @@ -230,8 +216,8 @@ struct SubstVar const char *Subst; const std::string *Contents; }; -std::string SubstVar(std::string Str,const struct SubstVar *Vars); -std::string SubstVar(const std::string &Str,const std::string &Subst,const std::string &Contents); +APT_PUBLIC std::string SubstVar(std::string Str,const struct SubstVar *Vars); +APT_PUBLIC std::string SubstVar(const std::string &Str,const std::string &Subst,const std::string &Contents); struct RxChoiceList { @@ -239,7 +225,7 @@ struct RxChoiceList const char *Str; bool Hit; }; -unsigned long RegexChoice(RxChoiceList *Rxs,const char **ListBegin, +APT_PUBLIC unsigned long RegexChoice(RxChoiceList *Rxs,const char **ListBegin, const char **ListEnd); #endif diff --git a/apt-inst/deb/debfile.cc b/apt-pkg/deb/debfile.cc similarity index 100% rename from apt-inst/deb/debfile.cc rename to apt-pkg/deb/debfile.cc diff --git a/apt-inst/deb/debfile.h b/apt-pkg/deb/debfile.h similarity index 84% rename from apt-inst/deb/debfile.h rename to apt-pkg/deb/debfile.h index 23a76bf..48a75ae 100644 --- a/apt-inst/deb/debfile.h +++ b/apt-pkg/deb/debfile.h @@ -29,16 +29,10 @@ #include -#ifndef APT_8_CLEANER_HEADERS -#include -#endif -#ifndef APT_10_CLEANER_HEADERS -#include -#endif class FileFd; -class debDebFile +class APT_PUBLIC debDebFile { protected: @@ -56,17 +50,17 @@ class debDebFile const ARArchive::Member *GotoMember(const char *Name); inline FileFd &GetFile() {return File;}; - debDebFile(FileFd &File); + explicit debDebFile(FileFd &File); }; -class debDebFile::ControlExtract : public pkgDirStream +class APT_PUBLIC debDebFile::ControlExtract : public pkgDirStream { public: virtual bool DoItem(Item &Itm,int &Fd) APT_OVERRIDE; }; -class debDebFile::MemControlExtract : public pkgDirStream +class APT_PUBLIC debDebFile::MemControlExtract : public pkgDirStream { bool IsControl; @@ -87,7 +81,7 @@ class debDebFile::MemControlExtract : public pkgDirStream bool TakeControl(const void *Data,unsigned long long Size); MemControlExtract() : IsControl(false), Control(0), Length(0), Member("control") {}; - MemControlExtract(std::string Member) : IsControl(false), Control(0), Length(0), Member(Member) {}; + explicit MemControlExtract(std::string Member) : IsControl(false), Control(0), Length(0), Member(Member) {}; ~MemControlExtract() {delete [] Control;}; }; /*}}}*/ diff --git a/apt-pkg/deb/debindexfile.cc b/apt-pkg/deb/debindexfile.cc index 25e0a33..e1698e1 100644 --- a/apt-pkg/deb/debindexfile.cc +++ b/apt-pkg/deb/debindexfile.cc @@ -10,7 +10,9 @@ // Include Files /*{{{*/ #include +#include #include +#include #include #include #include @@ -21,6 +23,7 @@ #include #include #include +#include #include #include @@ -172,36 +175,23 @@ bool debDebPkgFileIndex::GetContent(std::ostream &content, std::string const &de if (stat(debfile.c_str(), &Buf) != 0) return false; - // get the control data out of the deb file via dpkg-deb -I - std::string dpkg = _config->Find("Dir::Bin::dpkg","dpkg-deb"); - std::vector Args; - Args.push_back(dpkg.c_str()); - Args.push_back("-I"); - Args.push_back(debfile.c_str()); - Args.push_back("control"); - Args.push_back(NULL); - FileFd PipeFd; - pid_t Child; - if(Popen((const char**)&Args[0], PipeFd, Child, FileFd::ReadOnly) == false) - return _error->Error("Popen failed"); + FileFd debFd(debfile, FileFd::ReadOnly); + debDebFile deb(debFd); + debDebFile::MemControlExtract extractor("control"); - std::string line; - bool first_line_seen = false; - while (PipeFd.ReadLine(line)) - { - if (first_line_seen == false) - { - if (line.empty()) - continue; - first_line_seen = true; - } - else if (line.empty()) - break; - content << line << "\n"; - } + if (not extractor.Read(deb)) + return _error->Error(_("Could not read meta data from %s"), debfile.c_str()); + + // trim off newlines + while (extractor.Control[extractor.Length] == '\n') + extractor.Control[extractor.Length--] = '\0'; + const char *Control = extractor.Control; + while (isspace_ascii(Control[0])) + Control++; + + content << Control << '\n'; content << "Filename: " << debfile << "\n"; content << "Size: " << std::to_string(Buf.st_size) << "\n"; - ExecWait(Child, "Popen"); return true; } @@ -256,7 +246,7 @@ pkgCache::PkgFileIterator debDebPkgFileIndex::FindInCache(pkgCache &Cache) const return File; } -std::string debDebPkgFileIndex::ArchiveInfo_impl(pkgCache::VerIterator const &Ver) const +std::string debDebPkgFileIndex::ArchiveInfo(pkgCache::VerIterator const &Ver) const { std::string Res = IndexFileName() + " "; Res.append(Ver.ParentPkg().Name()).append(" "); diff --git a/apt-pkg/deb/debindexfile.h b/apt-pkg/deb/debindexfile.h index 5c89f9c..57b3738 100644 --- a/apt-pkg/deb/debindexfile.h +++ b/apt-pkg/deb/debindexfile.h @@ -44,7 +44,7 @@ public: virtual pkgCacheListParser * CreateListParser(FileFd &Pkg) APT_OVERRIDE; - debStatusIndex(std::string const &File); + explicit debStatusIndex(std::string const &File); virtual ~debStatusIndex(); }; @@ -83,7 +83,7 @@ public: // Interface for the Cache Generator virtual bool HasPackages() const APT_OVERRIDE; - debTranslationsIndex(IndexTarget const &Target); + explicit debTranslationsIndex(IndexTarget const &Target); virtual ~debTranslationsIndex(); }; @@ -141,14 +141,13 @@ public: // Interface for acquire - debDebPkgFileIndex(std::string const &DebFile); + explicit debDebPkgFileIndex(std::string const &DebFile); virtual ~debDebPkgFileIndex(); - //FIXME: use proper virtual-handling on next ABI break - APT_HIDDEN std::string ArchiveInfo_impl(pkgCache::VerIterator const &Ver) const; + std::string ArchiveInfo(pkgCache::VerIterator const &Ver) const override; }; -class debDscFileIndex : public pkgDebianIndexRealFile +class APT_PUBLIC debDscFileIndex : public pkgDebianIndexRealFile { void * const d; @@ -162,7 +161,7 @@ public: virtual pkgSrcRecords::Parser *CreateSrcParser() const APT_OVERRIDE; virtual bool HasPackages() const APT_OVERRIDE {return false;}; - debDscFileIndex(std::string const &DscFile); + explicit debDscFileIndex(std::string const &DscFile); virtual ~debDscFileIndex(); }; @@ -175,7 +174,7 @@ public: virtual const Type *GetType() const APT_OVERRIDE APT_PURE; }; -class debStringPackageIndex : public pkgDebianIndexRealFile +class APT_PUBLIC debStringPackageIndex : public pkgDebianIndexRealFile { void * const d; protected: @@ -191,7 +190,7 @@ public: // Abort if the file does not exist. virtual bool Exists() const APT_OVERRIDE {return true;}; - debStringPackageIndex(std::string const &content); + explicit debStringPackageIndex(std::string const &content); virtual ~debStringPackageIndex(); }; #endif diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index 80ca10e..ab957a0 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -14,11 +14,10 @@ #include #include #include -#include #include #include +#include #include -#include #include #include #include @@ -166,8 +165,12 @@ bool debListParser::NewVersion(pkgCache::VerIterator &Ver) } // Parse the source package name pkgCache::GrpIterator G = Ver.ParentPkg().Group(); + + // Setup the defaults Ver->SourcePkgName = G->Name; Ver->SourceVerStr = Ver->VerStr; + + // Parse the name and version str if (Section.Find(pkgTagSection::Key::Source,Start,Stop) == true) { const char * const Space = static_cast(memchr(Start, ' ', Stop - Start)); @@ -194,30 +197,19 @@ bool debListParser::NewVersion(pkgCache::VerIterator &Ver) } APT::StringView const pkgname(Start, Stop - Start); + // Oh, our group is the wrong one for the source package. Make a new one. if (pkgname != G.Name()) { - for (pkgCache::PkgIterator P = G.PackageList(); P.end() == false; P = G.NextPkg(P)) - { - for (V = P.VersionList(); V.end() == false; ++V) - { - if (pkgname == V.SourcePkgName()) - { - Ver->SourcePkgName = V->SourcePkgName; - break; - } - } - if (V.end() == false) - break; - } - if (V.end() == true) - { - map_stringitem_t const idx = StoreString(pkgCacheGenerator::PKGNAME, pkgname); - G = Ver.ParentPkg().Group(); - Ver->SourcePkgName = idx; - } + if (not NewGroup(G, pkgname)) + return false; } } + // Link into by source package group. + Ver->SourcePkgName = G->Name; + Ver->NextInSource = G->VersionsInSource; + G->VersionsInSource = Ver.MapPointer(); + Ver->MultiArch = ParseMultiArch(true); // Archive Size Ver->Size = Section.FindULL(pkgTagSection::Key::Size); @@ -295,10 +287,10 @@ APT::StringView debListParser::Description_md5() if (desc == "\n") return StringView(); - MD5Summation md5; + Hashes md5(Hashes::MD5SUM); md5.Add(desc.data(), desc.size()); md5.Add("\n"); - MD5Buffer = md5.Result(); + MD5Buffer = md5.GetHashString(Hashes::MD5SUM).HashValue(); return StringView(MD5Buffer); } else if (likely(value.size() == 32)) @@ -346,7 +338,7 @@ bool debListParser::UsePackage(pkgCache::PkgIterator &Pkg, // ListParser::VersionHash - Compute a unique hash for this version /*{{{*/ // --------------------------------------------------------------------- /* */ -unsigned short debListParser::VersionHash() +uint32_t debListParser::VersionHash() { static constexpr pkgTagSection::Key Sections[] ={ pkgTagSection::Key::Installed_Size, @@ -357,7 +349,7 @@ unsigned short debListParser::VersionHash() pkgTagSection::Key::Conflicts, pkgTagSection::Key::Breaks, pkgTagSection::Key::Replaces}; - unsigned long Result = INIT_FCS; + unsigned long Result = 5381; for (auto I : Sections) { const char *Start; @@ -378,7 +370,7 @@ unsigned short debListParser::VersionHash() } if (isspace_ascii(*Start) != 0 || *Start == '=') continue; - Result = AddCRC16Byte(Result, tolower_ascii_unsafe(*Start)); + Result = 33 * Result + tolower_ascii_unsafe(*Start); } @@ -477,7 +469,7 @@ bool debStatusListParser::ParseStatus(pkgCache::PkgIterator &Pkg, if (Ver.end() == true) _error->Warning("Encountered status field in a non-version description"); else - Pkg->CurrentVer = Ver.Index(); + Pkg->CurrentVer = Ver.MapPointer(); } return true; @@ -545,28 +537,6 @@ const char *debListParser::ConvertRelation(const char *I,unsigned int &Op) // --------------------------------------------------------------------- /* This parses the dependency elements out of a standard string in place, bit by bit. */ -const char *debListParser::ParseDepends(const char *Start,const char *Stop, - std::string &Package,std::string &Ver,unsigned int &Op) - { return ParseDepends(Start, Stop, Package, Ver, Op, false, true, false); } -const char *debListParser::ParseDepends(const char *Start,const char *Stop, - std::string &Package,std::string &Ver,unsigned int &Op, - bool const &ParseArchFlags) - { return ParseDepends(Start, Stop, Package, Ver, Op, ParseArchFlags, true, false); } -const char *debListParser::ParseDepends(const char *Start,const char *Stop, - std::string &Package,std::string &Ver,unsigned int &Op, - bool const &ParseArchFlags, bool const &StripMultiArch) - { return ParseDepends(Start, Stop, Package, Ver, Op, ParseArchFlags, StripMultiArch, false); } -const char *debListParser::ParseDepends(const char *Start,const char *Stop, - string &Package,string &Ver, - unsigned int &Op, bool const &ParseArchFlags, - bool const &StripMultiArch, - bool const &ParseRestrictionsList) -{ - return debListParser::ParseDepends(Start, Stop, Package, Ver, Op, ParseArchFlags, - StripMultiArch, ParseRestrictionsList, - _config->Find("APT::Architecture")); -} - const char *debListParser::ParseDepends(const char *Start,const char *Stop, string &Package,string &Ver, unsigned int &Op, bool const &ParseArchFlags, @@ -584,23 +554,15 @@ const char *debListParser::ParseDepends(const char *Start,const char *Stop, return res; } -const char *debListParser::ParseDepends(const char *Start,const char *Stop, - StringView &Package,StringView &Ver, - unsigned int &Op, bool ParseArchFlags, - bool StripMultiArch, - bool ParseRestrictionsList) -{ - return debListParser::ParseDepends(Start, Stop, Package, Ver, Op, ParseArchFlags, - StripMultiArch, ParseRestrictionsList, - _config->Find("APT::Architecture")); -} -const char *debListParser::ParseDepends(const char *Start,const char *Stop, - StringView &Package,StringView &Ver, +const char *debListParser::ParseDepends(const char *Start, const char *Stop, + StringView &Package, StringView &Ver, unsigned int &Op, bool ParseArchFlags, bool StripMultiArch, - bool ParseRestrictionsList, string const &Arch) + bool ParseRestrictionsList, string Arch) { + if (Arch.empty()) + Arch = _config->Find("APT::Architecture"); // Strip off leading space for (;Start != Stop && isspace_ascii(*Start) != 0; ++Start); @@ -850,7 +812,8 @@ bool debListParser::ParseDepends(pkgCache::VerIterator &Ver, Start = ParseDepends(Start, Stop, Package, Version, Op, false, false, false, myArch); if (Start == 0) - return _error->Error("Problem parsing dependency %zu",static_cast(Key)); // TODO + return _error->Error("Problem parsing dependency %zu of %s:%s=%s", static_cast(Key), // TODO + Ver.ParentPkg().Name(), Ver.Arch(), Ver.VerStr()); size_t const found = Package.rfind(':'); if (found == string::npos) @@ -918,9 +881,9 @@ bool debListParser::ParseProvides(pkgCache::VerIterator &Ver) Start = ParseDepends(Start,Stop,Package,Version,Op, false, false, false); const size_t archfound = Package.rfind(':'); if (Start == 0) - return _error->Error("Problem parsing Provides line"); + return _error->Error("Problem parsing Provides line of %s:%s=%s", Ver.ParentPkg().Name(), Ver.Arch(), Ver.VerStr()); if (unlikely(Op != pkgCache::Dep::NoOp && Op != pkgCache::Dep::Equals)) { - _error->Warning("Ignoring Provides line with non-equal DepCompareOp for package %s", Package.to_string().c_str()); + _error->Warning("Ignoring non-equal Provides for package %s in %s:%s=%s", Package.to_string().c_str(), Ver.ParentPkg().Name(), Ver.Arch(), Ver.VerStr()); } else if (archfound != string::npos) { StringView spzArch = Package.substr(archfound + 1); if (spzArch != "any") @@ -1027,7 +990,7 @@ unsigned char debListParser::GetPrio(string Str) return Out; } /*}}}*/ -bool debListParser::SameVersion(unsigned short const Hash, /*{{{*/ +bool debListParser::SameVersion(uint32_t Hash, /*{{{*/ pkgCache::VerIterator const &Ver) { if (pkgCacheListParser::SameVersion(Hash, Ver) == false) diff --git a/apt-pkg/deb/deblistparser.h b/apt-pkg/deb/deblistparser.h index f02252d..eefce2a 100644 --- a/apt-pkg/deb/deblistparser.h +++ b/apt-pkg/deb/deblistparser.h @@ -11,20 +11,14 @@ #define PKGLIB_DEBLISTPARSER_H #include -#include #include #include #include #include #include -#ifdef APT_PKG_EXPOSE_STRING_VIEW #include -#endif -#ifndef APT_8_CLEANER_HEADERS -#include -#endif class FileFd; @@ -32,14 +26,12 @@ class APT_HIDDEN debListParser : public pkgCacheListParser { public: -#ifdef APT_PKG_EXPOSE_STRING_VIEW // Parser Helper struct WordList { APT::StringView Str; unsigned char Val; }; -#endif private: std::vector forceEssential; @@ -57,9 +49,7 @@ class APT_HIDDEN debListParser : public pkgCacheListParser unsigned int Type); bool ParseProvides(pkgCache::VerIterator &Ver); -#ifdef APT_PKG_EXPOSE_STRING_VIEW APT_HIDDEN static bool GrabWord(APT::StringView Word,const WordList *List,unsigned char &Out); -#endif APT_HIDDEN unsigned char ParseMultiArch(bool const showErrors); public: @@ -69,17 +59,13 @@ class APT_HIDDEN debListParser : public pkgCacheListParser // These all operate against the current section virtual std::string Package() APT_OVERRIDE; virtual bool ArchitectureAll() APT_OVERRIDE; -#ifdef APT_PKG_EXPOSE_STRING_VIEW virtual APT::StringView Architecture() APT_OVERRIDE; virtual APT::StringView Version() APT_OVERRIDE; -#endif virtual bool NewVersion(pkgCache::VerIterator &Ver) APT_OVERRIDE; virtual std::vector AvailableDescriptionLanguages() APT_OVERRIDE; -#ifdef APT_PKG_EXPOSE_STRING_VIEW virtual APT::StringView Description_md5() APT_OVERRIDE; -#endif - virtual unsigned short VersionHash() APT_OVERRIDE; - virtual bool SameVersion(unsigned short const Hash, pkgCache::VerIterator const &Ver) APT_OVERRIDE; + virtual uint32_t VersionHash() APT_OVERRIDE; + virtual bool SameVersion(uint32_t Hash, pkgCache::VerIterator const &Ver) APT_OVERRIDE; virtual bool UsePackage(pkgCache::PkgIterator &Pkg, pkgCache::VerIterator &Ver) APT_OVERRIDE; virtual map_filesize_t Offset() APT_OVERRIDE {return iOffset;}; @@ -87,41 +73,22 @@ class APT_HIDDEN debListParser : public pkgCacheListParser virtual bool Step() APT_OVERRIDE; - APT_PUBLIC static const char *ParseDepends(const char *Start,const char *Stop, - std::string &Package,std::string &Ver,unsigned int &Op); - APT_PUBLIC static const char *ParseDepends(const char *Start,const char *Stop, - std::string &Package,std::string &Ver,unsigned int &Op, - bool const &ParseArchFlags); - APT_PUBLIC static const char *ParseDepends(const char *Start,const char *Stop, - std::string &Package,std::string &Ver,unsigned int &Op, - bool const &ParseArchFlags, bool const &StripMultiArch); - APT_PUBLIC static const char *ParseDepends(const char *Start,const char *Stop, - std::string &Package,std::string &Ver,unsigned int &Op, - bool const &ParseArchFlags, bool const &StripMultiArch, - bool const &ParseRestrictionsList); - APT_PUBLIC static const char *ParseDepends(const char *Start,const char *Stop, - std::string &Package,std::string &Ver,unsigned int &Op, - bool const &ParseArchFlags, bool const &StripMultiArch, - bool const &ParseRestrictionsList, - std::string const &Arch); - -#ifdef APT_PKG_EXPOSE_STRING_VIEW - APT_HIDDEN static const char *ParseDepends(const char *Start,const char *Stop, - APT::StringView &Package, - APT::StringView &Ver,unsigned int &Op, - bool const ParseArchFlags = false, bool StripMultiArch = true, - bool const ParseRestrictionsList = false); - APT_HIDDEN static const char *ParseDepends(const char *Start,const char *Stop, - APT::StringView &Package, - APT::StringView &Ver,unsigned int &Op, - bool const ParseArchFlags, bool StripMultiArch, - bool const ParseRestrictionsList, - std::string const &Arch); -#endif + APT_PUBLIC static const char *ParseDepends(const char *Start, const char *Stop, + std::string &Package, std::string &Ver, unsigned int &Op, + bool const &ParseArchFlags = false, bool const &StripMultiArch = true, + bool const &ParseRestrictionsList = false, + std::string const &Arch = ""); + + APT_PUBLIC static const char *ParseDepends(const char *Start, const char *Stop, + APT::StringView &Package, + APT::StringView &Ver, unsigned int &Op, + bool const ParseArchFlags = false, bool StripMultiArch = true, + bool const ParseRestrictionsList = false, + std::string Arch = ""); APT_PUBLIC static const char *ConvertRelation(const char *I,unsigned int &Op); - debListParser(FileFd *File); + explicit debListParser(FileFd *File); virtual ~debListParser(); }; @@ -139,21 +106,19 @@ class APT_HIDDEN debDebFileParser : public debListParser class APT_HIDDEN debTranslationsParser : public debListParser { public: -#ifdef APT_PKG_EXPOSE_STRING_VIEW // a translation can never be a real package virtual APT::StringView Architecture() APT_OVERRIDE { return ""; } virtual APT::StringView Version() APT_OVERRIDE { return ""; } -#endif - debTranslationsParser(FileFd *File) + explicit debTranslationsParser(FileFd *File) : debListParser(File) {}; }; class APT_HIDDEN debStatusListParser : public debListParser { public: - virtual bool ParseStatus(pkgCache::PkgIterator &Pkg,pkgCache::VerIterator &Ver); - debStatusListParser(FileFd *File) + virtual bool ParseStatus(pkgCache::PkgIterator &Pkg,pkgCache::VerIterator &Ver) APT_OVERRIDE; + explicit debStatusListParser(FileFd *File) : debListParser(File) {}; }; #endif diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc index f88076a..a72f6d0 100644 --- a/apt-pkg/deb/debmetaindex.cc +++ b/apt-pkg/deb/debmetaindex.cc @@ -59,7 +59,7 @@ static std::string NormalizeSignedBy(std::string SignedBy, bool const SupportFil // but fingerprints are harder to fake than the others and this option is set once, // not interactively all the time so easy to type is not really a concern. std::transform(SignedBy.begin(), SignedBy.end(), SignedBy.begin(), [](char const c) { - return (isspace(c) == 0) ? c : ','; + return (isspace_ascii(c) == 0) ? c : ','; }); auto fingers = VectorizeString(SignedBy, ','); auto const isAnEmptyString = [](std::string const &s) { return s.empty(); }; @@ -109,7 +109,7 @@ class APT_HIDDEN debReleaseIndexPrivate /*{{{*/ std::vector SupportedComponents; std::map const ReleaseOptions; - debReleaseIndexPrivate(std::map const &Options) : CheckValidUntil(metaIndex::TRI_UNSET), ValidUntilMin(0), ValidUntilMax(0), CheckDate(metaIndex::TRI_UNSET), DateMaxFuture(0), NotBefore(0), ReleaseOptions(Options) {} + explicit debReleaseIndexPrivate(std::map const &Options) : CheckValidUntil(metaIndex::TRI_UNSET), ValidUntilMin(0), ValidUntilMax(0), CheckDate(metaIndex::TRI_UNSET), DateMaxFuture(0), NotBefore(0), ReleaseOptions(Options) {} }; /*}}}*/ // ReleaseIndex::MetaIndex* - display helpers /*{{{*/ @@ -447,12 +447,12 @@ bool debReleaseIndex::Load(std::string const &Filename, std::string * const Erro // FIXME: find better tag name SupportsAcquireByHash = Section.FindB("Acquire-By-Hash", false); - SetOrigin(Section.FindS("Origin")); - SetLabel(Section.FindS("Label")); - SetVersion(Section.FindS("Version")); + Origin = Section.FindS("Origin"); + Label = Section.FindS("Label"); + Version = Section.FindS("Version"); Suite = Section.FindS("Suite"); Codename = Section.FindS("Codename"); - SetReleaseNotes(Section.FindS("Release-Notes")); + ReleaseNotes = Section.FindS("Release-Notes"); { std::string const archs = Section.FindS("Architectures"); if (archs.empty() == false) @@ -484,7 +484,7 @@ bool debReleaseIndex::Load(std::string const &Filename, std::string * const Erro else defaultpin = 1; } - SetDefaultPin(defaultpin); + DefaultPin = defaultpin; } bool FoundHashSum = false; @@ -510,9 +510,6 @@ bool debReleaseIndex::Load(std::string const &Filename, std::string * const Erro Sum->MetaKeyFilename = Name; Sum->Size = Size; Sum->Hashes.FileSize(Size); - APT_IGNORE_DEPRECATED_PUSH - Sum->Hash = hs; - APT_IGNORE_DEPRECATED_POP Entries[Name] = Sum; } Entries[Name]->Hashes.push_back(hs); @@ -531,7 +528,7 @@ bool debReleaseIndex::Load(std::string const &Filename, std::string * const Erro AuthPossible = true; std::string const StrDate = Section.FindS("Date"); - if (RFC1123StrToTime(StrDate.c_str(), Date) == false) + if (RFC1123StrToTime(StrDate, Date) == false) { _error->Warning( _("Invalid '%s' entry in Release file %s"), "Date", Filename.c_str()); Date = 0; @@ -570,7 +567,7 @@ bool debReleaseIndex::Load(std::string const &Filename, std::string * const Erro // if we have a Valid-Until header in the Release file, use it as default if (StrValidUntil.empty() == false) { - if (RFC1123StrToTime(StrValidUntil.c_str(), ValidUntil) == false) + if (RFC1123StrToTime(StrValidUntil, ValidUntil) == false) { if (ErrorText != NULL) strprintf(*ErrorText, _("Invalid '%s' entry in Release file %s"), "Valid-Until", Filename.c_str()); @@ -918,7 +915,6 @@ bool debReleaseIndex::Merge(pkgCacheGenerator &Gen,OpProgress * /*Prog*/) const/ #undef APT_INRELEASE Section.FindFlag("NotAutomatic", File->Flags, pkgCache::Flag::NotAutomatic); Section.FindFlag("ButAutomaticUpgrades", File->Flags, pkgCache::Flag::ButAutomaticUpgrades); - Section.FindFlag("Packages-Require-Authorization", File->Flags, pkgCache::Flag::PackagesRequireAuthorization); return true; } @@ -989,7 +985,7 @@ class APT_HIDDEN debSLTypeDebian : public pkgSourceList::Type /*{{{*/ return std::find(minus.begin(), minus.end(), v) != minus.end(); }), Values.end()); } - return Values; + return std::move(Values); } static std::vector parsePlusMinusOptions(std::string const &Name, std::map const &Options, std::vector const &defaultValues) @@ -1098,8 +1094,8 @@ class APT_HIDDEN debSLTypeDebian : public pkgSourceList::Type /*{{{*/ { std::vector ret; ret.reserve(Options.size()); - for (auto &&O: Options) - ret.emplace_back(O.first); + std::transform(Options.begin(), Options.end(), std::back_inserter(ret), + [](auto &&O) { return O.first; }); std::sort(ret.begin(), ret.end()); return ret; } diff --git a/apt-pkg/deb/debmetaindex.h b/apt-pkg/deb/debmetaindex.h index 864ac3e..5576ff8 100644 --- a/apt-pkg/deb/debmetaindex.h +++ b/apt-pkg/deb/debmetaindex.h @@ -8,12 +8,6 @@ #include #include -#ifndef APT_8_CLEANER_HEADERS -#include -#endif -#ifndef APT_10_CLEANER_HEADERS -#include -#endif class pkgAcquire; class pkgIndexFile; @@ -61,11 +55,11 @@ class APT_HIDDEN debReleaseIndex : public metaIndex std::map GetReleaseOptions(); virtual bool IsTrusted() const APT_OVERRIDE; - bool IsArchitectureSupported(std::string const &arch) const; - bool IsArchitectureAllSupportedFor(IndexTarget const &target) const; - bool HasSupportForComponent(std::string const &component) const; + bool IsArchitectureSupported(std::string const &arch) const override; + bool IsArchitectureAllSupportedFor(IndexTarget const &target) const override; + bool HasSupportForComponent(std::string const &component) const override; - APT_PURE time_t GetNotBefore() const; + APT_PURE time_t GetNotBefore() const override; void AddComponent(std::string const &sourcesEntry, bool const isSrc, std::string const &Name, diff --git a/apt-pkg/deb/debrecords.h b/apt-pkg/deb/debrecords.h index 7c3b902..10ef917 100644 --- a/apt-pkg/deb/debrecords.h +++ b/apt-pkg/deb/debrecords.h @@ -20,9 +20,6 @@ #include -#ifndef APT_8_CLEANER_HEADERS -#include -#endif class APT_HIDDEN debRecordParserBase : public pkgRecords::Parser { @@ -85,7 +82,7 @@ class APT_HIDDEN debDebFileRecordParser : public debRecordParserBase public: virtual std::string FileName() APT_OVERRIDE; - debDebFileRecordParser(std::string FileName); + explicit debDebFileRecordParser(std::string FileName); virtual ~debDebFileRecordParser(); }; diff --git a/apt-pkg/deb/debsrcrecords.cc b/apt-pkg/deb/debsrcrecords.cc index 9656fca..0b6cf1f 100644 --- a/apt-pkg/deb/debsrcrecords.cc +++ b/apt-pkg/deb/debsrcrecords.cc @@ -158,30 +158,7 @@ bool debSrcRecordParser::BuildDepends(std::vector &F) -{ - std::vector F2; - if (Files2(F2) == false) - return false; - for (std::vector::const_iterator f2 = F2.begin(); f2 != F2.end(); ++f2) - { - pkgSrcRecords::File2 f; -#if __GNUC__ >= 4 - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - f.MD5Hash = f2->MD5Hash; - f.Size = f2->Size; -#if __GNUC__ >= 4 - #pragma GCC diagnostic pop -#endif - f.Path = f2->Path; - f.Type = f2->Type; - F.push_back(f); - } - return true; -} -bool debSrcRecordParser::Files2(std::vector &List) +bool debSrcRecordParser::Files(std::vector &List) { List.clear(); @@ -231,7 +208,7 @@ bool debSrcRecordParser::Files2(std::vector &List) path = Base + path; // look if we have a record for this file already - std::vector::iterator file = List.begin(); + std::vector::iterator file = List.begin(); for (; file != List.end(); ++file) if (file->Path == path) break; @@ -239,12 +216,6 @@ bool debSrcRecordParser::Files2(std::vector &List) // we have it already, store the new hash and be done if (file != List.end()) { - if (checksumField == "Files") - { - APT_IGNORE_DEPRECATED_PUSH - file->MD5Hash = hash; - APT_IGNORE_DEPRECATED_POP - } // an error here indicates that we have two different hashes for the same file if (file->Hashes.push_back(hashString) == false) return _error->Error("Error parsing checksum in %s of source package %s", checksumField.c_str(), Package().c_str()); @@ -252,18 +223,12 @@ bool debSrcRecordParser::Files2(std::vector &List) } // we haven't seen this file yet - pkgSrcRecords::File2 F; + pkgSrcRecords::File F; F.Path = path; F.FileSize = strtoull(size.c_str(), NULL, 10); F.Hashes.push_back(hashString); F.Hashes.FileSize(F.FileSize); - APT_IGNORE_DEPRECATED_PUSH - F.Size = F.FileSize; - if (checksumField == "Files") - F.MD5Hash = hash; - APT_IGNORE_DEPRECATED_POP - // Try to guess what sort of file it is we are getting. string::size_type Pos = F.Path.length()-1; while (1) diff --git a/apt-pkg/deb/debsrcrecords.h b/apt-pkg/deb/debsrcrecords.h index 45617f6..b572d34 100644 --- a/apt-pkg/deb/debsrcrecords.h +++ b/apt-pkg/deb/debsrcrecords.h @@ -53,7 +53,6 @@ class APT_HIDDEN debSrcRecordParser : public pkgSrcRecords::Parser return std::string(Start,Stop); }; virtual bool Files(std::vector &F) APT_OVERRIDE; - bool Files2(std::vector &F); debSrcRecordParser(std::string const &File,pkgIndexFile const *Index); virtual ~debSrcRecordParser(); diff --git a/apt-pkg/deb/debsystem.cc b/apt-pkg/deb/debsystem.cc index 0c7e9ff..6904879 100644 --- a/apt-pkg/deb/debsystem.cc +++ b/apt-pkg/deb/debsystem.cc @@ -19,8 +19,10 @@ #include #include #include +#include #include +#include #include #include @@ -75,7 +77,47 @@ debSystem::~debSystem() // --------------------------------------------------------------------- /* This mirrors the operations dpkg does when it starts up. Note the checking of the updates directory. */ -bool debSystem::Lock() +static int GetLockMaybeWait(std::string const &file, OpProgress *Progress, int &timeoutSec) +{ + struct ScopedAbsoluteProgress + { + ScopedAbsoluteProgress() { _config->Set("APT::Internal::OpProgress::Absolute", true); } + ~ScopedAbsoluteProgress() { _config->Set("APT::Internal::OpProgress::Absolute", false); } + } _scopedAbsoluteProgress; + int fd = -1; + if (timeoutSec == 0 || Progress == nullptr) + return GetLock(file); + + if (_config->FindB("Debug::Locking", false)) + std::cerr << "Lock: " << file << " wait " << timeoutSec << std::endl; + + for (int i = 0; timeoutSec < 0 || i < timeoutSec; i++) + { + _error->PushToStack(); + fd = GetLock(file); + if (fd != -1 || errno == EPERM) + { + if (timeoutSec > 0) + timeoutSec -= i; + _error->MergeWithStack(); + return fd; + } + std::string poppedError; + std::string completeError; + _error->PopMessage(poppedError); + _error->RevertToStack(); + + strprintf(completeError, _("Waiting for cache lock: %s"), poppedError.c_str()); + sleep(1); + Progress->OverallProgress(i, timeoutSec, 0, completeError); + } + + if (timeoutSec > 0) + timeoutSec = 1; + return fd; +} + +bool debSystem::Lock(OpProgress *const Progress) { // Disable file locking if (_config->FindB("Debug::NoLocking",false) == true || d->LockCount > 0) @@ -84,10 +126,12 @@ bool debSystem::Lock() return true; } + // This will count downwards. + int lockTimeOutSec = _config->FindI("DPkg::Lock::Timeout", 0); // Create the lockfile string AdminDir = flNotFile(_config->FindFile("Dir::State::status")); string FrontendLockFile = AdminDir + "lock-frontend"; - d->FrontendLockFD = GetLock(FrontendLockFile); + d->FrontendLockFD = GetLockMaybeWait(FrontendLockFile, Progress, lockTimeOutSec); if (d->FrontendLockFD == -1) { if (errno == EACCES || errno == EAGAIN) @@ -97,7 +141,7 @@ bool debSystem::Lock() return _error->Error(_("Unable to acquire the dpkg frontend lock (%s), " "are you root?"),FrontendLockFile.c_str()); } - if (LockInner() == false) + if (LockInner(Progress, lockTimeOutSec) == false) { close(d->FrontendLockFD); return false; @@ -126,9 +170,10 @@ bool debSystem::Lock() return true; } -bool debSystem::LockInner() { +bool debSystem::LockInner(OpProgress *const Progress, int timeOutSec) +{ string AdminDir = flNotFile(_config->FindFile("Dir::State::status")); - d->LockFD = GetLock(AdminDir + "lock"); + d->LockFD = GetLockMaybeWait(AdminDir + "lock", Progress, timeOutSec); if (d->LockFD == -1) { if (errno == EACCES || errno == EAGAIN) @@ -419,7 +464,7 @@ pid_t debSystem::ExecDpkg(std::vector const &sArgs, int * const inp return dpkg; } /*}}}*/ -bool debSystem::SupportsMultiArch() /*{{{*/ +bool debSystem::MultiArchSupported() const /*{{{*/ { std::vector Args = GetDpkgBaseCommand(); Args.push_back("--assert-multi-arch"); @@ -440,7 +485,7 @@ bool debSystem::SupportsMultiArch() /*{{{*/ return false; } /*}}}*/ -std::vector debSystem::SupportedArchitectures() /*{{{*/ +std::vector debSystem::ArchitecturesSupported() const /*{{{*/ { std::vector archs; { diff --git a/apt-pkg/deb/debsystem.h b/apt-pkg/deb/debsystem.h index 4503676..2e5a855 100644 --- a/apt-pkg/deb/debsystem.h +++ b/apt-pkg/deb/debsystem.h @@ -19,9 +19,6 @@ class pkgPackageManager; class debSystemPrivate; class pkgDepCache; -#ifndef APT_10_CLEANER_HEADERS -class debStatusIndex; -#endif class debSystem : public pkgSystem { @@ -30,8 +27,7 @@ class debSystem : public pkgSystem APT_HIDDEN bool CheckUpdates(); public: - - virtual bool Lock() APT_OVERRIDE; + virtual bool Lock(OpProgress *const Progress) APT_OVERRIDE; virtual bool UnLock(bool NoErrors = false) APT_OVERRIDE; virtual pkgPackageManager *CreatePM(pkgDepCache *Cache) const APT_OVERRIDE; virtual bool Initialize(Configuration &Cnf) APT_OVERRIDE; @@ -48,12 +44,12 @@ class debSystem : public pkgSystem APT_HIDDEN static std::vector GetDpkgBaseCommand(); APT_HIDDEN static void DpkgChrootDirectory(); APT_HIDDEN static pid_t ExecDpkg(std::vector const &sArgs, int * const inputFd, int * const outputFd, bool const DiscardOutput); - APT_HIDDEN static bool SupportsMultiArch(); - APT_HIDDEN static std::vector SupportedArchitectures(); + bool MultiArchSupported() const override; + std::vector ArchitecturesSupported() const override; - APT_HIDDEN bool LockInner(); - APT_HIDDEN bool UnLockInner(bool NoErrors=false); - APT_HIDDEN bool IsLocked(); + bool LockInner(OpProgress *const Progress, int timeoutSec) override; + bool UnLockInner(bool NoErrors=false) override; + bool IsLocked() override; }; extern debSystem debSys; diff --git a/apt-pkg/deb/debversion.h b/apt-pkg/deb/debversion.h index db70c87..5c328a9 100644 --- a/apt-pkg/deb/debversion.h +++ b/apt-pkg/deb/debversion.h @@ -15,7 +15,7 @@ #include -class debVersioningSystem : public pkgVersioningSystem +class APT_PUBLIC debVersioningSystem : public pkgVersioningSystem { public: @@ -36,6 +36,6 @@ class debVersioningSystem : public pkgVersioningSystem debVersioningSystem(); }; -extern debVersioningSystem debVS; +extern APT_PUBLIC debVersioningSystem debVS; #endif diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index ffa880d..ef73881 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -301,10 +301,6 @@ bool pkgDPkgPM::Remove(PkgIterator Pkg,bool Purge) // --------------------------------------------------------------------- /* This is part of the helper script communication interface, it sends very complete information down to the other end of the pipe.*/ -bool pkgDPkgPM::SendV2Pkgs(FILE *F) -{ - return SendPkgsInfo(F, 2); -} bool pkgDPkgPM::SendPkgsInfo(FILE * const F, unsigned int const &Version) { // This version of APT supports only v3, so don't sent higher versions @@ -1223,17 +1219,6 @@ void pkgDPkgPM::BuildPackagesProgressMap() ++PackagesTotal; } /*}}}*/ -bool pkgDPkgPM::Go(int StatusFd) /*{{{*/ -{ - APT::Progress::PackageManager *progress = NULL; - if (StatusFd == -1) - progress = APT::Progress::PackageManagerProgressFactory(); - else - progress = new APT::Progress::PackageManagerProgressFd(StatusFd); - - return Go(progress); -} - /*}}}*/ void pkgDPkgPM::StartPtyMagic() /*{{{*/ { if (_config->FindB("Dpkg::Use-Pty", true) == false) @@ -1726,7 +1711,7 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress) // create log OpenLog(); - bool dpkgMultiArch = debSystem::SupportsMultiArch(); + bool dpkgMultiArch = _system->MultiArchSupported(); // start pty magic before the loop StartPtyMagic(); @@ -1790,6 +1775,7 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress) case Item::Remove: case Item::Purge: ADDARGC("--force-depends"); + ADDARGC("--abort-after=1"); if (std::any_of(I, J, ItemIsEssential)) { ADDARGC("--force-remove-essential"); @@ -2028,8 +2014,7 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress) else setenv("DPKG_COLORS", "never", 0); - if (dynamic_cast(_system) != nullptr - && dynamic_cast(_system)->IsLocked() == true) { + if (_system->IsLocked() == true) { setenv("DPKG_FRONTEND_LOCKED", "true", 1); } if (_config->Find("DPkg::Path", "").empty() == false) @@ -2475,7 +2460,7 @@ void pkgDPkgPM::WriteApportReport(const char *pkgpath, const char *errormsg) { fprintf(report, "Df:\n"); - FILE *log = popen("/bin/df -l","r"); + FILE *log = popen("/bin/df -l -x squashfs","r"); if(log != NULL) { char buf[1024]; diff --git a/apt-pkg/deb/dpkgpm.h b/apt-pkg/deb/dpkgpm.h index c073b50..caf7d35 100644 --- a/apt-pkg/deb/dpkgpm.h +++ b/apt-pkg/deb/dpkgpm.h @@ -18,22 +18,15 @@ #include #include -#ifndef APT_10_CLEANER_HEADERS -#include -#endif class pkgDepCache; namespace APT { namespace Progress { class PackageManager; } } -#ifndef APT_8_CLEANER_HEADERS -using std::vector; -using std::map; -#endif class pkgDPkgPMPrivate; -class pkgDPkgPM : public pkgPackageManager +class APT_PUBLIC pkgDPkgPM : public pkgPackageManager { private: pkgDPkgPMPrivate * const d; @@ -93,7 +86,6 @@ class pkgDPkgPM : public pkgPackageManager // Helpers bool RunScriptsWithPkgs(const char *Cnf); - APT_DEPRECATED_MSG("Use SendPkgInfo with the version as parameter instead") bool SendV2Pkgs(FILE *F); bool SendPkgsInfo(FILE * const F, unsigned int const &Version); void WriteHistoryTag(std::string const &tag, std::string value); std::string ExpandShortPackageName(pkgDepCache &Cache, @@ -127,13 +119,12 @@ class pkgDPkgPM : public pkgPackageManager virtual bool Remove(PkgIterator Pkg,bool Purge = false) APT_OVERRIDE; virtual bool Go(APT::Progress::PackageManager *progress) APT_OVERRIDE; - APT_DEPRECATED_MSG("Use overload with explicit progress manager") virtual bool Go(int StatusFd=-1) APT_OVERRIDE; virtual void Reset() APT_OVERRIDE; public: - pkgDPkgPM(pkgDepCache *Cache); + explicit pkgDPkgPM(pkgDepCache *Cache); virtual ~pkgDPkgPM(); APT_HIDDEN static bool ExpandPendingCalls(std::vector &List, pkgDepCache &Cache); diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 510f2d3..052e3de 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -1723,21 +1723,6 @@ void pkgDepCache::StateCache::Update(PkgIterator Pkg,pkgCache &Cache) Status = 2; } /*}}}*/ -// StateCache::StripEpoch - Remove the epoch specifier from the version /*{{{*/ -// --------------------------------------------------------------------- -/* */ -const char *pkgDepCache::StateCache::StripEpoch(const char *Ver) -{ - if (Ver == 0) - return 0; - - // Strip any epoch - char const * const I = strchr(Ver, ':'); - if (I == nullptr) - return Ver; - return I + 1; -} - /*}}}*/ // Policy::GetCandidateVer - Returns the Candidate install version /*{{{*/ // --------------------------------------------------------------------- /* The default just returns the highest available version that is not diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h index 724bf56..17d9a9c 100644 --- a/apt-pkg/depcache.h +++ b/apt-pkg/depcache.h @@ -48,24 +48,16 @@ #include #include -#ifndef APT_8_CLEANER_HEADERS -#include -#include -#endif -#ifndef APT_10_CLEANER_HEADERS -#include -#include -#endif class OpProgress; class pkgVersioningSystem; -class pkgDepCache : protected pkgCache::Namespace +class APT_PUBLIC pkgDepCache : protected pkgCache::Namespace { public: /** \brief An arbitrary predicate on packages. */ - class InRootSetFunc + class APT_PUBLIC InRootSetFunc { public: virtual bool InRootSet(const pkgCache::PkgIterator &/*pkg*/) {return false;}; @@ -164,7 +156,7 @@ class pkgDepCache : protected pkgCache::Namespace * to a std::set of pointers to them and use those to store * information about what happened in a group in the group. */ - class ActionGroup + class APT_PUBLIC ActionGroup { void * const d; pkgDepCache &cache; @@ -201,7 +193,7 @@ class pkgDepCache : protected pkgCache::Namespace /** \brief Returns \b true for packages matching a regular * expression in APT::NeverAutoRemove. */ - class DefaultRootSetFunc : public InRootSetFunc, public Configuration::MatchAgainstConfig + class APT_PUBLIC DefaultRootSetFunc : public InRootSetFunc, public Configuration::MatchAgainstConfig { public: DefaultRootSetFunc() : Configuration::MatchAgainstConfig("APT::NeverAutoRemove") {}; @@ -210,7 +202,7 @@ class pkgDepCache : protected pkgCache::Namespace bool InRootSet(const pkgCache::PkgIterator &pkg) APT_OVERRIDE { return pkg.end() == false && Match(pkg.Name()); }; }; - struct StateCache + struct APT_PUBLIC StateCache { // text versions of the two version fields const char *CandVersion; @@ -243,7 +235,6 @@ class pkgDepCache : protected pkgCache::Namespace unsigned char DepState; // DepState Flags // Update of candidate version - APT_DEPRECATED_MSG("Use the method of the same name in contrib/strutl.h instead if you must") const char *StripEpoch(const char *Ver) APT_PURE; void Update(PkgIterator Pkg,pkgCache &Cache); // Various test members for the current status of the package @@ -273,7 +264,7 @@ class pkgDepCache : protected pkgCache::Namespace void UpdateVerState(PkgIterator const &Pkg); // User Policy control - class Policy + class APT_PUBLIC Policy { public: Policy() { @@ -357,16 +348,13 @@ class pkgDepCache : protected pkgCache::Namespace inline Header &Head() {return *Cache->HeaderP;}; inline GrpIterator GrpBegin() {return Cache->GrpBegin();}; inline PkgIterator PkgBegin() {return Cache->PkgBegin();}; - inline GrpIterator FindGrp(std::string const &Name) {return Cache->FindGrp(Name);}; - inline PkgIterator FindPkg(std::string const &Name) {return Cache->FindPkg(Name);}; - inline PkgIterator FindPkg(std::string const &Name, std::string const &Arch) {return Cache->FindPkg(Name, Arch);}; + inline GrpIterator FindGrp(APT::StringView Name) {return Cache->FindGrp(Name);}; + inline PkgIterator FindPkg(APT::StringView Name) {return Cache->FindPkg(Name);}; + inline PkgIterator FindPkg(APT::StringView Name, APT::StringView Arch) {return Cache->FindPkg(Name, Arch);}; inline pkgCache &GetCache() {return *Cache;}; inline pkgVersioningSystem &VS() {return *Cache->VS;}; - // Policy implementation - APT_DEPRECATED_MSG("Confusingly named method which returns the candidate as chosen by policy (NOT as chosen via .SetCandidateVersion!). You probably want to use .GetCandidateVersion instead.") inline VerIterator GetCandidateVer(PkgIterator const &Pkg) {return /* GetCandidateVersion(Pkg); but for API compat: */ LocalPolicy->GetCandidateVer(Pkg);}; - inline bool IsImportantDep(DepIterator Dep) const {return LocalPolicy->IsImportantDep(Dep);}; inline Policy &GetPolicy() {return *LocalPolicy;}; diff --git a/apt-inst/dirstream.cc b/apt-pkg/dirstream.cc similarity index 100% rename from apt-inst/dirstream.cc rename to apt-pkg/dirstream.cc diff --git a/apt-inst/dirstream.h b/apt-pkg/dirstream.h similarity index 98% rename from apt-inst/dirstream.h rename to apt-pkg/dirstream.h index 0f0e348..e5b226e 100644 --- a/apt-inst/dirstream.h +++ b/apt-pkg/dirstream.h @@ -26,7 +26,7 @@ #include -class pkgDirStream +class APT_PUBLIC pkgDirStream { public: diff --git a/apt-pkg/edsp.cc b/apt-pkg/edsp.cc index 2e39be3..fe6f55d 100644 --- a/apt-pkg/edsp.cc +++ b/apt-pkg/edsp.cc @@ -73,52 +73,6 @@ template static bool WriteOkay(FileFd &output, Data&&... data) } /*}}}*/ // WriteScenarioVersion /*{{{*/ -static void WriteScenarioVersion(pkgDepCache &Cache, FILE* output, pkgCache::PkgIterator const &Pkg, - pkgCache::VerIterator const &Ver) -{ - fprintf(output, "Package: %s\n", Pkg.Name()); - fprintf(output, "Source: %s\n", Ver.SourcePkgName()); - fprintf(output, "Architecture: %s\n", Ver.Arch()); - fprintf(output, "Version: %s\n", Ver.VerStr()); - fprintf(output, "Source-Version: %s\n", Ver.SourceVerStr()); - if (Pkg.CurrentVer() == Ver) - fprintf(output, "Installed: yes\n"); - if (Pkg->SelectedState == pkgCache::State::Hold || - (Cache[Pkg].Keep() == true && Cache[Pkg].Protect() == true)) - fprintf(output, "Hold: yes\n"); - fprintf(output, "APT-ID: %d\n", Ver->ID); - if (PrioMap[Ver->Priority] != nullptr) - fprintf(output, "Priority: %s\n", PrioMap[Ver->Priority]); - if ((Pkg->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential) - fprintf(output, "Essential: yes\n"); - if (Ver->Section != 0) - fprintf(output, "Section: %s\n", Ver.Section()); - if ((Ver->MultiArch & pkgCache::Version::Allowed) == pkgCache::Version::Allowed) - fprintf(output, "Multi-Arch: allowed\n"); - else if ((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign) - fprintf(output, "Multi-Arch: foreign\n"); - else if ((Ver->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same) - fprintf(output, "Multi-Arch: same\n"); - std::set Releases; - for (pkgCache::VerFileIterator I = Ver.FileList(); I.end() == false; ++I) { - pkgCache::PkgFileIterator File = I.File(); - if (File.Flagged(pkgCache::Flag::NotSource) == false) { - string Release = File.RelStr(); - if (!Release.empty()) - Releases.insert(Release); - } - } - if (!Releases.empty()) { - fprintf(output, "APT-Release:\n"); - for (std::set::iterator R = Releases.begin(); R != Releases.end(); ++R) - fprintf(output, " %s\n", R->c_str()); - } - fprintf(output, "APT-Pin: %d\n", Cache.GetPolicy().GetPriority(Ver)); - if (Cache.GetCandidateVersion(Pkg) == Ver) - fprintf(output, "APT-Candidate: yes\n"); - if ((Cache[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto) - fprintf(output, "APT-Automatic: yes\n"); -} static bool WriteScenarioVersion(FileFd &output, pkgCache::PkgIterator const &Pkg, pkgCache::VerIterator const &Ver) { @@ -138,47 +92,9 @@ static bool WriteScenarioVersion(FileFd &output, pkgCache::PkgIterator const &Pk } /*}}}*/ // WriteScenarioDependency /*{{{*/ -static void WriteScenarioDependency( FILE* output, pkgCache::VerIterator const &Ver) -{ - std::array dependencies; - bool orGroup = false; - for (pkgCache::DepIterator Dep = Ver.DependsList(); Dep.end() == false; ++Dep) - { - if (Dep.IsImplicit() == true) - continue; - if (orGroup == false) - dependencies[Dep->Type].append(", "); - dependencies[Dep->Type].append(Dep.TargetPkg().Name()); - if (Dep->Version != 0) - dependencies[Dep->Type].append(" (").append(pkgCache::CompTypeDeb(Dep->CompareOp)).append(" ").append(Dep.TargetVer()).append(")"); - if ((Dep->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or) - { - dependencies[Dep->Type].append(" | "); - orGroup = true; - } - else - orGroup = false; - } - for (size_t i = 1; i < dependencies.size(); ++i) - if (dependencies[i].empty() == false) - fprintf(output, "%s: %s\n", DepMap[i], dependencies[i].c_str()+2); - string provides; - for (pkgCache::PrvIterator Prv = Ver.ProvidesList(); Prv.end() == false; ++Prv) - { - if (Prv.IsMultiArchImplicit() == true) - continue; - if (provides.empty() == false) - provides.append(", "); - provides.append(Prv.Name()); - if (Prv->ProvideVersion != 0) - provides.append(" (= ").append(Prv.ProvideVersion()).append(")"); - } - if (provides.empty() == false) - fprintf(output, "Provides: %s\n", provides.c_str()); -} static bool WriteScenarioDependency(FileFd &output, pkgCache::VerIterator const &Ver, bool const OnlyCritical) { - std::array dependencies; + std::array dependencies; bool orGroup = false; for (pkgCache::DepIterator Dep = Ver.DependsList(); Dep.end() == false; ++Dep) { @@ -220,67 +136,12 @@ static bool WriteScenarioDependency(FileFd &output, pkgCache::VerIterator const } /*}}}*/ // WriteScenarioLimitedDependency /*{{{*/ -static void WriteScenarioLimitedDependency(FILE* output, - pkgCache::VerIterator const &Ver, - APT::PackageSet const &pkgset) -{ - std::array dependencies; - bool orGroup = false; - for (pkgCache::DepIterator Dep = Ver.DependsList(); Dep.end() == false; ++Dep) - { - if (Dep.IsImplicit() == true) - continue; - if (orGroup == false) - { - if (pkgset.find(Dep.TargetPkg()) == pkgset.end()) - continue; - if (dependencies[Dep->Type].empty() == false) - dependencies[Dep->Type].append(", "); - } - else if (pkgset.find(Dep.TargetPkg()) == pkgset.end()) - { - if ((Dep->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or) - continue; - dependencies[Dep->Type].erase(dependencies[Dep->Type].end()-3, dependencies[Dep->Type].end()); - orGroup = false; - continue; - } - dependencies[Dep->Type].append(Dep.TargetPkg().Name()); - if (Dep->Version != 0) - dependencies[Dep->Type].append(" (").append(pkgCache::CompTypeDeb(Dep->CompareOp)).append(" ").append(Dep.TargetVer()).append(")"); - if ((Dep->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or) - { - dependencies[Dep->Type].append(" | "); - orGroup = true; - } - else - orGroup = false; - } - for (size_t i = 1; i < dependencies.size(); ++i) - if (dependencies[i].empty() == false) - fprintf(output, "%s: %s\n", DepMap[i], dependencies[i].c_str()); - string provides; - for (pkgCache::PrvIterator Prv = Ver.ProvidesList(); Prv.end() == false; ++Prv) - { - if (Prv.IsMultiArchImplicit() == true) - continue; - if (pkgset.find(Prv.ParentPkg()) == pkgset.end()) - continue; - if (provides.empty() == false) - provides.append(", "); - provides.append(Prv.Name()); - if (Prv->ProvideVersion != 0) - provides.append(" (= ").append(Prv.ProvideVersion()).append(")"); - } - if (provides.empty() == false) - fprintf(output, "Provides: %s\n", provides.c_str()); -} static bool WriteScenarioLimitedDependency(FileFd &output, pkgCache::VerIterator const &Ver, std::vector const &pkgset, bool const OnlyCritical) { - std::array dependencies; + std::array dependencies; bool orGroup = false; for (pkgCache::DepIterator Dep = Ver.DependsList(); Dep.end() == false; ++Dep) { @@ -391,30 +252,6 @@ static bool WriteScenarioEDSPVersion(pkgDepCache &Cache, FileFd &output, pkgCach } /*}}}*/ // EDSP::WriteScenario - to the given file descriptor /*{{{*/ -bool EDSP::WriteScenario(pkgDepCache &Cache, FILE* output, OpProgress *Progress) -{ - if (Progress != NULL) - Progress->SubProgress(Cache.Head().VersionCount, _("Send scenario to solver")); - decltype(Cache.Head().VersionCount) p = 0; - std::vector archs = APT::Configuration::getArchitectures(); - for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg) - { - std::string const arch = Pkg.Arch(); - if (std::find(archs.begin(), archs.end(), arch) == archs.end()) - continue; - for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() == false; ++Ver, ++p) - { - if (SkipUnavailableVersions(Cache, Pkg, Ver)) - continue; - WriteScenarioVersion(Cache, output, Pkg, Ver); - WriteScenarioDependency(output, Ver); - fprintf(output, "\n"); - if (Progress != NULL && p % 100 == 0) - Progress->Progress(p); - } - } - return true; -} bool EDSP::WriteScenario(pkgDepCache &Cache, FileFd &output, OpProgress *Progress) { if (Progress != NULL) @@ -443,28 +280,6 @@ bool EDSP::WriteScenario(pkgDepCache &Cache, FileFd &output, OpProgress *Progres } /*}}}*/ // EDSP::WriteLimitedScenario - to the given file descriptor /*{{{*/ -bool EDSP::WriteLimitedScenario(pkgDepCache &Cache, FILE* output, - APT::PackageSet const &pkgset, - OpProgress *Progress) -{ - if (Progress != NULL) - Progress->SubProgress(Cache.Head().VersionCount, _("Send scenario to solver")); - decltype(Cache.Head().PackageCount) p = 0; - for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg, ++p) - for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() == false; ++Ver) - { - if (SkipUnavailableVersions(Cache, Pkg, Ver)) - continue; - WriteScenarioVersion(Cache, output, Pkg, Ver); - WriteScenarioLimitedDependency(output, Ver, pkgset); - fprintf(output, "\n"); - if (Progress != NULL && p % 100 == 0) - Progress->Progress(p); - } - if (Progress != NULL) - Progress->Done(); - return true; -} bool EDSP::WriteLimitedScenario(pkgDepCache &Cache, FileFd &output, std::vector const &pkgset, OpProgress *Progress) @@ -495,60 +310,6 @@ bool EDSP::WriteLimitedScenario(pkgDepCache &Cache, FileFd &output, } /*}}}*/ // EDSP::WriteRequest - to the given file descriptor /*{{{*/ -bool EDSP::WriteRequest(pkgDepCache &Cache, FILE* output, bool const Upgrade, - bool const DistUpgrade, bool const AutoRemove, - OpProgress *Progress) -{ - if (Progress != NULL) - Progress->SubProgress(Cache.Head().PackageCount, _("Send request to solver")); - decltype(Cache.Head().PackageCount) p = 0; - string del, inst; - for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg, ++p) - { - if (Progress != NULL && p % 100 == 0) - Progress->Progress(p); - string* req; - pkgDepCache::StateCache &P = Cache[Pkg]; - if (P.Delete() == true) - req = &del; - else if (P.NewInstall() == true || P.Upgrade() == true || P.ReInstall() == true || - (P.Mode == pkgDepCache::ModeKeep && (P.iFlags & pkgDepCache::Protected) == pkgDepCache::Protected)) - req = &inst; - else - continue; - req->append(" ").append(Pkg.FullName()); - } - fprintf(output, "Request: EDSP 0.5\n"); - - const char *arch = _config->Find("APT::Architecture").c_str(); - std::vector archs = APT::Configuration::getArchitectures(); - fprintf(output, "Architecture: %s\n", arch); - fprintf(output, "Architectures:"); - for (std::vector::const_iterator a = archs.begin(); a != archs.end(); ++a) - fprintf(output, " %s", a->c_str()); - fprintf(output, "\n"); - - if (del.empty() == false) - fprintf(output, "Remove: %s\n", del.c_str()+1); - if (inst.empty() == false) - fprintf(output, "Install: %s\n", inst.c_str()+1); - if (Upgrade == true) - fprintf(output, "Upgrade: yes\n"); - if (DistUpgrade == true) - fprintf(output, "Dist-Upgrade: yes\n"); - if (AutoRemove == true) - fprintf(output, "Autoremove: yes\n"); - auto const solver = _config->Find("APT::Solver", "internal"); - fprintf(output, "Solver: %s\n", solver.c_str()); - auto const solverconf = std::string("APT::Solver::") + solver + "::"; - if (_config->FindB(solverconf + "Strict-Pinning", _config->FindB("APT::Solver::Strict-Pinning", true)) == false) - fprintf(output, "Strict-Pinning: no\n"); - auto const solverpref = _config->Find(solverconf + "Preferences", _config->Find("APT::Solver::Preferences", "")); - if (solverpref.empty() == false) - fprintf(output, "Preferences: %s\n", solverpref.c_str()); - fprintf(output, "\n"); - return true; -} bool EDSP::WriteRequest(pkgDepCache &Cache, FileFd &output, unsigned int const flags, OpProgress *Progress) @@ -822,33 +583,7 @@ bool EDSP::ReadRequest(int const input, std::list &install, } } return false; -} -bool EDSP::ReadRequest(int const input, std::list &install, - std::list &remove, bool &upgrade, - bool &distUpgrade, bool &autoRemove) -{ - unsigned int flags; - auto const ret = ReadRequest(input, install, remove, flags); - autoRemove = (flags & Request::AUTOREMOVE); - if (flags & Request::UPGRADE_ALL) - { - if (flags & (Request::FORBID_NEW_INSTALL | Request::FORBID_REMOVE)) - { - upgrade = true; - distUpgrade = false; - } else { - upgrade = false; - distUpgrade = false; - } - } - else - { - upgrade = false; - distUpgrade = false; - } - return ret; -} - /*}}}*/ +} /*}}}*/ // EDSP::ApplyRequest - first stanza from the given file descriptor /*{{{*/ bool EDSP::ApplyRequest(std::list const &install, std::list const &remove, @@ -875,37 +610,6 @@ bool EDSP::ApplyRequest(std::list const &install, } /*}}}*/ // EDSP::WriteSolutionStanza - to the given file descriptor /*{{{*/ -bool EDSP::WriteSolution(pkgDepCache &Cache, FILE* output) -{ - bool const Debug = _config->FindB("Debug::EDSP::WriteSolution", false); - for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false; ++Pkg) - { - if (Cache[Pkg].Delete() == true) - { - fprintf(output, "Remove: %d\n", _system->GetVersionMapping(Pkg.CurrentVer()->ID)); - if (Debug == true) - fprintf(output, "Package: %s\nVersion: %s\n", Pkg.FullName().c_str(), Pkg.CurrentVer().VerStr()); - } - else if (Cache[Pkg].NewInstall() == true || Cache[Pkg].Upgrade() == true) - { - pkgCache::VerIterator const CandVer = Cache.GetCandidateVersion(Pkg); - fprintf(output, "Install: %d\n", _system->GetVersionMapping(CandVer->ID)); - if (Debug == true) - fprintf(output, "Package: %s\nVersion: %s\n", Pkg.FullName().c_str(), CandVer.VerStr()); - } - else if (Cache[Pkg].Garbage == true) - { - fprintf(output, "Autoremove: %d\n", _system->GetVersionMapping(Pkg.CurrentVer()->ID)); - if (Debug == true) - fprintf(output, "Package: %s\nVersion: %s\n", Pkg.FullName().c_str(), Pkg.CurrentVer().VerStr()); - } - else - continue; - fprintf(output, "\n"); - } - - return true; -} bool EDSP::WriteSolutionStanza(FileFd &output, char const * const Type, pkgCache::VerIterator const &Ver) { bool Okay = output.Failed() == false; @@ -916,13 +620,6 @@ bool EDSP::WriteSolutionStanza(FileFd &output, char const * const Type, pkgCache } /*}}}*/ // EDSP::WriteProgess - pulse to the given file descriptor /*{{{*/ -bool EDSP::WriteProgress(unsigned short const percent, const char* const message, FILE* output) { - fprintf(output, "Progress: %s\n", TimeRFC1123(time(NULL), true).c_str()); - fprintf(output, "Percentage: %d\n", percent); - fprintf(output, "Message: %s\n\n", message); - fflush(output); - return true; -} bool EDSP::WriteProgress(unsigned short const percent, const char* const message, FileFd &output) { return WriteOkay(output, "Progress: ", TimeRFC1123(time(NULL), true), "\n", "Percentage: ", percent, "\n", @@ -934,11 +631,6 @@ static std::string formatMessage(std::string const &msg) { return SubstVar(SubstVar(APT::String::Strip(msg), "\n\n", "\n.\n"), "\n", "\n "); } -bool EDSP::WriteError(char const * const uuid, std::string const &message, FILE* output) { - fprintf(output, "Error: %s\n", uuid); - fprintf(output, "Message: %s\n\n", formatMessage(message).c_str()); - return true; -} bool EDSP::WriteError(char const * const uuid, std::string const &message, FileFd &output) { return WriteOkay(output, "Error: ", uuid, "\n", "Message: ", formatMessage(message), @@ -1019,11 +711,6 @@ static pid_t ExecuteExternal(char const* const type, char const * const binary, // EDSP::ExecuteSolver - fork requested solver and setup ipc pipes {{{*/ pid_t EDSP::ExecuteSolver(const char* const solver, int * const solver_in, int * const solver_out, bool) { return ExecuteExternal("solver", solver, "Dir::Bin::Solvers", solver_in, solver_out); -} -bool EDSP::ExecuteSolver(const char* const solver, int *solver_in, int *solver_out) { - if (ExecuteSolver(solver, solver_in, solver_out, true) == 0) - return false; - return true; } /*}}}*/ static bool CreateDumpFile(char const * const id, char const * const type, FileFd &output)/*{{{*/ @@ -1086,20 +773,7 @@ bool EDSP::ResolveExternal(const char* const solver, pkgDepCache &Cache, if (ExecWait(solver_pid, solver)) return ret; return false; -} -bool EDSP::ResolveExternal(const char* const solver, pkgDepCache &Cache, - bool const upgrade, bool const distUpgrade, - bool const autoRemove, OpProgress *Progress) { - unsigned int flags = 0; - if (autoRemove) - flags |= Request::AUTOREMOVE; - if (upgrade) - flags |= Request::UPGRADE_ALL | Request::FORBID_REMOVE | Request::FORBID_NEW_INSTALL; - if (distUpgrade) - flags |= Request::UPGRADE_ALL; - return ResolveExternal(solver, Cache, flags, Progress); -} - /*}}}*/ +} /*}}}*/ bool EIPP::OrderInstall(char const * const solver, pkgPackageManager * const PM, /*{{{*/ unsigned int const flags, OpProgress * const Progress) diff --git a/apt-pkg/edsp.h b/apt-pkg/edsp.h index 2f18d76..434010d 100644 --- a/apt-pkg/edsp.h +++ b/apt-pkg/edsp.h @@ -19,10 +19,6 @@ #include #include -#ifndef APT_8_CLEANER_HEADERS -#include -#include -#endif class pkgDepCache; class OpProgress; @@ -53,14 +49,9 @@ namespace EDSP /*{{{*/ * * \return true if request was composed successfully, otherwise false */ - bool WriteRequest(pkgDepCache &Cache, FileFd &output, + APT_PUBLIC bool WriteRequest(pkgDepCache &Cache, FileFd &output, unsigned int const flags = 0, OpProgress *Progress = NULL); - bool WriteRequest(pkgDepCache &Cache, FILE* output, - bool const upgrade = false, - bool const distUpgrade = false, - bool const autoRemove = false, - OpProgress *Progress = NULL) APT_DEPRECATED_MSG("Use FileFd-based interface instead"); /** \brief creates the scenario representing the package universe * @@ -79,8 +70,7 @@ namespace EDSP /*{{{*/ * * \return true if universe was composed successfully, otherwise false */ - bool WriteScenario(pkgDepCache &Cache, FileFd &output, OpProgress *Progress = NULL); - bool WriteScenario(pkgDepCache &Cache, FILE* output, OpProgress *Progress = NULL) APT_DEPRECATED_MSG("Use FileFd-based interface instead"); + APT_PUBLIC bool WriteScenario(pkgDepCache &Cache, FileFd &output, OpProgress *Progress = NULL); /** \brief creates a limited scenario representing the package universe * @@ -97,12 +87,9 @@ namespace EDSP /*{{{*/ * * \return true if universe was composed successfully, otherwise false */ - bool WriteLimitedScenario(pkgDepCache &Cache, FileFd &output, + APT_PUBLIC bool WriteLimitedScenario(pkgDepCache &Cache, FileFd &output, std::vector const &pkgset, OpProgress *Progress = NULL); - bool WriteLimitedScenario(pkgDepCache &Cache, FILE* output, - APT::PackageSet const &pkgset, - OpProgress *Progress = NULL) APT_DEPRECATED_MSG("Use FileFd-based interface instead"); /** \brief waits and acts on the information returned from the solver * @@ -118,7 +105,7 @@ namespace EDSP /*{{{*/ * * \return true if a solution is found and applied correctly, otherwise false */ - bool ReadResponse(int const input, pkgDepCache &Cache, OpProgress *Progress = NULL); + APT_PUBLIC bool ReadResponse(int const input, pkgDepCache &Cache, OpProgress *Progress = NULL); /** \brief search and read the request stanza for action later * @@ -136,11 +123,8 @@ namespace EDSP /*{{{*/ * * \return true if the request could be found and worked on, otherwise false */ - bool ReadRequest(int const input, std::list &install, + APT_PUBLIC bool ReadRequest(int const input, std::list &install, std::list &remove, unsigned int &flags); - APT_DEPRECATED_MSG("use the flag-based version instead") bool ReadRequest(int const input, std::list &install, - std::list &remove, bool &upgrade, - bool &distUpgrade, bool &autoRemove); /** \brief takes the request lists and applies it on the cache * @@ -154,7 +138,7 @@ namespace EDSP /*{{{*/ * * \return false if the request couldn't be applied, true otherwise */ - bool ApplyRequest(std::list const &install, + APT_PUBLIC bool ApplyRequest(std::list const &install, std::list const &remove, pkgDepCache &Cache); @@ -170,8 +154,7 @@ namespace EDSP /*{{{*/ * * \return true if stanza could be written, otherwise false */ - bool WriteSolutionStanza(FileFd &output, char const * const Type, pkgCache::VerIterator const &Ver); - bool WriteSolution(pkgDepCache &Cache, FILE* output) APT_DEPRECATED_MSG("Use FileFd-based single-stanza interface instead"); + APT_PUBLIC bool WriteSolutionStanza(FileFd &output, char const * const Type, pkgCache::VerIterator const &Ver); /** \brief sends a progress report * @@ -179,8 +162,7 @@ namespace EDSP /*{{{*/ * \param message the solver wants the user to see * \param output the front-end listens for progress report */ - bool WriteProgress(unsigned short const percent, const char* const message, FileFd &output); - bool WriteProgress(unsigned short const percent, const char* const message, FILE* output) APT_DEPRECATED_MSG("Use FileFd-based interface instead"); + APT_PUBLIC bool WriteProgress(unsigned short const percent, const char* const message, FileFd &output); /** \brief sends an error report * @@ -197,8 +179,7 @@ namespace EDSP /*{{{*/ * \param message is free form text to describe the error * \param output the front-end listens for error messages */ - bool WriteError(char const * const uuid, std::string const &message, FileFd &output); - bool WriteError(char const * const uuid, std::string const &message, FILE* output) APT_DEPRECATED_MSG("Use FileFd-based interface instead"); + APT_PUBLIC bool WriteError(char const * const uuid, std::string const &message, FileFd &output); /** \brief executes the given solver and returns the pipe ends @@ -212,8 +193,7 @@ namespace EDSP /*{{{*/ * * \return PID of the started solver or 0 if failure occurred */ - pid_t ExecuteSolver(const char* const solver, int * const solver_in, int * const solver_out, bool /*overload*/); - APT_DEPRECATED_MSG("add a dummy bool parameter to use the overload returning a pid_t") bool ExecuteSolver(const char* const solver, int *solver_in, int *solver_out); + APT_PUBLIC pid_t ExecuteSolver(const char* const solver, int * const solver_in, int * const solver_out, bool /*overload*/); /** \brief call an external resolver to handle the request * @@ -227,12 +207,9 @@ namespace EDSP /*{{{*/ * \return true if the solver has successfully solved the problem, * otherwise false */ - bool ResolveExternal(const char* const solver, pkgDepCache &Cache, + APT_PUBLIC bool ResolveExternal(const char* const solver, pkgDepCache &Cache, unsigned int const flags = 0, OpProgress *Progress = NULL); - APT_DEPRECATED_MSG("use the flag-based version instead") bool ResolveExternal(const char* const solver, pkgDepCache &Cache, - bool const upgrade, bool const distUpgrade, - bool const autoRemove, OpProgress *Progress = NULL); } /*}}}*/ class pkgPackageManager; @@ -265,10 +242,10 @@ namespace EIPP /*{{{*/ REINSTALL, REMOVE }; - bool ReadRequest(int const input, + APT_PUBLIC bool ReadRequest(int const input, std::list> &actions, unsigned int &flags); - bool ApplyRequest(std::list> &actions, + APT_PUBLIC bool ApplyRequest(std::list> &actions, pkgDepCache &Cache); } /*}}}*/ diff --git a/apt-pkg/edsp/edspindexfile.cc b/apt-pkg/edsp/edspindexfile.cc index 1a8af89..faade6e 100644 --- a/apt-pkg/edsp/edspindexfile.cc +++ b/apt-pkg/edsp/edspindexfile.cc @@ -96,7 +96,7 @@ class APT_HIDDEN edspIFType: public pkgIndexFile::Type public: virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator const &) const APT_OVERRIDE { - // we don't have a record parser for this type as the file is not presistent + // we don't have a record parser for this type as the file is not persistent return NULL; }; edspIFType() {Label = "EDSP scenario file";}; @@ -112,7 +112,7 @@ class APT_HIDDEN eippIFType: public pkgIndexFile::Type public: virtual pkgRecords::Parser *CreatePkgParser(pkgCache::PkgFileIterator const &) const APT_OVERRIDE { - // we don't have a record parser for this type as the file is not presistent + // we don't have a record parser for this type as the file is not persistent return NULL; }; eippIFType() {Label = "EIPP scenario file";}; diff --git a/apt-pkg/edsp/edspindexfile.h b/apt-pkg/edsp/edspindexfile.h index 4ac0f9d..42ef3fe 100644 --- a/apt-pkg/edsp/edspindexfile.h +++ b/apt-pkg/edsp/edspindexfile.h @@ -11,9 +11,6 @@ #include #include -#ifndef APT_8_CLEANER_HEADERS -#include -#endif class OpProgress; class pkgCacheGenerator; @@ -29,7 +26,7 @@ public: virtual bool Exists() const APT_OVERRIDE; virtual bool HasPackages() const APT_OVERRIDE; - edspLikeIndex(std::string const &File); + explicit edspLikeIndex(std::string const &File); virtual ~edspLikeIndex(); }; @@ -42,7 +39,7 @@ protected: public: virtual const Type *GetType() const APT_OVERRIDE APT_PURE; - edspIndex(std::string const &File); + explicit edspIndex(std::string const &File); virtual ~edspIndex(); }; @@ -55,7 +52,7 @@ protected: public: virtual const Type *GetType() const APT_OVERRIDE APT_PURE; - eippIndex(std::string const &File); + explicit eippIndex(std::string const &File); virtual ~eippIndex(); }; diff --git a/apt-pkg/edsp/edsplistparser.cc b/apt-pkg/edsp/edsplistparser.cc index 31bded9..34b9ec9 100644 --- a/apt-pkg/edsp/edsplistparser.cc +++ b/apt-pkg/edsp/edsplistparser.cc @@ -15,10 +15,10 @@ #include #include #include -#include #include #include #include +#include #include #include @@ -59,7 +59,7 @@ APT::StringView edspLikeListParser::Description_md5() } /*}}}*/ // ListParser::VersionHash - Compute a unique hash for this version /*{{{*/ -unsigned short edspLikeListParser::VersionHash() +uint32_t edspLikeListParser::VersionHash() { if (Section.Exists("APT-Hash") == true) return Section.FindI("APT-Hash"); @@ -87,7 +87,7 @@ bool edspListParser::ParseStatus(pkgCache::PkgIterator &Pkg, if (state != 0) { Pkg->CurrentState = pkgCache::State::Installed; - Pkg->CurrentVer = Ver.Index(); + Pkg->CurrentVer = Ver.MapPointer(); } if (Section.FindB("APT-Automatic", false)) @@ -162,7 +162,7 @@ bool eippListParser::ParseStatus(pkgCache::PkgIterator &Pkg, case pkgCache::State::TriggersAwaited: case pkgCache::State::TriggersPending: case pkgCache::State::Installed: - Pkg->CurrentVer = Ver.Index(); + Pkg->CurrentVer = Ver.MapPointer(); break; } break; diff --git a/apt-pkg/edsp/edsplistparser.h b/apt-pkg/edsp/edsplistparser.h index 59c759f..41bfd1f 100644 --- a/apt-pkg/edsp/edsplistparser.h +++ b/apt-pkg/edsp/edsplistparser.h @@ -13,16 +13,10 @@ #include #include -#include #include #include -#ifndef APT_8_CLEANER_HEADERS -#include -#include -#include -#endif namespace APT { class StringView; @@ -33,9 +27,9 @@ class APT_HIDDEN edspLikeListParser : public debListParser virtual bool NewVersion(pkgCache::VerIterator &Ver) APT_OVERRIDE; virtual std::vector AvailableDescriptionLanguages() APT_OVERRIDE; virtual APT::StringView Description_md5() APT_OVERRIDE; - virtual unsigned short VersionHash() APT_OVERRIDE; + virtual uint32_t VersionHash() APT_OVERRIDE; - edspLikeListParser(FileFd *File); + explicit edspLikeListParser(FileFd *File); virtual ~edspLikeListParser(); }; @@ -48,7 +42,7 @@ protected: virtual bool ParseStatus(pkgCache::PkgIterator &Pkg,pkgCache::VerIterator &Ver) APT_OVERRIDE; public: - edspListParser(FileFd *File); + explicit edspListParser(FileFd *File); virtual ~edspListParser(); }; @@ -58,7 +52,7 @@ protected: virtual bool ParseStatus(pkgCache::PkgIterator &Pkg,pkgCache::VerIterator &Ver) APT_OVERRIDE; public: - eippListParser(FileFd *File); + explicit eippListParser(FileFd *File); virtual ~eippListParser(); }; #endif diff --git a/apt-pkg/edsp/edspsystem.cc b/apt-pkg/edsp/edspsystem.cc index 47f5e06..c86f1ed 100644 --- a/apt-pkg/edsp/edspsystem.cc +++ b/apt-pkg/edsp/edspsystem.cc @@ -39,7 +39,7 @@ eippSystem::eippSystem() : edspLikeSystem("Debian APT planner interface") } /*}}}*/ // System::Lock - Get the lock /*{{{*/ -bool edspLikeSystem::Lock() +bool edspLikeSystem::Lock(OpProgress *) { return true; } diff --git a/apt-pkg/edsp/edspsystem.h b/apt-pkg/edsp/edspsystem.h index 0855bb5..97c2d66 100644 --- a/apt-pkg/edsp/edspsystem.h +++ b/apt-pkg/edsp/edspsystem.h @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -28,7 +29,7 @@ protected: std::unique_ptr StatusFile; public: - virtual bool Lock() APT_OVERRIDE APT_PURE; + virtual bool Lock(OpProgress * const Progress) APT_OVERRIDE APT_PURE; virtual bool UnLock(bool NoErrors = false) APT_OVERRIDE APT_PURE; virtual pkgPackageManager *CreatePM(pkgDepCache *Cache) const APT_OVERRIDE APT_PURE; virtual bool Initialize(Configuration &Cnf) APT_OVERRIDE; @@ -37,7 +38,14 @@ public: virtual bool FindIndex(pkgCache::PkgFileIterator File, pkgIndexFile *&Found) const APT_OVERRIDE; - edspLikeSystem(char const * const Label); + bool MultiArchSupported() const override { return true; } + std::vector ArchitecturesSupported() const override { return {}; }; + + bool LockInner(OpProgress * const, int) override { return _error->Error("LockInner is not implemented"); }; + bool UnLockInner(bool) override { return _error->Error("UnLockInner is not implemented"); }; + bool IsLocked() override { return true; }; + + explicit edspLikeSystem(char const * const Label); virtual ~edspLikeSystem(); }; diff --git a/apt-pkg/indexcopy.cc b/apt-pkg/indexcopy.cc index 41cecde..9fa9361 100644 --- a/apt-pkg/indexcopy.cc +++ b/apt-pkg/indexcopy.cc @@ -640,16 +640,6 @@ bool SigVerify::CopyAndVerify(string CDROM,string Name,vector &SigList, return true; } /*}}}*/ -// SigVerify::RunGPGV - deprecated wrapper calling ExecGPGV /*{{{*/ -APT_NORETURN bool SigVerify::RunGPGV(std::string const &File, std::string const &FileOut, - int const &statusfd, int fd[2]) { - ExecGPGV(File, FileOut, statusfd, fd); -} -APT_NORETURN bool SigVerify::RunGPGV(std::string const &File, std::string const &FileOut, - int const &statusfd) { - ExecGPGV(File, FileOut, statusfd); -} - /*}}}*/ bool TranslationsCopy::CopyTranslations(string CDROM,string Name, /*{{{*/ vector &List, pkgCdromStatus *log) { diff --git a/apt-pkg/indexcopy.h b/apt-pkg/indexcopy.h index dc3b985..41be154 100644 --- a/apt-pkg/indexcopy.h +++ b/apt-pkg/indexcopy.h @@ -17,21 +17,13 @@ #include -#ifndef APT_10_CLEANER_HEADERS -#include -class FileFd; -#endif -#ifndef APT_8_CLEANER_HEADERS -using std::string; -using std::vector; -#endif class pkgTagSection; class pkgCdromStatus; class FileFd; class metaIndex; -class IndexCopy /*{{{*/ +class APT_PUBLIC IndexCopy /*{{{*/ { /** \brief dpointer placeholder (for later in case we need it) */ void * const d; @@ -59,7 +51,7 @@ class IndexCopy /*{{{*/ virtual ~IndexCopy(); }; /*}}}*/ -class PackageCopy : public IndexCopy /*{{{*/ +class APT_PUBLIC PackageCopy : public IndexCopy /*{{{*/ { void * const d; protected: @@ -74,7 +66,7 @@ class PackageCopy : public IndexCopy /*{{{*/ virtual ~PackageCopy(); }; /*}}}*/ -class SourceCopy : public IndexCopy /*{{{*/ +class APT_PUBLIC SourceCopy : public IndexCopy /*{{{*/ { void * const d; protected: @@ -89,7 +81,7 @@ class SourceCopy : public IndexCopy /*{{{*/ virtual ~SourceCopy(); }; /*}}}*/ -class TranslationsCopy /*{{{*/ +class APT_PUBLIC TranslationsCopy /*{{{*/ { void * const d; protected: @@ -103,7 +95,7 @@ class TranslationsCopy /*{{{*/ virtual ~TranslationsCopy(); }; /*}}}*/ -class SigVerify /*{{{*/ +class APT_PUBLIC SigVerify /*{{{*/ { /** \brief dpointer placeholder (for later in case we need it) */ void * const d; @@ -116,11 +108,6 @@ class SigVerify /*{{{*/ bool CopyAndVerify(std::string CDROM,std::string Name,std::vector &SigList, std::vector PkgList,std::vector SrcList); - APT_DEPRECATED_MSG("Use ExecGPGV instead") static bool RunGPGV(std::string const &File, std::string const &FileOut, - int const &statusfd, int fd[2]); - APT_DEPRECATED_MSG("Use ExecGPGV instead") static bool RunGPGV(std::string const &File, std::string const &FileOut, - int const &statusfd = -1); - SigVerify(); virtual ~SigVerify(); }; diff --git a/apt-pkg/indexfile.cc b/apt-pkg/indexfile.cc index 85d0e87..ef3486a 100644 --- a/apt-pkg/indexfile.cc +++ b/apt-pkg/indexfile.cc @@ -65,11 +65,8 @@ pkgIndexFile::pkgIndexFile(bool const Trusted) : /*{{{*/ } /*}}}*/ // IndexFile::ArchiveInfo - Stub /*{{{*/ -std::string pkgIndexFile::ArchiveInfo(pkgCache::VerIterator const &Ver) const +std::string pkgIndexFile::ArchiveInfo(pkgCache::VerIterator const &) const { - debDebPkgFileIndex const * const debfile = dynamic_cast(this); - if (debfile != nullptr) - return debfile->ArchiveInfo_impl(Ver); return std::string(); } /*}}}*/ @@ -86,32 +83,6 @@ std::string pkgIndexFile::SourceInfo(pkgSrcRecords::Parser const &/*Record*/, return std::string(); } /*}}}*/ -// IndexFile::TranslationsAvailable - Check if will use Translation /*{{{*/ -bool pkgIndexFile::TranslationsAvailable() { - return (APT::Configuration::getLanguages().empty() != true); -} - /*}}}*/ -// IndexFile::CheckLanguageCode - Check the Language Code /*{{{*/ -bool pkgIndexFile::CheckLanguageCode(const char * const Lang) -{ - if (strlen(Lang) == 2 || (strlen(Lang) == 5 && Lang[2] == '_')) - return true; - - if (strcmp(Lang,"C") != 0) - _error->Warning("Wrong language code %s", Lang); - - return false; -} - /*}}}*/ -// IndexFile::LanguageCode - Return the Language Code /*{{{*/ -std::string pkgIndexFile::LanguageCode() { -APT_IGNORE_DEPRECATED_PUSH - if (TranslationsAvailable() == false) - return ""; - return APT::Configuration::getLanguages()[0]; -APT_IGNORE_DEPRECATED_POP -} - /*}}}*/ // IndexTarget - Constructor /*{{{*/ IndexTarget::IndexTarget(std::string const &MetaKey, std::string const &ShortDesc, diff --git a/apt-pkg/indexfile.h b/apt-pkg/indexfile.h index 31b9517..d0b045a 100644 --- a/apt-pkg/indexfile.h +++ b/apt-pkg/indexfile.h @@ -29,18 +29,12 @@ #include #include -#ifndef APT_8_CLEANER_HEADERS -using std::string; -#endif -#ifndef APT_10_CLEANER_HEADERS -class pkgAcquire; -#endif class pkgCacheGenerator; class pkgCacheListParser; class OpProgress; -class IndexTarget /*{{{*/ +class APT_PUBLIC IndexTarget /*{{{*/ /** \brief Information about an index file. */ { public: @@ -104,7 +98,7 @@ class IndexTarget /*{{{*/ }; /*}}}*/ -class pkgIndexFile +class APT_PUBLIC pkgIndexFile { void * const d; protected: @@ -112,7 +106,7 @@ class pkgIndexFile public: - class Type + class APT_PUBLIC Type { public: @@ -150,22 +144,13 @@ class pkgIndexFile virtual bool Merge(pkgCacheGenerator &/*Gen*/, OpProgress* const /*Prog*/) { return true; }; virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const; - APT_DEPRECATED_MSG("These methods make no sense anymore with multi-language support") static bool TranslationsAvailable(); - /* No intern need for this method anymore as the check for correctness - is already done in getLanguages(). Note also that this check is - rather bad (doesn't take three character like ast into account).*/ - APT_DEPRECATED_MSG("These methods make no sense anymore with multi-language support") static bool CheckLanguageCode(const char * const Lang); - /* As we have now possibly more than one LanguageCode this method is - superseded by a) private classmembers or b) getLanguages() */ - APT_DEPRECATED_MSG("These methods make no sense anymore with multi-language support") static std::string LanguageCode(); - bool IsTrusted() const { return Trusted; }; explicit pkgIndexFile(bool const Trusted); virtual ~pkgIndexFile(); }; -class pkgDebianIndexFile : public pkgIndexFile +class APT_PUBLIC pkgDebianIndexFile : public pkgIndexFile { protected: virtual std::string IndexFileName() const = 0; @@ -184,7 +169,7 @@ public: virtual ~pkgDebianIndexFile(); }; -class pkgDebianIndexTargetFile : public pkgDebianIndexFile +class APT_PUBLIC pkgDebianIndexTargetFile : public pkgDebianIndexFile { void * const d; protected: @@ -207,7 +192,7 @@ public: virtual ~pkgDebianIndexTargetFile(); }; -class pkgDebianIndexRealFile : public pkgDebianIndexFile +class APT_PUBLIC pkgDebianIndexRealFile : public pkgDebianIndexFile { void * const d; protected: diff --git a/apt-pkg/init.h b/apt-pkg/init.h index d062392..431e8a5 100644 --- a/apt-pkg/init.h +++ b/apt-pkg/init.h @@ -12,21 +12,15 @@ #ifndef PKGLIB_INIT_H #define PKGLIB_INIT_H -#ifndef APT_8_CLEANER_HEADERS -#include -#include -#endif -#ifndef APT_10_CLEANER_HEADERS #include -#endif class pkgSystem; class Configuration; -extern const char *pkgVersion; -extern const char *pkgLibVersion; +APT_PUBLIC extern const char *pkgVersion; +APT_PUBLIC extern const char *pkgLibVersion; -bool pkgInitConfig(Configuration &Cnf); -bool pkgInitSystem(Configuration &Cnf,pkgSystem *&Sys); +APT_PUBLIC bool pkgInitConfig(Configuration &Cnf); +APT_PUBLIC bool pkgInitSystem(Configuration &Cnf,pkgSystem *&Sys); #endif diff --git a/apt-pkg/install-progress.cc b/apt-pkg/install-progress.cc index 2e8fac2..aadd28e 100644 --- a/apt-pkg/install-progress.cc +++ b/apt-pkg/install-progress.cc @@ -382,7 +382,7 @@ bool PackageManagerFancy::DrawStatusLine() if (_config->FindB("Dpkg::Progress-Fancy::Progress-Bar", true)) { int padding = 4; - auto const progressbar_size = size.columns - padding - progress_str.size(); + auto const progressbar_size = size.columns - padding - String::DisplayLength(progress_str); auto const current_percent = percentage / 100.0f; std::cout << " " << GetTextProgressStr(current_percent, progressbar_size) diff --git a/apt-pkg/install-progress.h b/apt-pkg/install-progress.h index bcc0b61..94b66ed 100644 --- a/apt-pkg/install-progress.h +++ b/apt-pkg/install-progress.h @@ -12,9 +12,9 @@ namespace APT { namespace Progress { class PackageManager; - PackageManager* PackageManagerProgressFactory(); + APT_PUBLIC PackageManager* PackageManagerProgressFactory(); - class PackageManager + class APT_PUBLIC PackageManager { private: /** \brief dpointer placeholder */ @@ -59,7 +59,7 @@ namespace Progress { std::string /*ConfMessage*/) {} }; - class PackageManagerProgressFd : public PackageManager + class APT_PUBLIC PackageManagerProgressFd : public PackageManager { void * const d; protected: @@ -90,7 +90,7 @@ namespace Progress { }; - class PackageManagerProgressDeb822Fd : public PackageManager + class APT_PUBLIC PackageManagerProgressDeb822Fd : public PackageManager { void * const d; protected: @@ -120,7 +120,7 @@ namespace Progress { std::string ConfMessage) APT_OVERRIDE; }; - class PackageManagerFancy : public PackageManager + class APT_PUBLIC PackageManagerFancy : public PackageManager { void * const d; private: @@ -156,7 +156,7 @@ namespace Progress { static std::string GetTextProgressStr(float percent, int OutputSize); }; - class PackageManagerText : public PackageManager + class APT_PUBLIC PackageManagerText : public PackageManager { void * const d; public: diff --git a/apt-pkg/metaindex.cc b/apt-pkg/metaindex.cc index 8cbdb5e..fc03f3d 100644 --- a/apt-pkg/metaindex.cc +++ b/apt-pkg/metaindex.cc @@ -11,12 +11,6 @@ class metaIndexPrivate /*{{{*/ { - public: - std::string Origin; - std::string Label; - std::string Version; - signed short DefaultPin; - std::string ReleaseNotes; }; /*}}}*/ @@ -63,27 +57,20 @@ APT_PURE std::string metaIndex::GetDist() const { return Dist; } APT_PURE const char* metaIndex::GetType() const { return Type; } APT_PURE metaIndex::TriState metaIndex::GetTrusted() const { return Trusted; } APT_PURE std::string metaIndex::GetSignedBy() const { return SignedBy; } -APT_PURE std::string metaIndex::GetOrigin() const { return d->Origin; } -APT_PURE std::string metaIndex::GetLabel() const { return d->Label; } -APT_PURE std::string metaIndex::GetVersion() const { return d->Version; } +APT_PURE std::string metaIndex::GetOrigin() const { return Origin; } +APT_PURE std::string metaIndex::GetLabel() const { return Label; } +APT_PURE std::string metaIndex::GetVersion() const { return Version; } APT_PURE std::string metaIndex::GetCodename() const { return Codename; } APT_PURE std::string metaIndex::GetSuite() const { return Suite; } -APT_PURE std::string metaIndex::GetReleaseNotes() const { return d->ReleaseNotes; } -APT_PURE signed short metaIndex::GetDefaultPin() const { return d->DefaultPin; } +APT_PURE std::string metaIndex::GetReleaseNotes() const { return ReleaseNotes; } +APT_PURE signed short metaIndex::GetDefaultPin() const { return DefaultPin; } APT_PURE bool metaIndex::GetSupportsAcquireByHash() const { return SupportsAcquireByHash; } APT_PURE time_t metaIndex::GetValidUntil() const { return ValidUntil; } -APT_PURE time_t metaIndex::GetNotBefore() const -{ - debReleaseIndex const *const deb = dynamic_cast(this); - if (deb != nullptr) - return deb->GetNotBefore(); - return 0; -} APT_PURE time_t metaIndex::GetDate() const { return this->Date; } APT_PURE metaIndex::TriState metaIndex::GetLoadedSuccessfully() const { return LoadedSuccessfully; } APT_PURE std::string metaIndex::GetExpectedDist() const { return Dist; } /*}}}*/ -bool metaIndex::CheckDist(string const &MaybeDist) const /*{{{*/ +bool metaIndex::CheckDist(std::string const &MaybeDist) const /*{{{*/ { if (MaybeDist.empty() || this->Codename == MaybeDist || this->Suite == MaybeDist) return true; @@ -93,7 +80,7 @@ bool metaIndex::CheckDist(string const &MaybeDist) const /*{{{*/ Transformed = "experimental"; auto const pos = Transformed.rfind('/'); - if (pos != string::npos) + if (pos != std::string::npos) Transformed = Transformed.substr(0, pos); if (Transformed == ".") @@ -102,7 +89,7 @@ bool metaIndex::CheckDist(string const &MaybeDist) const /*{{{*/ return Transformed.empty() || this->Codename == Transformed || this->Suite == Transformed; } /*}}}*/ -APT_PURE metaIndex::checkSum *metaIndex::Lookup(string const &MetaKey) const /*{{{*/ +APT_PURE metaIndex::checkSum *metaIndex::Lookup(std::string const &MetaKey) const /*{{{*/ { std::map::const_iterator sum = Entries.find(MetaKey); if (sum == Entries.end()) @@ -110,7 +97,7 @@ APT_PURE metaIndex::checkSum *metaIndex::Lookup(string const &MetaKey) const /*{ return sum->second; } /*}}}*/ -APT_PURE bool metaIndex::Exists(string const &MetaKey) const /*{{{*/ +APT_PURE bool metaIndex::Exists(std::string const &MetaKey) const /*{{{*/ { return Entries.find(MetaKey) != Entries.end(); } @@ -118,7 +105,7 @@ APT_PURE bool metaIndex::Exists(string const &MetaKey) const /*{{{*/ std::vector metaIndex::MetaKeys() const /*{{{*/ { std::vector keys; - std::map::const_iterator I = Entries.begin(); + std::map::const_iterator I = Entries.begin(); while(I != Entries.end()) { keys.push_back((*I).first); ++I; @@ -137,40 +124,25 @@ void metaIndex::swapLoad(metaIndex * const OldMetaIndex) /*{{{*/ std::swap(Entries, OldMetaIndex->Entries); std::swap(LoadedSuccessfully, OldMetaIndex->LoadedSuccessfully); - OldMetaIndex->SetOrigin(d->Origin); - OldMetaIndex->SetLabel(d->Label); - OldMetaIndex->SetVersion(d->Version); - OldMetaIndex->SetDefaultPin(d->DefaultPin); + OldMetaIndex->Origin = Origin; + OldMetaIndex->Label = Label; + OldMetaIndex->Version =Version; + OldMetaIndex->DefaultPin = DefaultPin; } /*}}}*/ -bool metaIndex::IsArchitectureSupported(std::string const &arch) const /*{{{*/ +bool metaIndex::IsArchitectureSupported(std::string const &) const /*{{{*/ { - debReleaseIndex const * const deb = dynamic_cast(this); - if (deb != NULL) - return deb->IsArchitectureSupported(arch); return true; } /*}}}*/ -bool metaIndex::IsArchitectureAllSupportedFor(IndexTarget const &target) const/*{{{*/ +bool metaIndex::IsArchitectureAllSupportedFor(IndexTarget const &) const/*{{{*/ { - debReleaseIndex const * const deb = dynamic_cast(this); - if (deb != NULL) - return deb->IsArchitectureAllSupportedFor(target); return true; } /*}}}*/ -bool metaIndex::HasSupportForComponent(std::string const &component) const/*{{{*/ +bool metaIndex::HasSupportForComponent(std::string const &) const/*{{{*/ { - debReleaseIndex const * const deb = dynamic_cast(this); - if (deb != NULL) - return deb->HasSupportForComponent(component); return true; } /*}}}*/ - -void metaIndex::SetOrigin(std::string const &origin) { d->Origin = origin; } -void metaIndex::SetLabel(std::string const &label) { d->Label = label; } -void metaIndex::SetVersion(std::string const &version) { d->Version = version; } -void metaIndex::SetDefaultPin(signed short const defaultpin) { d->DefaultPin = defaultpin; } -void metaIndex::SetReleaseNotes(std::string const ¬es) { d->ReleaseNotes = notes; } diff --git a/apt-pkg/metaindex.h b/apt-pkg/metaindex.h index 0866430..b8db217 100644 --- a/apt-pkg/metaindex.h +++ b/apt-pkg/metaindex.h @@ -9,16 +9,6 @@ #include #include -#ifndef APT_10_CLEANER_HEADERS -#include -class pkgCacheGenerator; -class OpProgress; -#endif -#ifndef APT_8_CLEANER_HEADERS -#include -#include -using std::string; -#endif class pkgAcquire; class IndexTarget; @@ -27,19 +17,15 @@ class OpProgress; class metaIndexPrivate; -class metaIndex +class APT_PUBLIC metaIndex { public: - APT_IGNORE_DEPRECATED_PUSH struct checkSum { std::string MetaKeyFilename; HashStringList Hashes; unsigned long long Size; - - APT_DEPRECATED_MSG("Use the HashStringList member Hashes instead of a hardcoded HashString") HashString Hash; }; - APT_IGNORE_DEPRECATED_POP enum APT_HIDDEN TriState { TRI_YES, TRI_DONTCARE, TRI_NO, TRI_UNSET @@ -58,6 +44,11 @@ protected: // parsed from a file std::string Suite; std::string Codename; + std::string Origin; + std::string Label; + std::string Version; + signed short DefaultPin; + std::string ReleaseNotes; time_t Date; time_t ValidUntil; bool SupportsAcquireByHash; @@ -82,7 +73,7 @@ public: bool GetSupportsAcquireByHash() const; time_t GetValidUntil() const; time_t GetDate() const; - APT_HIDDEN time_t GetNotBefore() const; // FIXME make virtual + virtual time_t GetNotBefore() const = 0; std::string GetExpectedDist() const; bool CheckDist(std::string const &MaybeDist) const; @@ -116,16 +107,9 @@ public: char const * const Type); virtual ~metaIndex(); - // FIXME: make virtual on next abi break - bool IsArchitectureSupported(std::string const &arch) const; - bool IsArchitectureAllSupportedFor(IndexTarget const &target) const; - bool HasSupportForComponent(std::string const &component) const; - // FIXME: should be members of the class on abi break - APT_HIDDEN void SetOrigin(std::string const &origin); - APT_HIDDEN void SetLabel(std::string const &label); - APT_HIDDEN void SetVersion(std::string const &version); - APT_HIDDEN void SetDefaultPin(signed short const defaultpin); - APT_HIDDEN void SetReleaseNotes(std::string const ¬es); + virtual bool IsArchitectureSupported(std::string const &arch) const; + virtual bool IsArchitectureAllSupportedFor(IndexTarget const &target) const; + virtual bool HasSupportForComponent(std::string const &component) const; }; #endif diff --git a/apt-pkg/orderlist.h b/apt-pkg/orderlist.h index 3fa0234..559bf98 100644 --- a/apt-pkg/orderlist.h +++ b/apt-pkg/orderlist.h @@ -21,7 +21,7 @@ #include class pkgDepCache; -class pkgOrderList : protected pkgCache::Namespace +class APT_PUBLIC pkgOrderList : protected pkgCache::Namespace { void * const d; protected: @@ -47,7 +47,6 @@ class pkgOrderList : protected pkgCache::Namespace bool Debug; // Main visit function - APT_DEPRECATED_MSG("Add a unique calling identifier as parameter for debugging output") bool VisitNode(PkgIterator Pkg) { return VisitNode(Pkg, "UNKNOWN"); }; bool VisitNode(PkgIterator Pkg, char const* from); bool VisitDeps(DepFunc F,PkgIterator Pkg); bool VisitRDeps(DepFunc F,PkgIterator Pkg); diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc index 156f7ad..515de97 100644 --- a/apt-pkg/packagemanager.cc +++ b/apt-pkg/packagemanager.cc @@ -632,10 +632,6 @@ bool pkgPackageManager::SmartConfigure(PkgIterator Pkg, int const Depth) // PM::EarlyRemove - Perform removal of packages before their time /*{{{*/ // --------------------------------------------------------------------- /* This is called to deal with conflicts arising from unpacking */ -bool pkgPackageManager::EarlyRemove(PkgIterator Pkg) -{ - return EarlyRemove(Pkg, NULL); -} bool pkgPackageManager::EarlyRemove(PkgIterator Pkg, DepIterator const * const Dep) { if (List->IsNow(Pkg) == false) @@ -708,10 +704,6 @@ bool pkgPackageManager::SmartRemove(PkgIterator Pkg) // --------------------------------------------------------------------- /* This puts the system in a state where it can Unpack Pkg, if Pkg is already unpacked, or when it has been unpacked, if Immediate==true it configures it. */ -bool pkgPackageManager::SmartUnPack(PkgIterator Pkg) -{ - return SmartUnPack(Pkg, true, 0); -} bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int const Depth) { bool PkgLoop = List->IsFlag(Pkg,pkgOrderList::Loop); @@ -922,7 +914,7 @@ bool pkgPackageManager::SmartUnPack(PkgIterator Pkg, bool const Immediate, int c else { if (Debug) - clog << OutputInDepth(Depth) << "So temprorary remove/deconfigure " << ConflictPkg.FullName() << " to satisfy " << APT::PrettyDep(&Cache, End) << endl; + clog << OutputInDepth(Depth) << "So temporary remove/deconfigure " << ConflictPkg.FullName() << " to satisfy " << APT::PrettyDep(&Cache, End) << endl; if (EarlyRemove(ConflictPkg, &End) == false) return _error->Error("Internal Error, Could not early remove %s (%d)",ConflictPkg.FullName().c_str(), 2); } @@ -1128,30 +1120,13 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall() return Completed; } -// PM::DoInstallPostFork - compat /*{{{*/ -// --------------------------------------------------------------------- - /*}}}*/ -pkgPackageManager::OrderResult -pkgPackageManager::DoInstallPostFork(int statusFd) -{ - APT::Progress::PackageManager *progress = new - APT::Progress::PackageManagerProgressFd(statusFd); - pkgPackageManager::OrderResult res = DoInstallPostFork(progress); - delete progress; - return res; -} - /*}}}*/ // PM::DoInstallPostFork - Does install part that happens after the fork /*{{{*/ // --------------------------------------------------------------------- pkgPackageManager::OrderResult pkgPackageManager::DoInstallPostFork(APT::Progress::PackageManager *progress) { bool goResult; - auto simulation = dynamic_cast(this); - if (simulation == nullptr) - goResult = Go(progress); - else - goResult = simulation->Go2(progress); + goResult = Go(progress); if(goResult == false) return Failed; @@ -1160,19 +1135,6 @@ pkgPackageManager::DoInstallPostFork(APT::Progress::PackageManager *progress) /*}}}*/ // PM::DoInstall - Does the installation /*{{{*/ // --------------------------------------------------------------------- -/* compat */ -pkgPackageManager::OrderResult -pkgPackageManager::DoInstall(int statusFd) -{ - APT::Progress::PackageManager *progress = new - APT::Progress::PackageManagerProgressFd(statusFd); - OrderResult res = DoInstall(progress); - delete progress; - return res; - } - /*}}}*/ -// PM::DoInstall - Does the installation /*{{{*/ -// --------------------------------------------------------------------- /* This uses the filenames in FileNames and the information in the DepCache to perform the installation of packages.*/ pkgPackageManager::OrderResult diff --git a/apt-pkg/packagemanager.h b/apt-pkg/packagemanager.h index d944344..e70c204 100644 --- a/apt-pkg/packagemanager.h +++ b/apt-pkg/packagemanager.h @@ -30,14 +30,6 @@ #include #include -#ifndef APT_10_CLEANER_HEADERS -#include -#include -#endif -#ifndef APT_8_CLEANER_HEADERS -#include -using std::string; -#endif class pkgAcquire; class pkgDepCache; @@ -52,7 +44,7 @@ namespace APT { } } -class pkgPackageManager : protected pkgCache::Namespace +class APT_PUBLIC pkgPackageManager : protected pkgCache::Namespace { public: @@ -87,19 +79,15 @@ class pkgPackageManager : protected pkgCache::Namespace // Install helpers bool ConfigureAll(); bool SmartConfigure(PkgIterator Pkg, int const Depth) APT_MUSTCHECK; - //FIXME: merge on abi break - bool SmartUnPack(PkgIterator Pkg) APT_MUSTCHECK; - bool SmartUnPack(PkgIterator Pkg, bool const Immediate, int const Depth) APT_MUSTCHECK; + bool SmartUnPack(PkgIterator Pkg, bool const Immediate = true, int const Depth = 0) APT_MUSTCHECK; bool SmartRemove(PkgIterator Pkg) APT_MUSTCHECK; bool EarlyRemove(PkgIterator Pkg, DepIterator const * const Dep) APT_MUSTCHECK; - APT_DEPRECATED bool EarlyRemove(PkgIterator Pkg) APT_MUSTCHECK; // The Actual installation implementation virtual bool Install(PkgIterator /*Pkg*/,std::string /*File*/) {return false;}; virtual bool Configure(PkgIterator /*Pkg*/) {return false;}; virtual bool Remove(PkgIterator /*Pkg*/,bool /*Purge*/=false) {return false;}; virtual bool Go(APT::Progress::PackageManager * /*progress*/) {return true;}; - APT_DEPRECATED_MSG("Use overload with explicit progress manager") virtual bool Go(int /*statusFd*/=-1) {return true;}; virtual void Reset() {}; @@ -114,8 +102,6 @@ class pkgPackageManager : protected pkgCache::Namespace // Do the installation OrderResult DoInstall(APT::Progress::PackageManager *progress); - // compat - APT_DEPRECATED_MSG("Use APT::Progress::PackageManager subclass instead of fd") OrderResult DoInstall(int statusFd=-1); friend bool EIPP::OrderInstall(char const * const planner, pkgPackageManager * const PM, unsigned int const version, OpProgress * const Progress); @@ -131,7 +117,6 @@ class pkgPackageManager : protected pkgCache::Namespace // stuff that needs to be done after the fork OrderResult DoInstallPostFork(APT::Progress::PackageManager *progress); // compat - APT_DEPRECATED_MSG("Use APT::Progress::PackageManager subclass instead of fd") OrderResult DoInstallPostFork(int statusFd=-1); // ? bool FixMissing(); diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index 80dd1d1..02448a0 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -57,7 +57,7 @@ pkgCache::Header::Header() /* Whenever the structures change the major version should be bumped, whenever the generator changes the minor version should be bumped. */ - APT_HEADER_SET(MajorVersion, 13); + APT_HEADER_SET(MajorVersion, 16); APT_HEADER_SET(MinorVersion, 0); APT_HEADER_SET(Dirty, false); @@ -125,17 +125,15 @@ bool pkgCache::Header::CheckSizes(Header &Against) const // Cache::pkgCache - Constructor /*{{{*/ // --------------------------------------------------------------------- /* */ -APT_IGNORE_DEPRECATED_PUSH pkgCache::pkgCache(MMap *Map, bool DoMap) : Map(*Map), VS(nullptr), d(NULL) { // call getArchitectures() with cached=false to ensure that the - // architectures cache is re-evaulated. this is needed in cases + // architectures cache is re-evaluated. this is needed in cases // when the APT::Architecture field changes between two cache creations MultiArchEnabled = APT::Configuration::getArchitectures(false).size() > 1; if (DoMap == true) ReMap(); } -APT_IGNORE_DEPRECATED_POP /*}}}*/ // Cache::ReMap - Reopen the cache file /*{{{*/ // --------------------------------------------------------------------- @@ -215,21 +213,6 @@ map_id_t pkgCache::sHash(StringView Str) const Hash = 33 * Hash + tolower_ascii_unsafe(*I); return Hash % HeaderP->GetHashTableSize(); } -map_id_t pkgCache::sHash(const string &Str) const -{ - uint32_t Hash = 5381; - for (string::const_iterator I = Str.begin(); I != Str.end(); ++I) - Hash = 33 * Hash + tolower_ascii_unsafe((signed char)*I); - return Hash % HeaderP->GetHashTableSize(); -} - -map_id_t pkgCache::sHash(const char *Str) const -{ - uint32_t Hash = 5381; - for (const char *I = Str; *I != 0; ++I) - Hash = 33 * Hash + tolower_ascii_unsafe((signed char)*I); - return Hash % HeaderP->GetHashTableSize(); -} #if defined(HAVE_FMV_SSE42_AND_CRC32) @@ -291,6 +274,10 @@ uint32_t pkgCache::CacheHash() header.Dirty = false; header.CacheFileSize = 0; + adler = hash32(adler, + reinterpret_cast(PACKAGE_VERSION), + APT_ARRAY_SIZE(PACKAGE_VERSION)); + adler = hash32(adler, reinterpret_cast(&header), sizeof(header)); @@ -307,10 +294,6 @@ uint32_t pkgCache::CacheHash() // Cache::FindPkg - Locate a package by name /*{{{*/ // --------------------------------------------------------------------- /* Returns 0 on error, pointer to the package otherwise */ -pkgCache::PkgIterator pkgCache::FindPkg(const string &Name) { - return FindPkg(StringView(Name)); -} - pkgCache::PkgIterator pkgCache::FindPkg(StringView Name) { auto const found = Name.rfind(':'); if (found == string::npos) @@ -327,10 +310,6 @@ pkgCache::PkgIterator pkgCache::FindPkg(StringView Name) { // Cache::FindPkg - Locate a package by name /*{{{*/ // --------------------------------------------------------------------- /* Returns 0 on error, pointer to the package otherwise */ -pkgCache::PkgIterator pkgCache::FindPkg(const string &Name, string const &Arch) { - return FindPkg(StringView(Name), StringView(Arch)); -} - pkgCache::PkgIterator pkgCache::FindPkg(StringView Name, StringView Arch) { /* We make a detour via the GrpIterator here as on a multi-arch environment a group is easier to @@ -345,10 +324,6 @@ pkgCache::PkgIterator pkgCache::FindPkg(StringView Name, StringView Arch) { // Cache::FindGrp - Locate a group by name /*{{{*/ // --------------------------------------------------------------------- /* Returns End-Pointer on error, pointer to the group otherwise */ -pkgCache::GrpIterator pkgCache::FindGrp(const string &Name) { - return FindGrp(StringView(Name)); -} - pkgCache::GrpIterator pkgCache::FindGrp(StringView Name) { if (unlikely(Name.empty() == true)) return GrpIterator(*this,0); @@ -410,7 +385,7 @@ const char *pkgCache::Priority(unsigned char Prio) { const char *Mapping[] = {0,_("required"),_("important"),_("standard"), _("optional"),_("extra")}; - if (Prio < _count(Mapping)) + if (Prio < APT_ARRAY_SIZE(Mapping)) return Mapping[Prio]; return 0; } @@ -418,12 +393,6 @@ const char *pkgCache::Priority(unsigned char Prio) // GrpIterator::FindPkg - Locate a package by arch /*{{{*/ // --------------------------------------------------------------------- /* Returns an End-Pointer on error, pointer to the package otherwise */ -pkgCache::PkgIterator pkgCache::GrpIterator::FindPkg(string Arch) const { - return FindPkg(StringView(Arch)); -} -pkgCache::PkgIterator pkgCache::GrpIterator::FindPkg(const char *Arch) const { - return FindPkg(StringView(Arch)); -} pkgCache::PkgIterator pkgCache::GrpIterator::FindPkg(StringView Arch) const { if (unlikely(IsGood() == false || S->FirstPackage == 0)) return PkgIterator(*Owner, 0); @@ -482,7 +451,7 @@ pkgCache::PkgIterator pkgCache::GrpIterator::NextPkg(pkgCache::PkgIterator const LastPkg.end() == true)) return PkgIterator(*Owner, 0); - if (S->LastPackage == LastPkg.Index()) + if (S->LastPackage == LastPkg.MapPointer()) return PkgIterator(*Owner, 0); return PkgIterator(*Owner, Owner->PkgP + LastPkg->NextPackage); @@ -562,19 +531,6 @@ pkgCache::PkgIterator::OkState pkgCache::PkgIterator::State() const return NeedsNothing; } /*}}}*/ -// PkgIterator::CandVersion - Returns the candidate version string /*{{{*/ -// --------------------------------------------------------------------- -/* Return string representing of the candidate version. */ -const char * -pkgCache::PkgIterator::CandVersion() const -{ - //TargetVer is empty, so don't use it. - VerIterator version = pkgPolicy(Owner).GetCandidateVer(*this); - if (version.IsGood()) - return version.VerStr(); - return 0; -} - /*}}}*/ // PkgIterator::CurVersion - Returns the current version string /*{{{*/ // --------------------------------------------------------------------- /* Return string representing of the current version. */ @@ -600,15 +556,10 @@ operator<<(std::ostream& out, pkgCache::PkgIterator Pkg) return out << "invalid package"; string current = string(Pkg.CurVersion() == 0 ? "none" : Pkg.CurVersion()); -APT_IGNORE_DEPRECATED_PUSH - string candidate = string(Pkg.CandVersion() == 0 ? "none" : Pkg.CandVersion()); -APT_IGNORE_DEPRECATED_POP string newest = string(Pkg.VersionList().end() ? "none" : Pkg.VersionList().VerStr()); out << Pkg.Name() << " [ " << Pkg.Arch() << " ] < " << current; - if (current != candidate) - out << " -> " << candidate; - if ( newest != "none" && candidate != newest) + if ( newest != "none") out << " | " << newest; if (Pkg->VersionList == 0) out << " > ( none )"; @@ -1009,16 +960,6 @@ const char * pkgCache::VerIterator::MultiArchType() const return "none"; } /*}}}*/ -// RlsFileIterator::IsOk - Checks if the cache is in sync with the file /*{{{*/ -// --------------------------------------------------------------------- -/* This stats the file and compares its stats with the ones that were - stored during generation. Date checks should probably also be - included here. */ -bool pkgCache::RlsFileIterator::IsOk() -{ - return true; -} - /*}}}*/ // RlsFileIterator::RelStr - Return the release string /*{{{*/ string pkgCache::RlsFileIterator::RelStr() { @@ -1036,16 +977,6 @@ string pkgCache::RlsFileIterator::RelStr() return Res; } /*}}}*/ -// PkgFileIterator::IsOk - Checks if the cache is in sync with the file /*{{{*/ -// --------------------------------------------------------------------- -/* This stats the file and compares its stats with the ones that were - stored during generation. Date checks should probably also be - included here. */ -bool pkgCache::PkgFileIterator::IsOk() -{ - return true; -} - /*}}}*/ string pkgCache::PkgFileIterator::RelStr() /*{{{*/ { std::string Res; @@ -1064,6 +995,23 @@ string pkgCache::PkgFileIterator::RelStr() /*{{{*/ Res = Res + (Res.empty() == true?"b=":",b=") + Architecture(); return Res; } + /*}}}*/ +// VerIterator::TranslatedDescriptionForLanguage - Return a DescIter for language/*{{{*/ +// --------------------------------------------------------------------- +/* return a DescIter for the specified language + */ +pkgCache::DescIterator pkgCache::VerIterator::TranslatedDescriptionForLanguage(StringView lang) const +{ + for (pkgCache::DescIterator Desc = DescriptionList(); Desc.end() == false; ++Desc) + if (lang == Desc.LanguageCode()) + return Desc; + + if (lang == "en") + return TranslatedDescriptionForLanguage(""); + + return DescIterator(); +} + /*}}}*/ // VerIterator::TranslatedDescription - Return the a DescIter for locale/*{{{*/ // --------------------------------------------------------------------- @@ -1076,30 +1024,15 @@ pkgCache::DescIterator pkgCache::VerIterator::TranslatedDescription() const for (std::vector::const_iterator l = lang.begin(); l != lang.end(); ++l) { - pkgCache::DescIterator Desc = DescriptionList(); - for (; Desc.end() == false; ++Desc) - if (*l == Desc.LanguageCode()) - break; - if (Desc.end() == true) - { - if (*l == "en") - { - Desc = DescriptionList(); - for (; Desc.end() == false; ++Desc) - if (strcmp(Desc.LanguageCode(), "") == 0) - break; - if (Desc.end() == true) - continue; - } - else - continue; - } - return Desc; + pkgCache::DescIterator Desc = TranslatedDescriptionForLanguage(*l); + if (Desc.IsGood()) + return Desc; } - for (pkgCache::DescIterator Desc = DescriptionList(); - Desc.end() == false; ++Desc) - if (strcmp(Desc.LanguageCode(), "") == 0) - return Desc; + + pkgCache::DescIterator Desc = TranslatedDescriptionForLanguage(""); + if (Desc.IsGood()) + return Desc; + return DescriptionList(); } diff --git a/apt-pkg/pkgcache.h b/apt-pkg/pkgcache.h index 787e399..d2e2f43 100644 --- a/apt-pkg/pkgcache.h +++ b/apt-pkg/pkgcache.h @@ -77,17 +77,13 @@ #include #include +#include // required for nullptr_t #include #include #include -#ifdef APT_PKG_EXPOSE_STRING_VIEW #include -#endif -#ifndef APT_8_CLEANER_HEADERS -using std::string; -#endif // size of (potentially big) files like debs or the install size of them typedef uint64_t map_filesize_t; @@ -97,16 +93,36 @@ typedef uint32_t map_filesize_small_t; typedef uint32_t map_id_t; // some files get an id, too, but in far less absolute numbers typedef uint16_t map_fileid_t; + // relative pointer from cache start -typedef uint32_t map_pointer_t; +template class map_pointer { + uint32_t val; +public: + map_pointer() noexcept : val(0) {} + map_pointer(nullptr_t) noexcept : val(0) {} + explicit map_pointer(uint32_t n) noexcept : val(n) {} + explicit operator uint32_t() noexcept { return val; } + explicit operator bool() noexcept { return val != 0; } +}; + +template inline T *operator +(T *p, map_pointer m) { return p + uint32_t(m); } +template inline bool operator ==(map_pointer u, map_pointer m) { return uint32_t(u) == uint32_t(m); } +template inline bool operator !=(map_pointer u, map_pointer m) { return uint32_t(u) != uint32_t(m); } +template inline bool operator <(map_pointer u, map_pointer m) { return uint32_t(u) < uint32_t(m); } +template inline bool operator >(map_pointer u, map_pointer m) { return uint32_t(u) > uint32_t(m); } +template inline uint32_t operator -(map_pointer u, map_pointer m) { return uint32_t(u) - uint32_t(m); } +template bool operator ==(map_pointer m, nullptr_t) { return uint32_t(m) == 0; } +template bool operator !=(map_pointer m, nullptr_t) { return uint32_t(m) != 0; } + // same as the previous, but documented to be to a string item -typedef map_pointer_t map_stringitem_t; +typedef map_pointer map_stringitem_t; + // we have only a small amount of flags for each item typedef uint8_t map_flags_t; typedef uint8_t map_number_t; class pkgVersioningSystem; -class pkgCache /*{{{*/ +class APT_PUBLIC pkgCache /*{{{*/ { public: // Cache element predeclarations @@ -182,11 +198,9 @@ class pkgCache /*{{{*/ LocalSource=(1<<1), /*!< local sources can't and will not be verified by hashes */ NoPackages=(1<<2), /*!< the file includes no package records itself, but additions like Translations */ }; - enum ReleaseFileFlags - { - NotAutomatic = (1 << 0), /*!< archive has a default pin of 1 */ - ButAutomaticUpgrades = (1 << 1), /*!< (together with the previous) archive has a default pin of 100 */ - PackagesRequireAuthorization = (1 << 2), /*!< (together with the previous) archive has a default pin of 100 */ + enum ReleaseFileFlags { + NotAutomatic=(1<<0), /*!< archive has a default pin of 1 */ + ButAutomaticUpgrades=(1<<1), /*!< (together with the previous) archive has a default pin of 100 */ }; enum ProvidesFlags { MultiArchImplicit=pkgCache::Dep::MultiArchImplicit, /*!< generated internally, not spelled out in the index */ @@ -199,11 +213,7 @@ class pkgCache /*{{{*/ // Memory mapped cache file std::string CacheFile; MMap ⤅ -#ifdef APT_PKG_EXPOSE_STRING_VIEW - APT_HIDDEN map_id_t sHash(APT::StringView S) const APT_PURE; -#endif - map_id_t sHash(const std::string &S) const APT_PURE; - map_id_t sHash(const char *S) const APT_PURE; + map_id_t sHash(APT::StringView S) const APT_PURE; public: @@ -220,8 +230,8 @@ class pkgCache /*{{{*/ Provides *ProvideP; Dependency *DepP; DependencyData *DepDataP; - APT_DEPRECATED_MSG("Not used anymore in cache generation and without a replacement") StringItem *StringItemP; char *StrP; + void *reserved[12]; virtual bool ReMap(bool const &Errorchecks = true); inline bool Sync() {return Map.Sync();} @@ -229,11 +239,7 @@ class pkgCache /*{{{*/ inline void *DataEnd() {return ((unsigned char *)Map.Data()) + Map.Size();} // String hashing function (512 range) -#ifdef APT_PKG_EXPOSE_STRING_VIEW - APT_HIDDEN inline map_id_t Hash(APT::StringView S) const {return sHash(S);} -#endif - inline map_id_t Hash(const std::string &S) const {return sHash(S);} - inline map_id_t Hash(const char *S) const {return sHash(S);} + inline map_id_t Hash(APT::StringView S) const {return sHash(S);} APT_HIDDEN uint32_t CacheHash(); @@ -241,25 +247,16 @@ class pkgCache /*{{{*/ static const char *Priority(unsigned char Priority); // Accessors -#ifdef APT_PKG_EXPOSE_STRING_VIEW - APT_HIDDEN GrpIterator FindGrp(APT::StringView Name); - APT_HIDDEN PkgIterator FindPkg(APT::StringView Name); - APT_HIDDEN PkgIterator FindPkg(APT::StringView Name, APT::StringView Arch); -#endif + GrpIterator FindGrp(APT::StringView Name); + PkgIterator FindPkg(APT::StringView Name); + PkgIterator FindPkg(APT::StringView Name, APT::StringView Arch); -#ifdef APT_PKG_EXPOSE_STRING_VIEW APT::StringView ViewString(map_stringitem_t idx) const { char *name = StrP + idx; uint16_t len = *reinterpret_cast(name - sizeof(uint16_t)); return APT::StringView(name, len); } -#endif - - - GrpIterator FindGrp(const std::string &Name); - PkgIterator FindPkg(const std::string &Name); - PkgIterator FindPkg(const std::string &Name, const std::string &Arch); Header &Head() {return *HeaderP;} inline GrpIterator GrpBegin(); @@ -350,16 +347,16 @@ struct pkgCache::Header The PackageFile structures are singly linked lists that represent all package files that have been merged into the cache. */ - map_pointer_t FileList; + map_pointer FileList; /** \brief index of the first ReleaseFile structure */ - map_pointer_t RlsFileList; + map_pointer RlsFileList; /** \brief String representing the version system used */ - map_pointer_t VerSysName; + map_stringitem_t VerSysName; /** \brief native architecture the cache was built against */ - map_pointer_t Architecture; + map_stringitem_t Architecture; /** \brief all architectures the cache was built against */ - map_pointer_t Architectures; + map_stringitem_t Architectures; /** \brief The maximum size of a raw entry from the original Package file */ map_filesize_t MaxVerFileSize; /** \brief The maximum size of a raw entry from the original Translation file */ @@ -370,10 +367,10 @@ struct pkgCache::Header Start indicates the first byte of the pool, Count is the number of objects remaining in the pool and ItemSize is the structure size (alignment factor) of the pool. An ItemSize of 0 indicates the pool is empty. There should be - the same number of pools as there are structure types. The generator + twice the number of pools as there are non-private structure types. The generator stores this information so future additions can make use of any unused pool blocks. */ - DynamicMMap::Pool Pools[12]; + DynamicMMap::Pool Pools[2 * 12]; /** \brief hash tables providing rapid group/package name lookup @@ -388,10 +385,13 @@ struct pkgCache::Header uint32_t HashTableSize; uint32_t GetHashTableSize() const { return HashTableSize; } void SetHashTableSize(unsigned int const sz) { HashTableSize = sz; } - map_pointer_t GetArchitectures() const { return Architectures; } - void SetArchitectures(map_pointer_t const idx) { Architectures = idx; } - map_pointer_t * PkgHashTableP() const { return (map_pointer_t*) (this + 1); } - map_pointer_t * GrpHashTableP() const { return PkgHashTableP() + GetHashTableSize(); } + map_stringitem_t GetArchitectures() const { return Architectures; } + void SetArchitectures(map_stringitem_t const idx) { Architectures = idx; } + +#ifdef APT_COMPILING_APT + map_pointer * GrpHashTableP() const { return (map_pointer*) (this + 1); } + map_pointer * PkgHashTableP() const { return reinterpret_cast *>(GrpHashTableP() + GetHashTableSize()); } +#endif /** \brief Hash of the file (TODO: Rename) */ map_filesize_small_t CacheFileSize; @@ -406,7 +406,11 @@ struct pkgCache::Header On or more packages with the same name form a group, so we have a simple way to access a package built for different architectures Group exists in a singly linked list of group records starting at - the hash index of the name in the pkgCache::Header::GrpHashTable */ + the hash index of the name in the pkgCache::Header::GrpHashTable + + They also act as a representation of source packages, allowing you to + iterate over all binaries produced by a source package. + */ struct pkgCache::Group { /** \brief Name of the group */ @@ -414,14 +418,20 @@ struct pkgCache::Group // Linked List /** \brief Link to the first package which belongs to the group */ - map_pointer_t FirstPackage; // Package + map_pointer FirstPackage; /** \brief Link to the last package which belongs to the group */ - map_pointer_t LastPackage; // Package + map_pointer LastPackage; + /** \brief Link to the next Group */ - map_pointer_t Next; // Group + map_pointer Next; /** \brief unique sequel ID */ map_id_t ID; + /** \brief List of binary produces by source package with this name. */ + map_pointer VersionsInSource; + + /** \brief Private pointer */ + map_pointer d; }; /*}}}*/ // Package structure /*{{{*/ @@ -438,11 +448,6 @@ struct pkgCache::Group */ struct pkgCache::Package { - /** \brief Name of the package - * Note that the access method Name() will remain. It is just this data member - * deprecated as this information is already stored and available via the - * associated Group – so it is wasting precious binary cache space */ - APT_DEPRECATED_MSG("Use the .Name() method instead of accessing the member directly") map_stringitem_t Name; /** \brief Architecture of the package */ map_stringitem_t Arch; /** \brief Base of a singly linked list of versions @@ -454,19 +459,19 @@ struct pkgCache::Package versions of a package can be cleanly handled by the system. Furthermore, this linked list is guaranteed to be sorted from Highest version to lowest version with no duplicate entries. */ - map_pointer_t VersionList; // Version + map_pointer VersionList; /** \brief index to the installed version */ - map_pointer_t CurrentVer; // Version + map_pointer CurrentVer; /** \brief index of the group this package belongs to */ - map_pointer_t Group; // Group the Package belongs to + map_pointer Group; // Linked list /** \brief Link to the next package in the same bucket */ - map_pointer_t NextPackage; // Package + map_pointer NextPackage; /** \brief List of all dependencies on this package */ - map_pointer_t RevDepends; // Dependency + map_pointer RevDepends; /** \brief List of all "packages" this package provide */ - map_pointer_t ProvidesList; // Provides + map_pointer ProvidesList; // Install/Remove/Purge etc /** \brief state that the user wishes the package to be in */ @@ -489,6 +494,9 @@ struct pkgCache::Package map_id_t ID; /** \brief some useful indicators of the package's state */ map_flags_t Flags; + + /** \brief Private pointer */ + map_pointer d; }; /*}}}*/ // Release File structure /*{{{*/ @@ -526,9 +534,12 @@ struct pkgCache::ReleaseFile // Linked list /** \brief Link to the next ReleaseFile in the Cache */ - map_pointer_t NextFile; + map_pointer NextFile; /** \brief unique sequel ID */ map_fileid_t ID; + + /** \brief Private pointer */ + map_pointer d; }; /*}}}*/ // Package File structure /*{{{*/ @@ -542,7 +553,7 @@ struct pkgCache::PackageFile /** \brief physical disk file that this PackageFile represents */ map_stringitem_t FileName; /** \brief the release information */ - map_pointer_t Release; + map_pointer Release; map_stringitem_t Component; map_stringitem_t Architecture; @@ -565,9 +576,12 @@ struct pkgCache::PackageFile // Linked list /** \brief Link to the next PackageFile in the Cache */ - map_pointer_t NextFile; // PackageFile + map_pointer NextFile; /** \brief unique sequel ID */ map_fileid_t ID; + + /** \brief Private pointer */ + map_pointer d; }; /*}}}*/ // VerFile structure /*{{{*/ @@ -578,9 +592,9 @@ struct pkgCache::PackageFile struct pkgCache::VerFile { /** \brief index of the package file that this version was found in */ - map_pointer_t File; // PackageFile + map_pointer File; /** \brief next step in the linked list */ - map_pointer_t NextFile; // PkgVerFile + map_pointer NextFile; /** \brief position in the package file */ map_filesize_t Offset; // File offset /** @TODO document pkgCache::VerFile::Size */ @@ -592,9 +606,9 @@ struct pkgCache::VerFile struct pkgCache::DescFile { /** \brief index of the file that this description was found in */ - map_pointer_t File; // PackageFile + map_pointer File; /** \brief next step in the linked list */ - map_pointer_t NextFile; // PkgVerFile + map_pointer NextFile; /** \brief position in the file */ map_filesize_t Offset; // File offset /** @TODO document pkgCache::DescFile::Size */ @@ -607,7 +621,6 @@ struct pkgCache::DescFile The version list is always sorted from highest version to lowest version by the generator. Equal version numbers are either merged or handled as separate versions based on the Hash value. */ -APT_IGNORE_DEPRECATED_PUSH struct pkgCache::Version { /** \brief complete version string */ @@ -630,9 +643,6 @@ struct pkgCache::Version AllForeign = All | Foreign, AllAllowed = All | Allowed }; - /** \brief deprecated variant of No */ - static const APT_DEPRECATED_MSG("The default value of the Multi-Arch field is no, not none") VerMultiArch None = No; - /** \brief stores the MultiArch capabilities of this version Flags used are defined in pkgCache::Version::VerMultiArch @@ -645,19 +655,19 @@ struct pkgCache::Version applies to. If FileList is 0 then this is a blank version. The structure should also have a 0 in all other fields excluding pkgCache::Version::VerStr and Possibly pkgCache::Version::NextVer. */ - map_pointer_t FileList; // VerFile + map_pointer FileList; /** \brief next (lower or equal) version in the linked list */ - map_pointer_t NextVer; // Version + map_pointer NextVer; /** \brief next description in the linked list */ - map_pointer_t DescriptionList; // Description + map_pointer DescriptionList; /** \brief base of the dependency list */ - map_pointer_t DependsList; // Dependency + map_pointer DependsList; /** \brief links to the owning package This allows reverse dependencies to determine the package */ - map_pointer_t ParentPkg; // Package + map_pointer ParentPkg; /** \brief list of pkgCache::Provides */ - map_pointer_t ProvidesList; // Provides + map_pointer ProvidesList; /** \brief archive size for this version @@ -669,13 +679,17 @@ struct pkgCache::Version No two packages in existence should have the same VerStr and Hash with different contents. */ - unsigned short Hash; + uint32_t Hash; /** \brief unique sequel ID */ map_id_t ID; /** \brief parsed priority value */ map_number_t Priority; + /** \brief next version in the source package (might be different binary) */ + map_pointer NextInSource; + + /** \brief Private pointer */ + map_pointer d; }; -APT_IGNORE_DEPRECATED_POP /*}}}*/ // Description structure /*{{{*/ /** \brief datamember of a linked list of available description for a version */ @@ -693,11 +707,11 @@ struct pkgCache::Description map_stringitem_t md5sum; /** @TODO document pkgCache::Description::FileList */ - map_pointer_t FileList; // DescFile + map_pointer FileList; /** \brief next translation for this description */ - map_pointer_t NextDesc; // Description + map_pointer NextDesc; /** \brief the text is a description of this package */ - map_pointer_t ParentPkg; // Package + map_pointer ParentPkg; /** \brief unique sequel ID */ map_id_t ID; @@ -718,7 +732,7 @@ struct pkgCache::DependencyData The generator will - if the package does not already exist - create a blank (no version records) package. */ - map_pointer_t Package; // Package + map_pointer Package; /** \brief Dependency type - Depends, Recommends, Conflicts, etc */ map_number_t Type; @@ -727,17 +741,17 @@ struct pkgCache::DependencyData If the high bit is set then it is a logical OR with the previous record. */ map_flags_t CompareOp; - map_pointer_t NextData; + map_pointer NextData; }; struct pkgCache::Dependency { - map_pointer_t DependencyData; // DependencyData + map_pointer DependencyData; /** \brief version of the package which has the depends */ - map_pointer_t ParentVer; // Version + map_pointer ParentVer; /** \brief next reverse dependency of this package */ - map_pointer_t NextRevDepends; // Dependency + map_pointer NextRevDepends; /** \brief next dependency of this version */ - map_pointer_t NextDepends; // Dependency + map_pointer NextDepends; /** \brief unique sequel ID */ map_id_t ID; @@ -755,9 +769,9 @@ struct pkgCache::Dependency struct pkgCache::Provides { /** \brief index of the package providing this */ - map_pointer_t ParentPkg; // Package + map_pointer ParentPkg; /** \brief index of the version this provide line applies to */ - map_pointer_t Version; // Version + map_pointer Version; /** \brief version in the provides line (if any) This version allows dependencies to depend on specific versions of a @@ -765,18 +779,9 @@ struct pkgCache::Provides map_stringitem_t ProvideVersion; map_flags_t Flags; /** \brief next provides (based of package) */ - map_pointer_t NextProvides; // Provides + map_pointer NextProvides; /** \brief next provides (based of version) */ - map_pointer_t NextPkgProv; // Provides -}; - /*}}}*/ -// UNUSED StringItem structure /*{{{*/ -struct APT_DEPRECATED_MSG("No longer used in cache generation without a replacement") pkgCache::StringItem -{ - /** \brief string this refers to */ - map_ptrloc String; // StringItem - /** \brief Next link in the chain */ - map_ptrloc NextItem; // StringItem + map_pointer NextPkgProv; }; /*}}}*/ diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc index 5a3b65b..d02c49f 100644 --- a/apt-pkg/pkgcachegen.cc +++ b/apt-pkg/pkgcachegen.cc @@ -14,10 +14,8 @@ #include #include #include -#include #include #include -#include #include #include #include @@ -49,6 +47,19 @@ static bool IsDuplicateDescription(pkgCache &Cache, pkgCache::DescIterator Desc, using std::string; using APT::StringView; +// Convert an offset returned from e.g. DynamicMMap or ptr difference to +// an uint32_t location without data loss. +template +static inline uint32_t NarrowOffset(T ptr) +{ + uint32_t res = static_cast(ptr); + if (unlikely(ptr < 0)) + abort(); + if (unlikely(static_cast(res) != ptr)) + abort(); + return res; +} + // CacheGenerator::pkgCacheGenerator - Constructor /*{{{*/ // --------------------------------------------------------------------- /* We set the dirty flag and make sure that is written to the disk */ @@ -78,7 +89,7 @@ bool pkgCacheGenerator::Start() *Cache.HeaderP = pkgCache::Header(); // make room for the hashtables for packages and groups - if (Map.RawAllocate(2 * (Cache.HeaderP->GetHashTableSize() * sizeof(map_pointer_t))) == 0) + if (Map.RawAllocate(2 * (Cache.HeaderP->GetHashTableSize() * sizeof(map_pointer))) == 0) return false; map_stringitem_t const idxVerSysName = WriteStringInMap(_system->VS->Label); @@ -211,7 +222,7 @@ map_stringitem_t pkgCacheGenerator::WriteStringInMap(const char *String, const unsigned long &Len) { size_t oldSize = Map.Size(); void const * const oldMap = Map.Data(); - map_stringitem_t const index = Map.WriteString(String, Len); + map_stringitem_t const index{NarrowOffset(Map.WriteString(String, Len))}; if (index != 0) ReMap(oldMap, Map.Data(), oldSize); return index; @@ -221,19 +232,21 @@ map_stringitem_t pkgCacheGenerator::WriteStringInMap(const char *String, map_stringitem_t pkgCacheGenerator::WriteStringInMap(const char *String) { size_t oldSize = Map.Size(); void const * const oldMap = Map.Data(); - map_stringitem_t const index = Map.WriteString(String); + map_stringitem_t const index{NarrowOffset(Map.WriteString(String))}; if (index != 0) ReMap(oldMap, Map.Data(), oldSize); return index; } /*}}}*/ -map_pointer_t pkgCacheGenerator::AllocateInMap(const unsigned long &size) {/*{{{*/ +uint32_t pkgCacheGenerator::AllocateInMap(const unsigned long &size) {/*{{{*/ size_t oldSize = Map.Size(); void const * const oldMap = Map.Data(); - map_pointer_t const index = Map.Allocate(size); + auto index = Map.Allocate(size); if (index != 0) ReMap(oldMap, Map.Data(), oldSize); - return index; + if (index != static_cast(index)) + abort(); // Internal error + return static_cast(index); } /*}}}*/ // CacheGenerator::MergeList - Merge the package list /*{{{*/ @@ -374,10 +387,10 @@ bool pkgCacheGenerator::MergeListVersion(ListParser &List, pkgCache::PkgIterator { pkgCache::VerIterator Ver = Pkg.VersionList(); Dynamic DynVer(Ver); - map_pointer_t *LastVer = &Pkg->VersionList; + map_pointer *LastVer = &Pkg->VersionList; void const * oldMap = Map.Data(); - unsigned short const Hash = List.VersionHash(); + auto Hash = List.VersionHash(); if (Ver.end() == false) { /* We know the list is sorted so we use that fact in the search. @@ -434,13 +447,13 @@ bool pkgCacheGenerator::MergeListVersion(ListParser &List, pkgCache::PkgIterator } // Add a new version - map_pointer_t const verindex = NewVersion(Ver, Version, Pkg.Index(), Hash, *LastVer); + map_pointer const verindex = NewVersion(Ver, Version, Pkg.MapPointer(), Hash, *LastVer); if (unlikely(verindex == 0)) return _error->Error(_("Error occurred while processing %s (%s%d)"), Pkg.Name(), "NewVersion", 1); if (oldMap != Map.Data()) - LastVer += static_cast(Map.Data()) - static_cast(oldMap); + LastVer += static_cast const *>(Map.Data()) - static_cast const *>(oldMap); *LastVer = verindex; if (unlikely(List.NewVersion(Ver) == false)) @@ -520,19 +533,19 @@ bool pkgCacheGenerator::AddNewDescription(ListParser &List, pkgCache::VerIterato pkgCache::DescIterator Desc; Dynamic DynDesc(Desc); - map_pointer_t const descindex = NewDescription(Desc, lang, CurMd5, md5idx); + map_pointer const descindex = NewDescription(Desc, lang, CurMd5, md5idx); if (unlikely(descindex == 0)) return _error->Error(_("Error occurred while processing %s (%s%d)"), Ver.ParentPkg().Name(), "NewDescription", 1); md5idx = Desc->md5sum; - Desc->ParentPkg = Ver.ParentPkg().Index(); + Desc->ParentPkg = Ver.ParentPkg().MapPointer(); // we add at the end, so that the start is constant as we need // that to be able to efficiently share these lists pkgCache::DescIterator VerDesc = Ver.DescriptionList(); // old value might be invalid after ReMap for (;VerDesc.end() == false && VerDesc->NextDesc != 0; ++VerDesc); - map_pointer_t * const LastNextDesc = (VerDesc.end() == true) ? &Ver->DescriptionList : &VerDesc->NextDesc; + map_pointer * const LastNextDesc = (VerDesc.end() == true) ? &Ver->DescriptionList : &VerDesc->NextDesc; *LastNextDesc = descindex; if (NewFileDesc(Desc,List) == false) @@ -554,19 +567,20 @@ bool pkgCacheGenerator::NewGroup(pkgCache::GrpIterator &Grp, StringView Name) return true; // Get a structure - map_pointer_t const Group = AllocateInMap(sizeof(pkgCache::Group)); + auto const Group = AllocateInMap(); if (unlikely(Group == 0)) return false; - Grp = pkgCache::GrpIterator(Cache, Cache.GrpP + Group); - map_stringitem_t const idxName = StoreString(PKGNAME, Name); + map_stringitem_t const idxName = WriteStringInMap(Name); if (unlikely(idxName == 0)) return false; + + Grp = pkgCache::GrpIterator(Cache, Cache.GrpP + Group); Grp->Name = idxName; // Insert it into the hash table unsigned long const Hash = Cache.Hash(Name); - map_pointer_t *insertAt = &Cache.HeaderP->GrpHashTableP()[Hash]; + map_pointer *insertAt = &Cache.HeaderP->GrpHashTableP()[Hash]; while (*insertAt != 0 && StringViewCompareFast(Name, Cache.ViewString((Cache.GrpP + *insertAt)->Name)) > 0) insertAt = &(Cache.GrpP + *insertAt)->Next; @@ -594,16 +608,13 @@ bool pkgCacheGenerator::NewPackage(pkgCache::PkgIterator &Pkg, StringView Name, return true; // Get a structure - map_pointer_t const Package = AllocateInMap(sizeof(pkgCache::Package)); + auto const Package = AllocateInMap(); if (unlikely(Package == 0)) return false; Pkg = pkgCache::PkgIterator(Cache,Cache.PkgP + Package); // Set the name, arch and the ID - APT_IGNORE_DEPRECATED_PUSH - Pkg->Name = Grp->Name; - APT_IGNORE_DEPRECATED_POP - Pkg->Group = Grp.Index(); + Pkg->Group = Grp.MapPointer(); // all is mapped to the native architecture map_stringitem_t const idxArch = (Arch == "all") ? Cache.HeaderP->Architecture : StoreString(MIXED, Arch); if (unlikely(idxArch == 0)) @@ -617,7 +628,7 @@ bool pkgCacheGenerator::NewPackage(pkgCache::PkgIterator &Pkg, StringView Name, Grp->FirstPackage = Package; // Insert it into the hash table map_id_t const Hash = Cache.Hash(Name); - map_pointer_t *insertAt = &Cache.HeaderP->PkgHashTableP()[Hash]; + map_pointer *insertAt = &Cache.HeaderP->PkgHashTableP()[Hash]; while (*insertAt != 0 && StringViewCompareFast(Name, Cache.ViewString((Cache.GrpP + (Cache.PkgP + *insertAt)->Group)->Name)) > 0) insertAt = &(Cache.PkgP + *insertAt)->NextPackage; Pkg->NextPackage = *insertAt; @@ -681,7 +692,7 @@ bool pkgCacheGenerator::NewPackage(pkgCache::PkgIterator &Pkg, StringView Name, continue; pkgCache::VerIterator Ver = Dep.ParentVer(); Dynamic DynVer(Ver); - map_pointer_t * unused = NULL; + map_pointer * unused = NULL; if (NewDepends(Pkg, Ver, Dep->Version, Dep->CompareOp, Dep->Type, unused) == false) return false; } @@ -750,7 +761,7 @@ bool pkgCacheGenerator::AddImplicitDepends(pkgCache::GrpIterator &G, { APT::StringView Arch = P.Arch() == NULL ? "" : P.Arch(); Dynamic DynArch(Arch); - map_pointer_t *OldDepLast = NULL; + map_pointer *OldDepLast = NULL; /* MultiArch handling introduces a lot of implicit Dependencies: - MultiArch: same → Co-Installable if they have the same version - All others conflict with all other group members */ @@ -790,7 +801,7 @@ bool pkgCacheGenerator::AddImplicitDepends(pkgCache::VerIterator &V, /* MultiArch handling introduces a lot of implicit Dependencies: - MultiArch: same → Co-Installable if they have the same version - All others conflict with all other group members */ - map_pointer_t *OldDepLast = NULL; + map_pointer *OldDepLast = NULL; bool const coInstall = ((V->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same); if (coInstall == true) { @@ -823,19 +834,19 @@ bool pkgCacheGenerator::NewFileVer(pkgCache::VerIterator &Ver, return true; // Get a structure - map_pointer_t const VerFile = AllocateInMap(sizeof(pkgCache::VerFile)); + auto const VerFile = AllocateInMap(); if (VerFile == 0) return false; pkgCache::VerFileIterator VF(Cache,Cache.VerFileP + VerFile); - VF->File = CurrentFile - Cache.PkgFileP; + VF->File = map_pointer{NarrowOffset(CurrentFile - Cache.PkgFileP)}; // Link it to the end of the list - map_pointer_t *Last = &Ver->FileList; + map_pointer *Last = &Ver->FileList; for (pkgCache::VerFileIterator V = Ver.FileList(); V.end() == false; ++V) Last = &V->NextFile; VF->NextFile = *Last; - *Last = VF.Index(); + *Last = VF.MapPointer(); VF->Offset = List.Offset(); VF->Size = List.Size(); @@ -849,14 +860,14 @@ bool pkgCacheGenerator::NewFileVer(pkgCache::VerIterator &Ver, // CacheGenerator::NewVersion - Create a new Version /*{{{*/ // --------------------------------------------------------------------- /* This puts a version structure in the linked list */ -map_pointer_t pkgCacheGenerator::NewVersion(pkgCache::VerIterator &Ver, +map_pointer pkgCacheGenerator::NewVersion(pkgCache::VerIterator &Ver, APT::StringView const &VerStr, - map_pointer_t const ParentPkg, - unsigned short const Hash, - map_pointer_t const Next) + map_pointer const ParentPkg, + uint32_t Hash, + map_pointer const Next) { // Get a structure - map_pointer_t const Version = AllocateInMap(sizeof(pkgCache::Version)); + auto const Version = AllocateInMap(); if (Version == 0) return 0; @@ -908,20 +919,20 @@ bool pkgCacheGenerator::NewFileDesc(pkgCache::DescIterator &Desc, return true; // Get a structure - map_pointer_t const DescFile = AllocateInMap(sizeof(pkgCache::DescFile)); + auto const DescFile = AllocateInMap(); if (DescFile == 0) return false; pkgCache::DescFileIterator DF(Cache,Cache.DescFileP + DescFile); - DF->File = CurrentFile - Cache.PkgFileP; + DF->File = map_pointer{NarrowOffset(CurrentFile - Cache.PkgFileP)}; // Link it to the end of the list - map_pointer_t *Last = &Desc->FileList; + map_pointer *Last = &Desc->FileList; for (pkgCache::DescFileIterator D = Desc.FileList(); D.end() == false; ++D) Last = &D->NextFile; DF->NextFile = *Last; - *Last = DF.Index(); + *Last = DF.MapPointer(); DF->Offset = List.Offset(); DF->Size = List.Size(); @@ -935,13 +946,13 @@ bool pkgCacheGenerator::NewFileDesc(pkgCache::DescIterator &Desc, // CacheGenerator::NewDescription - Create a new Description /*{{{*/ // --------------------------------------------------------------------- /* This puts a description structure in the linked list */ -map_pointer_t pkgCacheGenerator::NewDescription(pkgCache::DescIterator &Desc, +map_pointer pkgCacheGenerator::NewDescription(pkgCache::DescIterator &Desc, const string &Lang, APT::StringView md5sum, map_stringitem_t const idxmd5str) { // Get a structure - map_pointer_t const Description = AllocateInMap(sizeof(pkgCache::Description)); + auto const Description = AllocateInMap(); if (Description == 0) return 0; @@ -972,20 +983,20 @@ map_pointer_t pkgCacheGenerator::NewDescription(pkgCache::DescIterator &Desc, version and to the package that it is pointing to. */ bool pkgCacheGenerator::NewDepends(pkgCache::PkgIterator &Pkg, pkgCache::VerIterator &Ver, - map_pointer_t const Version, + map_stringitem_t const Version, uint8_t const Op, uint8_t const Type, - map_pointer_t* &OldDepLast) + map_pointer * &OldDepLast) { void const * const oldMap = Map.Data(); // Get a structure - map_pointer_t const Dependency = AllocateInMap(sizeof(pkgCache::Dependency)); + auto const Dependency = AllocateInMap(); if (unlikely(Dependency == 0)) return false; bool isDuplicate = false; - map_pointer_t DependencyData = 0; - map_pointer_t PreviousData = 0; + map_pointer DependencyData = 0; + map_pointer PreviousData = 0; if (Pkg->RevDepends != 0) { pkgCache::Dependency const * const L = Cache.DepP + Pkg->RevDepends; @@ -1006,13 +1017,13 @@ bool pkgCacheGenerator::NewDepends(pkgCache::PkgIterator &Pkg, if (isDuplicate == false) { - DependencyData = AllocateInMap(sizeof(pkgCache::DependencyData)); + DependencyData = AllocateInMap(); if (unlikely(DependencyData == 0)) return false; } pkgCache::Dependency * Link = Cache.DepP + Dependency; - Link->ParentVer = Ver.Index(); + Link->ParentVer = Ver.MapPointer(); Link->DependencyData = DependencyData; Link->ID = Cache.HeaderP->DependsCount++; @@ -1022,7 +1033,7 @@ bool pkgCacheGenerator::NewDepends(pkgCache::PkgIterator &Pkg, Dep->Type = Type; Dep->CompareOp = Op; Dep->Version = Version; - Dep->Package = Pkg.Index(); + Dep->Package = Pkg.MapPointer(); ++Cache.HeaderP->DependsDataCount; if (PreviousData != 0) { @@ -1057,7 +1068,7 @@ bool pkgCacheGenerator::NewDepends(pkgCache::PkgIterator &Pkg, for (pkgCache::DepIterator D = Ver.DependsList(); D.end() == false; ++D) OldDepLast = &D->NextDepends; } else if (oldMap != Map.Data()) - OldDepLast += static_cast(Map.Data()) - static_cast(oldMap); + OldDepLast += static_cast const *>(Map.Data()) - static_cast const *>(oldMap); Dep->NextDepends = *OldDepLast; *OldDepLast = Dependency; @@ -1174,27 +1185,27 @@ bool pkgCacheListParser::NewProvides(pkgCache::VerIterator &Ver, } bool pkgCacheGenerator::NewProvides(pkgCache::VerIterator &Ver, pkgCache::PkgIterator &Pkg, - map_pointer_t const ProvideVersion, + map_stringitem_t const ProvideVersion, uint8_t const Flags) { // Get a structure - map_pointer_t const Provides = AllocateInMap(sizeof(pkgCache::Provides)); + auto const Provides = AllocateInMap(); if (unlikely(Provides == 0)) return false; ++Cache.HeaderP->ProvidesCount; // Fill it in pkgCache::PrvIterator Prv(Cache,Cache.ProvideP + Provides,Cache.PkgP); - Prv->Version = Ver.Index(); + Prv->Version = Ver.MapPointer(); Prv->ProvideVersion = ProvideVersion; Prv->Flags = Flags; Prv->NextPkgProv = Ver->ProvidesList; - Ver->ProvidesList = Prv.Index(); + Ver->ProvidesList = Prv.MapPointer(); // Link it to the package - Prv->ParentPkg = Pkg.Index(); + Prv->ParentPkg = Pkg.MapPointer(); Prv->NextProvides = Pkg->ProvidesList; - Pkg->ProvidesList = Prv.Index(); + Pkg->ProvidesList = Prv.MapPointer(); return true; } /*}}}*/ @@ -1207,7 +1218,7 @@ bool pkgCacheListParser::NewProvidesAllArch(pkgCache::VerIterator &Ver, StringVi Dynamic DynPackage(Package); Dynamic DynVersion(Version); - if (Grp.end() == true) + if (Grp.end() == true || Grp->FirstPackage == 0) return NewProvides(Ver, Package, Cache.NativeArch(), Version, Flags); else { @@ -1237,7 +1248,7 @@ bool pkgCacheListParser::NewProvidesAllArch(pkgCache::VerIterator &Ver, StringVi return true; } /*}}}*/ -bool pkgCacheListParser::SameVersion(unsigned short const Hash, /*{{{*/ +bool pkgCacheListParser::SameVersion(uint32_t Hash, /*{{{*/ pkgCache::VerIterator const &Ver) { return Hash == Ver->Hash; @@ -1252,7 +1263,7 @@ bool pkgCacheGenerator::SelectReleaseFile(const string &File,const string &Site, return true; // Get some space for the structure - map_pointer_t const idxFile = AllocateInMap(sizeof(*CurrentRlsFile)); + auto const idxFile = AllocateInMap(); if (unlikely(idxFile == 0)) return false; CurrentRlsFile = Cache.RlsFileP + idxFile; @@ -1268,7 +1279,7 @@ bool pkgCacheGenerator::SelectReleaseFile(const string &File,const string &Site, CurrentRlsFile->Flags = Flags; CurrentRlsFile->ID = Cache.HeaderP->ReleaseFileCount; RlsFileName = File; - Cache.HeaderP->RlsFileList = CurrentRlsFile - Cache.RlsFileP; + Cache.HeaderP->RlsFileList = map_pointer{NarrowOffset(CurrentRlsFile - Cache.RlsFileP)}; Cache.HeaderP->ReleaseFileCount++; return true; @@ -1286,7 +1297,7 @@ bool pkgCacheGenerator::SelectFile(std::string const &File, { CurrentFile = nullptr; // Get some space for the structure - map_pointer_t const idxFile = AllocateInMap(sizeof(*CurrentFile)); + auto const idxFile = AllocateInMap(); if (unlikely(idxFile == 0)) return false; CurrentFile = Cache.PkgFileP + idxFile; @@ -1317,11 +1328,11 @@ bool pkgCacheGenerator::SelectFile(std::string const &File, CurrentFile->Component = component; CurrentFile->Flags = Flags; if (CurrentRlsFile != nullptr) - CurrentFile->Release = CurrentRlsFile - Cache.RlsFileP; + CurrentFile->Release = map_pointer{NarrowOffset(CurrentRlsFile - Cache.RlsFileP)}; else CurrentFile->Release = 0; PkgFileName = File; - Cache.HeaderP->FileList = CurrentFile - Cache.PkgFileP; + Cache.HeaderP->FileList = map_pointer{NarrowOffset(CurrentFile - Cache.PkgFileP)}; Cache.HeaderP->PackageFileCount++; if (Progress != 0) @@ -1339,7 +1350,6 @@ map_stringitem_t pkgCacheGenerator::StoreString(enum StringType const type, cons auto strings = &strMixed; switch(type) { case MIXED: strings = &strMixed; break; - case PKGNAME: strings = &strPkgNames; break; case VERSIONNUMBER: strings = &strVersions; break; case SECTION: strings = &strSections; break; default: _error->Fatal("Unknown enum type used for string storage of '%.*s'", Size, S); return 0; @@ -1364,6 +1374,7 @@ public: ScopedErrorRevert() { _error->PushToStack(); } ~ScopedErrorRevert() { _error->RevertToStack(); } }; + static bool CheckValidity(FileFd &CacheFile, std::string const &CacheFileName, pkgSourceList &List, FileIterator const Start, @@ -1634,7 +1645,7 @@ static bool loadBackMMapFromFile(std::unique_ptr &Gen, if (CacheF.IsOpen() == false || CacheF.Seek(0) == false || CacheF.Failed()) return false; _error->PushToStack(); - map_pointer_t const alloc = Map->RawAllocate(CacheF.Size()); + uint32_t const alloc = Map->RawAllocate(CacheF.Size()); bool const newError = _error->PendingError(); _error->MergeWithStack(); if (alloc == 0 && newError) @@ -1644,9 +1655,6 @@ static bool loadBackMMapFromFile(std::unique_ptr &Gen, Gen.reset(new pkgCacheGenerator(Map.get(),Progress)); return Gen->Start(); } -bool pkgMakeStatusCache(pkgSourceList &List,OpProgress &Progress, - MMap **OutMap, bool AllowMem) - { return pkgCacheGenerator::MakeStatusCache(List, &Progress, OutMap, AllowMem); } bool pkgCacheGenerator::MakeStatusCache(pkgSourceList &List,OpProgress *Progress, MMap **OutMap,bool) { @@ -1809,8 +1817,6 @@ public: ScopedErrorMerge() { _error->PushToStack(); } ~ScopedErrorMerge() { _error->MergeWithStack(); } }; -bool pkgMakeOnlyStatusCache(OpProgress &Progress,DynamicMMap **OutMap) - { return pkgCacheGenerator::MakeOnlyStatusCache(&Progress, OutMap); } bool pkgCacheGenerator::MakeOnlyStatusCache(OpProgress *Progress,DynamicMMap **OutMap) { std::vector Files; diff --git a/apt-pkg/pkgcachegen.h b/apt-pkg/pkgcachegen.h index e11e97e..f5b4c80 100644 --- a/apt-pkg/pkgcachegen.h +++ b/apt-pkg/pkgcachegen.h @@ -19,7 +19,6 @@ #define PKGLIB_PKGCACHEGEN_H #include -#include #include #include @@ -28,9 +27,7 @@ #if __cplusplus >= 201103L #include #endif -#ifdef APT_PKG_EXPOSE_STRING_VIEW #include -#endif class FileFd; class pkgSourceList; @@ -40,12 +37,13 @@ class pkgCacheListParser; class APT_HIDDEN pkgCacheGenerator /*{{{*/ { -#ifdef APT_PKG_EXPOSE_STRING_VIEW APT_HIDDEN map_stringitem_t WriteStringInMap(APT::StringView String) { return WriteStringInMap(String.data(), String.size()); }; -#endif APT_HIDDEN map_stringitem_t WriteStringInMap(const char *String); APT_HIDDEN map_stringitem_t WriteStringInMap(const char *String, const unsigned long &Len); - APT_HIDDEN map_pointer_t AllocateInMap(const unsigned long &size); + APT_HIDDEN uint32_t AllocateInMap(const unsigned long &size); + template map_pointer AllocateInMap() { + return map_pointer{AllocateInMap(sizeof(T))}; + } // Dirty hack for public users that do not use C++11 yet #if __cplusplus >= 201103L @@ -74,7 +72,6 @@ class APT_HIDDEN pkgCacheGenerator /*{{{*/ }; std::unordered_set strMixed; - std::unordered_set strPkgNames; std::unordered_set strVersions; std::unordered_set strSections; #endif @@ -112,30 +109,26 @@ class APT_HIDDEN pkgCacheGenerator /*{{{*/ std::string PkgFileName; pkgCache::PackageFile *CurrentFile; -#ifdef APT_PKG_EXPOSE_STRING_VIEW bool NewGroup(pkgCache::GrpIterator &Grp, APT::StringView Name); bool NewPackage(pkgCache::PkgIterator &Pkg, APT::StringView Name, APT::StringView Arch); - map_pointer_t NewVersion(pkgCache::VerIterator &Ver, APT::StringView const &VerStr, - map_pointer_t const ParentPkg, unsigned short const Hash, - map_pointer_t const Next); - map_pointer_t NewDescription(pkgCache::DescIterator &Desc,const std::string &Lang, APT::StringView md5sum,map_stringitem_t const idxmd5str); -#endif + map_pointer NewVersion(pkgCache::VerIterator &Ver, APT::StringView const &VerStr, + map_pointer const ParentPkg, uint32_t Hash, + map_pointer const Next); + map_pointer NewDescription(pkgCache::DescIterator &Desc,const std::string &Lang, APT::StringView md5sum,map_stringitem_t const idxmd5str); bool NewFileVer(pkgCache::VerIterator &Ver,ListParser &List); bool NewFileDesc(pkgCache::DescIterator &Desc,ListParser &List); bool NewDepends(pkgCache::PkgIterator &Pkg, pkgCache::VerIterator &Ver, - map_pointer_t const Version, uint8_t const Op, - uint8_t const Type, map_pointer_t* &OldDepLast); + map_stringitem_t const Version, uint8_t const Op, + uint8_t const Type, map_pointer* &OldDepLast); bool NewProvides(pkgCache::VerIterator &Ver, pkgCache::PkgIterator &Pkg, map_stringitem_t const ProvidesVersion, uint8_t const Flags); public: - enum StringType { MIXED, PKGNAME, VERSIONNUMBER, SECTION }; + enum StringType { MIXED, VERSIONNUMBER, SECTION }; map_stringitem_t StoreString(StringType const type, const char * S, unsigned int const Size); -#ifdef APT_PKG_EXPOSE_STRING_VIEW inline map_stringitem_t StoreString(enum StringType const type, APT::StringView S) {return StoreString(type, S.data(),S.length());}; -#endif void DropProgress() {Progress = 0;}; bool SelectFile(const std::string &File,pkgIndexFile const &Index, std::string const &Architecture, std::string const &Component, unsigned long Flags = 0); @@ -163,19 +156,15 @@ class APT_HIDDEN pkgCacheGenerator /*{{{*/ void * const d; APT_HIDDEN bool MergeListGroup(ListParser &List, std::string const &GrpName); APT_HIDDEN bool MergeListPackage(ListParser &List, pkgCache::PkgIterator &Pkg); -#ifdef APT_PKG_EXPOSE_STRING_VIEW APT_HIDDEN bool MergeListVersion(ListParser &List, pkgCache::PkgIterator &Pkg, APT::StringView const &Version, pkgCache::VerIterator* &OutVer); -#endif APT_HIDDEN bool AddImplicitDepends(pkgCache::GrpIterator &G, pkgCache::PkgIterator &P, pkgCache::VerIterator &V); APT_HIDDEN bool AddImplicitDepends(pkgCache::VerIterator &V, pkgCache::PkgIterator &D); -#ifdef APT_PKG_EXPOSE_STRING_VIEW APT_HIDDEN bool AddNewDescription(ListParser &List, pkgCache::VerIterator &Ver, std::string const &lang, APT::StringView CurMd5, map_stringitem_t &md5idx); -#endif }; /*}}}*/ // This is the abstract package list parser class. /*{{{*/ @@ -186,20 +175,17 @@ class APT_HIDDEN pkgCacheListParser // Some cache items pkgCache::VerIterator OldDepVer; - map_pointer_t *OldDepLast; + map_pointer *OldDepLast; void * const d; protected: - + inline bool NewGroup(pkgCache::GrpIterator &Grp, APT::StringView Name) { return Owner->NewGroup(Grp, Name); } inline map_stringitem_t StoreString(pkgCacheGenerator::StringType const type, const char *S,unsigned int Size) {return Owner->StoreString(type, S, Size);}; -#ifdef APT_PKG_EXPOSE_STRING_VIEW inline map_stringitem_t StoreString(pkgCacheGenerator::StringType const type, APT::StringView S) {return Owner->StoreString(type, S);}; inline map_stringitem_t WriteString(APT::StringView S) {return Owner->WriteStringInMap(S.data(), S.size());}; -#endif inline map_stringitem_t WriteString(const char *S,unsigned int Size) {return Owner->WriteStringInMap(S,Size);}; -#ifdef APT_PKG_EXPOSE_STRING_VIEW bool NewDepends(pkgCache::VerIterator &Ver,APT::StringView Package, APT::StringView Arch, APT::StringView Version,uint8_t const Op, uint8_t const Type); @@ -208,28 +194,23 @@ class APT_HIDDEN pkgCacheListParser uint8_t const Flags); bool NewProvidesAllArch(pkgCache::VerIterator &Ver, APT::StringView Package, APT::StringView Version, uint8_t const Flags); -#endif public: // These all operate against the current section virtual std::string Package() = 0; virtual bool ArchitectureAll() = 0; -#ifdef APT_PKG_EXPOSE_STRING_VIEW virtual APT::StringView Architecture() = 0; virtual APT::StringView Version() = 0; -#endif virtual bool NewVersion(pkgCache::VerIterator &Ver) = 0; virtual std::vector AvailableDescriptionLanguages() = 0; -#ifdef APT_PKG_EXPOSE_STRING_VIEW virtual APT::StringView Description_md5() = 0; -#endif - virtual unsigned short VersionHash() = 0; + virtual uint32_t VersionHash() = 0; /** compare currently parsed version with given version * * \param Hash of the currently parsed version * \param Ver to compare with */ - virtual bool SameVersion(unsigned short const Hash, pkgCache::VerIterator const &Ver); + virtual bool SameVersion(uint32_t Hash, pkgCache::VerIterator const &Ver); virtual bool UsePackage(pkgCache::PkgIterator &Pkg, pkgCache::VerIterator &Ver) = 0; virtual map_filesize_t Offset() = 0; @@ -245,8 +226,4 @@ class APT_HIDDEN pkgCacheListParser }; /*}}}*/ -APT_DEPRECATED_MSG("Use pkgCacheGenerator::MakeStatusCache instead") bool pkgMakeStatusCache(pkgSourceList &List,OpProgress &Progress, - MMap **OutMap = 0,bool AllowMem = false); -APT_DEPRECATED_MSG("Use pkgCacheGenerator::MakeOnlyStatusCache instead") bool pkgMakeOnlyStatusCache(OpProgress &Progress,DynamicMMap **OutMap); - #endif diff --git a/apt-pkg/pkgrecords.h b/apt-pkg/pkgrecords.h index 6d1342d..09c0b5f 100644 --- a/apt-pkg/pkgrecords.h +++ b/apt-pkg/pkgrecords.h @@ -23,7 +23,7 @@ #include #include -class pkgRecords /*{{{*/ +class APT_PUBLIC pkgRecords /*{{{*/ { public: class Parser; @@ -45,7 +45,7 @@ class pkgRecords /*{{{*/ virtual ~pkgRecords(); }; /*}}}*/ -class pkgRecords::Parser /*{{{*/ +class APT_PUBLIC pkgRecords::Parser /*{{{*/ { protected: @@ -67,10 +67,6 @@ class pkgRecords::Parser /*{{{*/ * choose the hash to be used. */ virtual HashStringList Hashes() const { return HashStringList(); }; - APT_DEPRECATED_MSG("Use .Hashes instead of a hardcoded hash algorithm") std::string MD5Hash() const { return GetHashFromHashes("MD5Sum"); }; - APT_DEPRECATED_MSG("Use .Hashes instead of a hardcoded hash algorithm") std::string SHA1Hash() const { return GetHashFromHashes("SHA1"); }; - APT_DEPRECATED_MSG("Use .Hashes instead of a hardcoded hash algorithm") std::string SHA256Hash() const { return GetHashFromHashes("SHA256"); }; - APT_DEPRECATED_MSG("Use .Hashes instead of a hardcoded hash algorithm") std::string SHA512Hash() const { return GetHashFromHashes("SHA512"); }; // These are some general stats about the package virtual std::string Maintainer() {return std::string();}; diff --git a/apt-pkg/pkgsystem.cc b/apt-pkg/pkgsystem.cc index eaa3f5a..7e48a68 100644 --- a/apt-pkg/pkgsystem.cc +++ b/apt-pkg/pkgsystem.cc @@ -56,22 +56,6 @@ APT_PURE pkgSystem *pkgSystem::GetSystem(const char *Label) return 0; } /*}}}*/ -bool pkgSystem::MultiArchSupported() const /*{{{*/ -{ - debSystem const * const deb = dynamic_cast(this); - if (deb != NULL) - return deb->SupportsMultiArch(); - return true; -} - /*}}}*/ -std::vector pkgSystem::ArchitecturesSupported() const /*{{{*/ -{ - debSystem const * const deb = dynamic_cast(this); - if (deb != NULL) - return deb->SupportedArchitectures(); - return {}; -} - /*}}}*/ // pkgSystem::Set/GetVersionMapping - for internal/external communication/*{{{*/ void pkgSystem::SetVersionMapping(map_id_t const in, map_id_t const out) { @@ -85,29 +69,4 @@ map_id_t pkgSystem::GetVersionMapping(map_id_t const in) const return (o == d->idmap.end()) ? in : o->second; } /*}}}*/ - -bool pkgSystem::LockInner() /*{{{*/ -{ - debSystem * const deb = dynamic_cast(this); - if (deb != NULL) - return deb->LockInner(); - return _error->Error("LockInner is not implemented"); -} - /*}}}*/ -bool pkgSystem::UnLockInner(bool NoErrors) /*{{{*/ -{ - debSystem * const deb = dynamic_cast(this); - if (deb != NULL) - return deb->UnLockInner(NoErrors); - return _error->Error("UnLockInner is not implemented"); -} - /*}}}*/ -bool pkgSystem::IsLocked() /*{{{*/ -{ - debSystem * const deb = dynamic_cast(this); - if (deb != NULL) - return deb->IsLocked(); - return true; -} - /*}}}*/ pkgSystem::~pkgSystem() {} diff --git a/apt-pkg/pkgsystem.h b/apt-pkg/pkgsystem.h index b420705..10065d0 100644 --- a/apt-pkg/pkgsystem.h +++ b/apt-pkg/pkgsystem.h @@ -40,18 +40,16 @@ #include -#ifndef APT_8_CLEANER_HEADERS -#include -#endif class pkgDepCache; class pkgPackageManager; class pkgVersioningSystem; class Configuration; class pkgIndexFile; +class OpProgress; class pkgSystemPrivate; -class pkgSystem +class APT_PUBLIC pkgSystem { public: @@ -65,7 +63,7 @@ class pkgSystem /* Prevent other programs from touching shared data not covered by other locks (cache or state locks) */ - virtual bool Lock() = 0; + virtual bool Lock(OpProgress *const Progress = nullptr) = 0; virtual bool UnLock(bool NoErrors = false) = 0; /* Various helper classes to interface with specific bits of this @@ -86,7 +84,7 @@ class pkgSystem virtual bool FindIndex(pkgCache::PkgFileIterator File, pkgIndexFile *&Found) const = 0; - /* Evauluate how 'right' we are for this system based on the filesystem + /* Evaluate how 'right' we are for this system based on the filesystem etc.. */ virtual signed Score(Configuration const &/*Cnf*/) { return 0; @@ -103,7 +101,7 @@ class pkgSystem * * @return \b true if the system supports MultiArch, \b false if not. */ - bool MultiArchSupported() const; + virtual bool MultiArchSupported() const = 0; /** architectures supported by this system * * A MultiArch capable system might be configured to use @@ -112,7 +110,7 @@ class pkgSystem * @return a list of all architectures (native + foreign) configured * for on this system (aka: which can be installed without force) */ - std::vector ArchitecturesSupported() const; + virtual std::vector ArchitecturesSupported() const = 0; APT_HIDDEN void SetVersionMapping(map_id_t const in, map_id_t const out); APT_HIDDEN map_id_t GetVersionMapping(map_id_t const in) const; @@ -127,15 +125,15 @@ class pkgSystem * lock without releasing the overall outer lock, so that dpkg can run * correctly but no other APT instance can acquire the system lock. */ - bool LockInner(); - bool UnLockInner(bool NoErrors = false); + virtual bool LockInner(OpProgress *const Progress = 0, int timeOutSec = 0) = 0; + virtual bool UnLockInner(bool NoErrors = false) = 0; /// checks if the system is currently locked - bool IsLocked(); + virtual bool IsLocked() = 0; private: pkgSystemPrivate * const d; }; // The environment we are operating in. -extern pkgSystem *_system; +APT_PUBLIC extern pkgSystem *_system; #endif diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc index 7986aa5..034fce7 100644 --- a/apt-pkg/policy.cc +++ b/apt-pkg/policy.cc @@ -1,4 +1,4 @@ -// -*- mode: cpp; mode: fold -*- + // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ /* ###################################################################### @@ -18,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -45,18 +44,14 @@ constexpr short NEVER_PIN = std::numeric_limits::min(); // --------------------------------------------------------------------- /* Set the defaults for operation. The default mode with no loaded policy file matches the V0 policy engine. */ -pkgPolicy::pkgPolicy(pkgCache *Owner) : Pins(nullptr), VerPins(nullptr), +pkgPolicy::pkgPolicy(pkgCache *Owner) : VerPins(nullptr), PFPriority(nullptr), Cache(Owner), d(NULL) { if (Owner == 0) return; PFPriority = new signed short[Owner->Head().PackageFileCount]; - auto PackageCount = Owner->Head().PackageCount; - Pins = new Pin[PackageCount]; VerPins = new Pin[Owner->Head().VersionCount]; - for (decltype(PackageCount) I = 0; I != PackageCount; ++I) - Pins[I].Type = pkgVersionMatch::None; auto VersionCount = Owner->Head().VersionCount; for (decltype(VersionCount) I = 0; I != VersionCount; ++I) VerPins[I].Type = pkgVersionMatch::None; @@ -89,7 +84,6 @@ pkgPolicy::pkgPolicy(pkgCache *Owner) : Pins(nullptr), VerPins(nullptr), /* */ bool pkgPolicy::InitDefaults() { - std::vector> authconfs; // Initialize the priorities based on the status of the package file for (pkgCache::PkgFileIterator I = Cache->FileBegin(); I != Cache->FileEnd(); ++I) { @@ -100,8 +94,6 @@ bool pkgPolicy::InitDefaults() PFPriority[I->ID] = 100; else if (I.Flagged(pkgCache::Flag::NotAutomatic)) PFPriority[I->ID] = 1; - if (I.Flagged(pkgCache::Flag::PackagesRequireAuthorization) && !IsAuthorized(I, authconfs)) - PFPriority[I->ID] = NEVER_PIN; } // Apply the defaults.. @@ -179,6 +171,11 @@ void pkgPolicy::CreatePin(pkgVersionMatch::MatchType Type,string Name, return; } + bool IsSourcePin = APT::String::Startswith(Name, "src:"); + if (IsSourcePin) { + Name = Name.substr(sizeof("src:") - 1); + } + size_t found = Name.rfind(':'); string Arch; if (found != string::npos) { @@ -194,10 +191,11 @@ void pkgPolicy::CreatePin(pkgVersionMatch::MatchType Type,string Name, for (pkgCache::GrpIterator G = Cache->GrpBegin(); G.end() != true; ++G) if (Name != G.Name() && match.ExpressionMatches(Name, G.Name())) { + auto NameToPinFor = IsSourcePin ? string("src:").append(G.Name()) : string(G.Name()); if (Arch.empty() == false) - CreatePin(Type, string(G.Name()).append(":").append(Arch), Data, Priority); + CreatePin(Type, NameToPinFor.append(":").append(Arch), Data, Priority); else - CreatePin(Type, G.Name(), Data, Priority); + CreatePin(Type, NameToPinFor, Data, Priority); } return; } @@ -213,28 +211,49 @@ void pkgPolicy::CreatePin(pkgVersionMatch::MatchType Type,string Name, else MatchingArch = Arch; APT::CacheFilter::PackageArchitectureMatchesSpecification pams(MatchingArch); - for (pkgCache::PkgIterator Pkg = Grp.PackageList(); Pkg.end() != true; Pkg = Grp.NextPkg(Pkg)) - { - if (pams(Pkg.Arch()) == false) - continue; - Pin *P = Pins + Pkg->ID; - // the first specific stanza for a package is the ruler, - // all others need to be ignored - if (P->Type != pkgVersionMatch::None) - P = &*Unmatched.insert(Unmatched.end(),PkgPin(Pkg.FullName())); - P->Type = Type; - P->Priority = Priority; - P->Data = Data; - matched = true; - - // Find matching version(s) and copy the pin into it - pkgVersionMatch Match(P->Data,P->Type); - for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() != true; ++Ver) + + if (IsSourcePin) { + for (pkgCache::VerIterator Ver = Grp.VersionsInSource(); not Ver.end(); Ver = Ver.NextInSource()) { + if (pams(Ver.ParentPkg().Arch()) == false) + continue; + + PkgPin P(Ver.ParentPkg().FullName()); + P.Type = Type; + P.Priority = Priority; + P.Data = Data; + // Find matching version(s) and copy the pin into it + pkgVersionMatch Match(P.Data,P.Type); if (Match.VersionMatches(Ver)) { Pin *VP = VerPins + Ver->ID; - if (VP->Type == pkgVersionMatch::None) - *VP = *P; + if (VP->Type == pkgVersionMatch::None) { + *VP = P; + matched = true; + } + } + } + } else { + for (pkgCache::PkgIterator Pkg = Grp.PackageList(); Pkg.end() != true; Pkg = Grp.NextPkg(Pkg)) + { + if (pams(Pkg.Arch()) == false) + continue; + + PkgPin P(Pkg.FullName()); + P.Type = Type; + P.Priority = Priority; + P.Data = Data; + + // Find matching version(s) and copy the pin into it + pkgVersionMatch Match(P.Data,P.Type); + for (pkgCache::VerIterator Ver = Pkg.VersionList(); Ver.end() != true; ++Ver) + { + if (Match.VersionMatches(Ver)) { + Pin *VP = VerPins + Ver->ID; + if (VP->Type == pkgVersionMatch::None) { + *VP = P; + matched = true; + } + } } } } @@ -252,28 +271,9 @@ void pkgPolicy::CreatePin(pkgVersionMatch::MatchType Type,string Name, } } /*}}}*/ -// Policy::GetMatch - Get the matching version for a package pin /*{{{*/ -// --------------------------------------------------------------------- -/* */ -pkgCache::VerIterator pkgPolicy::GetMatch(pkgCache::PkgIterator const &Pkg) -{ - const Pin &PPkg = Pins[Pkg->ID]; - if (PPkg.Type == pkgVersionMatch::None) - return pkgCache::VerIterator(*Pkg.Cache()); - - pkgVersionMatch Match(PPkg.Data,PPkg.Type); - return Match.Find(Pkg); -} - /*}}}*/ // Policy::GetPriority - Get the priority of the package pin /*{{{*/ // --------------------------------------------------------------------- /* */ -APT_PURE signed short pkgPolicy::GetPriority(pkgCache::PkgIterator const &Pkg) -{ - if (Pins[Pkg->ID].Type != pkgVersionMatch::None) - return Pins[Pkg->ID].Priority; - return 0; -} APT_PURE signed short pkgPolicy::GetPriority(pkgCache::VerIterator const &Ver, bool ConsiderFiles) { if (VerPins[Ver->ID].Type != pkgVersionMatch::None) @@ -309,6 +309,21 @@ APT_PURE signed short pkgPolicy::GetPriority(pkgCache::PkgFileIterator const &Fi { return PFPriority[File->ID]; } + /*}}}*/ +// SetPriority - Directly set priority /*{{{*/ +// --------------------------------------------------------------------- +void pkgPolicy::SetPriority(pkgCache::VerIterator const &Ver, signed short Priority) +{ + Pin pin; + pin.Data = "pkgPolicy::SetPriority"; + pin.Priority = Priority; + VerPins[Ver->ID] = pin; +} +void pkgPolicy::SetPriority(pkgCache::PkgFileIterator const &File, signed short Priority) +{ + PFPriority[File->ID] = Priority; +} + /*}}}*/ // ReadPinDir - Load the pin files from this dir into a Policy /*{{{*/ // --------------------------------------------------------------------- @@ -439,4 +454,4 @@ bool ReadPinFile(pkgPolicy &Plcy,string File) } /*}}}*/ -pkgPolicy::~pkgPolicy() {delete [] PFPriority; delete [] Pins; delete [] VerPins; } +pkgPolicy::~pkgPolicy() {delete [] PFPriority; delete [] VerPins; } diff --git a/apt-pkg/policy.h b/apt-pkg/policy.h index bcd1daf..7f30d40 100644 --- a/apt-pkg/policy.h +++ b/apt-pkg/policy.h @@ -39,11 +39,8 @@ #include #include -#ifndef APT_8_CLEANER_HEADERS -using std::vector; -#endif -class pkgPolicy : public pkgDepCache::Policy +class APT_PUBLIC pkgPolicy : public pkgDepCache::Policy { protected: @@ -60,8 +57,7 @@ class pkgPolicy : public pkgDepCache::Policy std::string Pkg; explicit PkgPin(std::string const &Pkg) : Pin(), Pkg(Pkg) {}; }; - - Pin *Pins; + Pin *VerPins; signed short *PFPriority; std::vector Defaults; @@ -74,14 +70,14 @@ class pkgPolicy : public pkgDepCache::Policy // Things for manipulating pins void CreatePin(pkgVersionMatch::MatchType Type,std::string Pkg, std::string Data,signed short Priority); - pkgCache::VerIterator GetMatch(pkgCache::PkgIterator const &Pkg); // Things for the cache interface. virtual pkgCache::VerIterator GetCandidateVer(pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; - virtual signed short GetPriority(pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; virtual signed short GetPriority(pkgCache::VerIterator const &Ver, bool ConsiderFiles = true) APT_OVERRIDE; virtual signed short GetPriority(pkgCache::PkgFileIterator const &File) APT_OVERRIDE; + void SetPriority(pkgCache::VerIterator const &Ver, signed short Priority); + void SetPriority(pkgCache::PkgFileIterator const &File, signed short Priority); bool InitDefaults(); explicit pkgPolicy(pkgCache *Owner); @@ -90,7 +86,7 @@ class pkgPolicy : public pkgDepCache::Policy void * const d; }; -bool ReadPinFile(pkgPolicy &Plcy, std::string File = ""); -bool ReadPinDir(pkgPolicy &Plcy, std::string Dir = ""); +APT_PUBLIC bool ReadPinFile(pkgPolicy &Plcy, std::string File = ""); +APT_PUBLIC bool ReadPinDir(pkgPolicy &Plcy, std::string Dir = ""); #endif diff --git a/apt-pkg/prettyprinters.h b/apt-pkg/prettyprinters.h index 40f9d66..80b7729 100644 --- a/apt-pkg/prettyprinters.h +++ b/apt-pkg/prettyprinters.h @@ -31,7 +31,7 @@ struct PrettyDep }; } -std::ostream& operator<<(std::ostream& os, const APT::PrettyPkg& pp); -std::ostream& operator<<(std::ostream& os, const APT::PrettyDep& pd); +APT_PUBLIC std::ostream& operator<<(std::ostream& os, const APT::PrettyPkg& pp); +APT_PUBLIC std::ostream& operator<<(std::ostream& os, const APT::PrettyDep& pd); #endif diff --git a/apt-pkg/sourcelist.cc b/apt-pkg/sourcelist.cc index a3d6931..cd7dbce 100644 --- a/apt-pkg/sourcelist.cc +++ b/apt-pkg/sourcelist.cc @@ -215,7 +215,7 @@ bool pkgSourceList::Type::ParseLine(vector &List, // get one option, e.g. option1=value1 string option; if (ParseQuoteWord(Buffer,option) == false) - return _error->Error(_("Malformed entry %u in %s file %s (%s)"), CurLine, "list", File.c_str(), "[option] unparseable"); + return _error->Error(_("Malformed entry %u in %s file %s (%s)"), CurLine, "list", File.c_str(), "[option] unparsable"); if (option.length() < 3) return _error->Error(_("Malformed entry %u in %s file %s (%s)"), CurLine, "list", File.c_str(), "[option] too short"); @@ -571,8 +571,8 @@ bool pkgSourceList::AddVolatileFile(std::string const &File, std::vector fileslst; - if (changes.Files2(fileslst) == false || fileslst.empty()) + std::vector fileslst; + if (changes.Files(fileslst) == false || fileslst.empty()) return false; auto const basedir = flNotFile(File); for (auto && file: fileslst) @@ -622,22 +622,5 @@ void pkgSourceList::AddVolatileFiles(CommandLine &CmdL, std::vector } return false; }); -} -void pkgSourceList::AddVolatileFiles(CommandLine &CmdL, std::vector * const VolatileCmdL) -{ - std::remove_if(CmdL.FileList + 1, CmdL.FileList + 1 + CmdL.FileSize(), [&](char const * const I) { - if (I != nullptr && (I[0] == '/' || (I[0] == '.' && (I[1] == '\0' || (I[1] == '.' && (I[2] == '\0' || I[2] == '/')) || I[1] == '/')))) - { - if (AddVolatileFile(I)) - { - if (VolatileCmdL != nullptr) - VolatileCmdL->push_back(I); - } - else - _error->Error(_("Unsupported file %s given on commandline"), I); - return true; - } - return false; - }); } /*}}}*/ diff --git a/apt-pkg/sourcelist.h b/apt-pkg/sourcelist.h index fedf90f..4541803 100644 --- a/apt-pkg/sourcelist.h +++ b/apt-pkg/sourcelist.h @@ -31,14 +31,6 @@ #include #include -#ifndef APT_8_CLEANER_HEADERS -#include -#endif -#ifndef APT_8_CLEANER_HEADERS -#include -using std::string; -using std::vector; -#endif class FileFd; class pkgTagSection; @@ -47,7 +39,7 @@ class pkgIndexFile; class metaIndex; class CommandLine; -class pkgSourceList +class APT_PUBLIC pkgSourceList { void * const d; std::vector VolatileFiles; @@ -116,7 +108,7 @@ class pkgSourceList /** \brief add file for parsing, but not to the cache * - * pkgIndexFiles origining from pkgSourcesList are included in + * pkgIndexFiles originating from pkgSourcesList are included in * srcpkgcache, the status files added via #AddStatusFiles are * included in pkgcache, but these files here are not included in * any cache to have the possibility of having a file included just @@ -131,7 +123,6 @@ class pkgSourceList void AddVolatileFile(pkgIndexFile * const File); bool AddVolatileFile(std::string const &File); bool AddVolatileFile(std::string const &File, std::vector * const VolatileCmdL); - APT_DEPRECATED_MSG("Use the overload with string-vector") void AddVolatileFiles(CommandLine &CmdL, std::vector * const VolatileCmdL); void AddVolatileFiles(CommandLine &CmdL, std::vector * const VolatileCmdL); /** @return list of files registered with #AddVolatileFile */ diff --git a/apt-pkg/srcrecords.cc b/apt-pkg/srcrecords.cc index 9d515ae..03bda75 100644 --- a/apt-pkg/srcrecords.cc +++ b/apt-pkg/srcrecords.cc @@ -52,7 +52,7 @@ pkgSrcRecords::pkgSrcRecords(pkgSourceList &List) : d(NULL), Files(0) // Doesn't work without any source index files if (Files.empty() == true) { - _error->Error(_("You must put some 'source' URIs" + _error->Error(_("You must put some 'deb-src' URIs" " in your sources.list")); return; } @@ -146,36 +146,6 @@ const char *pkgSrcRecords::Parser::BuildDepType(unsigned char const &Type) return fields[Type]; } /*}}}*/ -bool pkgSrcRecords::Parser::Files2(std::vector &F2)/*{{{*/ -{ - debSrcRecordParser * const deb = dynamic_cast(this); - if (deb != NULL) - return deb->Files2(F2); - - std::vector F; - if (Files(F) == false) - return false; - for (std::vector::const_iterator f = F.begin(); f != F.end(); ++f) - { - pkgSrcRecords::File2 f2; -#if __GNUC__ >= 4 - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif - f2.MD5Hash = f->MD5Hash; - f2.Size = f->Size; - f2.Hashes.push_back(HashString("MD5Sum", f->MD5Hash)); - f2.FileSize = f->Size; -#if __GNUC__ >= 4 - #pragma GCC diagnostic pop -#endif - f2.Path = f->Path; - f2.Type = f->Type; - F2.push_back(f2); - } - return true; -} - /*}}}*/ pkgSrcRecords::Parser::Parser(const pkgIndexFile *Index) : d(NULL), iIndex(Index) {} diff --git a/apt-pkg/srcrecords.h b/apt-pkg/srcrecords.h index 8c52f56..b9014a5 100644 --- a/apt-pkg/srcrecords.h +++ b/apt-pkg/srcrecords.h @@ -18,32 +18,21 @@ #include #include -#ifndef APT_8_CLEANER_HEADERS -using std::string; -using std::vector; -#endif class pkgSourceList; class pkgIndexFile; -class pkgSrcRecords +class APT_PUBLIC pkgSrcRecords { public: -APT_IGNORE_DEPRECATED_PUSH // Describes a single file struct File { - APT_DEPRECATED_MSG("Use Hashes member instead of hardcoded hash algorithm") std::string MD5Hash; - APT_DEPRECATED_MSG("Use FileSize member instead") unsigned long Size; std::string Path; std::string Type; - }; - struct File2 : public File - { unsigned long long FileSize; HashStringList Hashes; }; -APT_IGNORE_DEPRECATED_POP // Abstract parser for each source record class Parser @@ -86,7 +75,6 @@ APT_IGNORE_DEPRECATED_POP static const char *BuildDepType(unsigned char const &Type) APT_PURE; virtual bool Files(std::vector &F) = 0; - bool Files2(std::vector &F); explicit Parser(const pkgIndexFile *Index); virtual ~Parser(); diff --git a/apt-pkg/statechanges.cc b/apt-pkg/statechanges.cc index 258c848..45468e4 100644 --- a/apt-pkg/statechanges.cc +++ b/apt-pkg/statechanges.cc @@ -1,9 +1,11 @@ #include +#include #include #include #include #include #include +#include #include #include diff --git a/apt-pkg/tagfile-compat.cc b/apt-pkg/tagfile-compat.cc deleted file mode 100644 index 1e1d23e..0000000 --- a/apt-pkg/tagfile-compat.cc +++ /dev/null @@ -1,75 +0,0 @@ -// -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -/* ###################################################################### - - Fast scanner for RFC-822 type header information - - This uses a rotating buffer to load the package information into. - The scanner runs over it and isolates and indexes a single section. - - This defines compat functions for the external code. - - ##################################################################### */ - /*}}}*/ - -#include -#define APT_COMPILING_TAGFILE_COMPAT_CC -#include - -using std::string; -using APT::StringView; - - -bool pkgTagSection::Exists(const char* const Tag) const -{ - return Exists(StringView(Tag)); -} - -bool pkgTagSection::Find(const char *Tag,unsigned int &Pos) const -{ - return Find(StringView(Tag), Pos); -} - -bool pkgTagSection::Find(const char *Tag,const char *&Start, - const char *&End) const -{ - return Find(StringView(Tag), Start, End); -} - -string pkgTagSection::FindS(const char *Tag) const -{ - return Find(StringView(Tag)).to_string(); -} - -string pkgTagSection::FindRawS(const char *Tag) const -{ - return FindRaw(StringView(Tag)).to_string(); -} - -signed int pkgTagSection::FindI(const char *Tag,signed long Default) const -{ - return FindI(StringView(Tag), Default); -} - -unsigned long long pkgTagSection::FindULL(const char *Tag, unsigned long long const &Default) const -{ - return FindULL(StringView(Tag), Default); -} - /*}}}*/ - -bool pkgTagSection::FindB(const char *Tag, bool const &Default) const -{ - return FindB(StringView(Tag), Default); -} - -bool pkgTagSection::FindFlag(const char * const Tag, uint8_t &Flags, - uint8_t const Flag) const -{ - return FindFlag(StringView(Tag), Flags, Flag); -} - -bool pkgTagSection::FindFlag(const char *Tag,unsigned long &Flags, - unsigned long Flag) const -{ - return FindFlag(StringView(Tag), Flags, Flag); -} diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc index 1e7f286..52000c6 100644 --- a/apt-pkg/tagfile.cc +++ b/apt-pkg/tagfile.cc @@ -69,7 +69,7 @@ public: { bool const good; size_t length; - FileChunk(bool const pgood, size_t const plength) : good(pgood), length(plength) {} + FileChunk(bool const pgood, size_t const plength) noexcept : good(pgood), length(plength) {} }; std::list chunks; @@ -473,14 +473,12 @@ bool pkgTagFile::Jump(pkgTagSection &Tag,unsigned long long Offset) // pkgTagSection::pkgTagSection - Constructor /*{{{*/ // --------------------------------------------------------------------- /* */ -APT_IGNORE_DEPRECATED_PUSH pkgTagSection::pkgTagSection() : Section(0), d(new pkgTagSectionPrivate()), Stop(0) { memset(&AlphaIndexes, 0, sizeof(AlphaIndexes)); memset(&BetaIndexes, 0, sizeof(BetaIndexes)); } -APT_IGNORE_DEPRECATED_POP /*}}}*/ // TagSection::Scan - Scan for the end of the header information /*{{{*/ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength, bool const Restart) @@ -515,7 +513,6 @@ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength, bool const R return false; pkgTagSectionPrivate::TagData lastTagData(0); - lastTagData.EndTag = 0; Key lastTagKey = Key::Unknown; unsigned int lastTagHash = 0; while (Stop < End) @@ -531,21 +528,19 @@ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength, bool const R if (isspace_ascii(Stop[0]) == 0) { // store the last found tag - if (lastTagData.EndTag != 0) + if (lastTagData.StartValue != 0) { if (lastTagKey != Key::Unknown) { AlphaIndexes[static_cast(lastTagKey)] = TagCount; } else { if (BetaIndexes[lastTagHash] != 0) lastTagData.NextInBucket = BetaIndexes[lastTagHash]; - APT_IGNORE_DEPRECATED_PUSH BetaIndexes[lastTagHash] = TagCount; - APT_IGNORE_DEPRECATED_POP } d->Tags.push_back(lastTagData); } - APT_IGNORE_DEPRECATED(++TagCount;) + ++TagCount; lastTagData = pkgTagSectionPrivate::TagData(Stop - Section); // find the colon separating tag and value char const * Colon = (char const *) memchr(Stop, ':', End - Stop); @@ -583,14 +578,14 @@ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength, bool const R // Double newline marks the end of the record if (Stop+1 < End && Stop[1] == '\n') { - if (lastTagData.EndTag != 0) + if (lastTagData.StartValue != 0) { if (lastTagKey != Key::Unknown) { AlphaIndexes[static_cast(lastTagKey)] = TagCount; } else { if (BetaIndexes[lastTagHash] != 0) lastTagData.NextInBucket = BetaIndexes[lastTagHash]; - APT_IGNORE_DEPRECATED(BetaIndexes[lastTagHash] = TagCount;) + BetaIndexes[lastTagHash] = TagCount; } d->Tags.push_back(lastTagData); } @@ -673,6 +668,9 @@ bool pkgTagSection::Find(StringView TagView,unsigned int &Pos) const bool pkgTagSection::FindInternal(unsigned int Pos, const char *&Start, const char *&End) const { + if (unlikely(Pos + 1 >= d->Tags.size() || Pos >= d->Tags.size())) + return _error->Error("Internal parsing error"); + Start = Section + d->Tags[Pos].StartValue; // Strip off the gunk from the end End = Section + d->Tags[Pos + 1].StartTag; @@ -717,9 +715,17 @@ StringView pkgTagSection::Find(Key key) const // TagSection::FindRawS - Find a string /*{{{*/ StringView pkgTagSection::FindRawInternal(unsigned int Pos) const { + if (unlikely(Pos + 1 >= d->Tags.size() || Pos >= d->Tags.size())) + return _error->Error("Internal parsing error"), ""; + char const *Start = (char const *) memchr(Section + d->Tags[Pos].EndTag, ':', d->Tags[Pos].StartValue - d->Tags[Pos].EndTag); - ++Start; char const *End = Section + d->Tags[Pos + 1].StartTag; + + if (Start == nullptr) + return ""; + + ++Start; + if (unlikely(Start > End)) return ""; @@ -927,6 +933,8 @@ bool pkgTagSection::FindFlag(unsigned long &Flags, unsigned long Flag, /*}}}*/ void pkgTagSection::Get(const char *&Start,const char *&Stop,unsigned int I) const/*{{{*/ { + if (unlikely(I + 1 >= d->Tags.size() || I >= d->Tags.size())) + abort(); Start = Section + d->Tags[I].StartTag; Stop = Section + d->Tags[I+1].StartTag; } @@ -1065,146 +1073,6 @@ bool pkgTagSection::Write(FileFd &File, char const * const * const Order, std::v } /*}}}*/ -void pkgUserTagSection::TrimRecord(bool /*BeforeRecord*/, const char* &End)/*{{{*/ -{ - for (; Stop < End && (Stop[0] == '\n' || Stop[0] == '\r' || Stop[0] == '#'); Stop++) - if (Stop[0] == '#') - Stop = (const char*) memchr(Stop,'\n',End-Stop); -} - /*}}}*/ - #include "tagfile-order.c" -// TFRewrite - Rewrite a control record /*{{{*/ -// --------------------------------------------------------------------- -/* This writes the control record to stdout rewriting it as necessary. The - override map item specificies the rewriting rules to follow. This also - takes the time to sort the feild list. */ -APT_IGNORE_DEPRECATED_PUSH -bool TFRewrite(FILE *Output,pkgTagSection const &Tags,const char *Order[], - TFRewriteData *Rewrite) -{ - unsigned char Visited[256]; // Bit 1 is Order, Bit 2 is Rewrite - for (unsigned I = 0; I != 256; I++) - Visited[I] = 0; - - // Set new tag up as necessary. - for (unsigned int J = 0; Rewrite != 0 && Rewrite[J].Tag != 0; J++) - { - if (Rewrite[J].NewTag == 0) - Rewrite[J].NewTag = Rewrite[J].Tag; - } - - // Write all of the tags, in order. - if (Order != NULL) - { - for (unsigned int I = 0; Order[I] != 0; I++) - { - bool Rewritten = false; - - // See if this is a field that needs to be rewritten - for (unsigned int J = 0; Rewrite != 0 && Rewrite[J].Tag != 0; J++) - { - if (strcasecmp(Rewrite[J].Tag,Order[I]) == 0) - { - Visited[J] |= 2; - if (Rewrite[J].Rewrite != 0 && Rewrite[J].Rewrite[0] != 0) - { - if (isspace_ascii(Rewrite[J].Rewrite[0])) - fprintf(Output,"%s:%s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite); - else - fprintf(Output,"%s: %s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite); - } - Rewritten = true; - break; - } - } - - // See if it is in the fragment - unsigned Pos; - if (Tags.Find(StringView(Order[I]),Pos) == false) - continue; - Visited[Pos] |= 1; - - if (Rewritten == true) - continue; - - /* Write out this element, taking a moment to rewrite the tag - in case of changes of case. */ - const char *Start; - const char *Stop; - Tags.Get(Start,Stop,Pos); - - if (fputs(Order[I],Output) < 0) - return _error->Errno("fputs","IO Error to output"); - Start += strlen(Order[I]); - if (fwrite(Start,Stop - Start,1,Output) != 1) - return _error->Errno("fwrite","IO Error to output"); - if (Stop[-1] != '\n') - fprintf(Output,"\n"); - } - } - - // Now write all the old tags that were missed. - for (unsigned int I = 0; I != Tags.Count(); I++) - { - if ((Visited[I] & 1) == 1) - continue; - - const char *Start; - const char *Stop; - Tags.Get(Start,Stop,I); - const char *End = Start; - for (; End < Stop && *End != ':'; End++); - - // See if this is a field that needs to be rewritten - bool Rewritten = false; - for (unsigned int J = 0; Rewrite != 0 && Rewrite[J].Tag != 0; J++) - { - if (stringcasecmp(Start,End,Rewrite[J].Tag) == 0) - { - Visited[J] |= 2; - if (Rewrite[J].Rewrite != 0 && Rewrite[J].Rewrite[0] != 0) - { - if (isspace_ascii(Rewrite[J].Rewrite[0])) - fprintf(Output,"%s:%s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite); - else - fprintf(Output,"%s: %s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite); - } - - Rewritten = true; - break; - } - } - - if (Rewritten == true) - continue; - - // Write out this element - if (fwrite(Start,Stop - Start,1,Output) != 1) - return _error->Errno("fwrite","IO Error to output"); - if (Stop[-1] != '\n') - fprintf(Output,"\n"); - } - - // Now write all the rewrites that were missed - for (unsigned int J = 0; Rewrite != 0 && Rewrite[J].Tag != 0; J++) - { - if ((Visited[J] & 2) == 2) - continue; - - if (Rewrite[J].Rewrite != 0 && Rewrite[J].Rewrite[0] != 0) - { - if (isspace_ascii(Rewrite[J].Rewrite[0])) - fprintf(Output,"%s:%s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite); - else - fprintf(Output,"%s: %s\n",Rewrite[J].NewTag,Rewrite[J].Rewrite); - } - } - - return true; -} -APT_IGNORE_DEPRECATED_POP - /*}}}*/ - pkgTagSection::~pkgTagSection() { delete d; } diff --git a/apt-pkg/tagfile.h b/apt-pkg/tagfile.h index 8b59c43..f6bdd12 100644 --- a/apt-pkg/tagfile.h +++ b/apt-pkg/tagfile.h @@ -27,13 +27,8 @@ #include #include #include -#ifdef APT_PKG_EXPOSE_STRING_VIEW #include -#endif -#ifndef APT_8_CLEANER_HEADERS -#include -#endif class FileFd; class pkgTagSectionPrivate; @@ -46,7 +41,7 @@ class pkgTagFilePrivate; * Beware: This class does \b NOT support (#-)comments in in- or output! * If the input contains comments they have to be stripped first like pkgTagFile * does with SUPPORT_COMMENTS flag set. */ -class pkgTagSection +class APT_PUBLIC pkgTagSection { const char *Section; unsigned int AlphaIndexes[128]; @@ -55,10 +50,8 @@ class pkgTagSection pkgTagSectionPrivate * const d; APT_HIDDEN bool FindInternal(unsigned int Pos,const char *&Start, const char *&End) const; -#if defined(APT_PKG_EXPOSE_STRING_VIEW) APT_HIDDEN APT::StringView FindInternal(unsigned int Pos) const; APT_HIDDEN APT::StringView FindRawInternal(unsigned int Pos) const; -#endif APT_HIDDEN signed int FindIInternal(unsigned int Pos,signed long Default = 0) const; APT_HIDDEN bool FindBInternal(unsigned int Pos, bool Default = false) const; APT_HIDDEN unsigned long long FindULLInternal(unsigned int Pos, unsigned long long const &Default = 0) const; @@ -73,21 +66,9 @@ class pkgTagSection inline bool operator ==(const pkgTagSection &rhs) {return Section == rhs.Section;}; inline bool operator !=(const pkgTagSection &rhs) {return Section != rhs.Section;}; -#if !defined(APT_PKG_EXPOSE_STRING_VIEW) || defined(APT_COMPILING_TAGFILE_COMPAT_CC) - bool Find(const char *Tag,const char *&Start, const char *&End) const; - bool Find(const char *Tag,unsigned int &Pos) const; - signed int FindI(const char *Tag,signed long Default = 0) const; - bool FindB(const char *Tag, bool const &Default = false) const; - unsigned long long FindULL(const char *Tag, unsigned long long const &Default = 0) const; - bool FindFlag(const char * const Tag,uint8_t &Flags, - uint8_t const Flag) const; - bool FindFlag(const char *Tag,unsigned long &Flags, - unsigned long Flag) const; - bool Exists(const char* const Tag) const; -#endif // TODO: Remove internally - std::string FindS(const char *Tag) const; - std::string FindRawS(const char *Tag) const; + std::string FindS(APT::StringView sv) const { return Find(sv).to_string(); } + std::string FindRawS(APT::StringView sv) const { return FindRaw(sv).to_string(); }; // Functions for lookup with a perfect hash function enum class Key; @@ -99,23 +80,21 @@ class pkgTagSection APT_HIDDEN bool FindFlag(Key key,uint8_t &Flags, uint8_t const Flag) const; APT_HIDDEN bool FindFlag(Key key,unsigned long &Flags, unsigned long Flag) const; APT_HIDDEN bool Exists(Key key) const; -#ifdef APT_PKG_EXPOSE_STRING_VIEW APT_HIDDEN APT::StringView Find(Key key) const; APT_HIDDEN APT::StringView FindRaw(Key key) const; - APT_HIDDEN bool Find(APT::StringView Tag,const char *&Start, const char *&End) const; - APT_HIDDEN bool Find(APT::StringView Tag,unsigned int &Pos) const; - APT_HIDDEN APT::StringView Find(APT::StringView Tag) const; - APT_HIDDEN APT::StringView FindRaw(APT::StringView Tag) const; - APT_HIDDEN signed int FindI(APT::StringView Tag,signed long Default = 0) const; - APT_HIDDEN bool FindB(APT::StringView, bool Default = false) const; - APT_HIDDEN unsigned long long FindULL(APT::StringView Tag, unsigned long long const &Default = 0) const; - - APT_HIDDEN bool FindFlag(APT::StringView Tag,uint8_t &Flags, + bool Find(APT::StringView Tag,const char *&Start, const char *&End) const; + bool Find(APT::StringView Tag,unsigned int &Pos) const; + APT::StringView Find(APT::StringView Tag) const; + APT::StringView FindRaw(APT::StringView Tag) const; + signed int FindI(APT::StringView Tag,signed long Default = 0) const; + bool FindB(APT::StringView, bool Default = false) const; + unsigned long long FindULL(APT::StringView Tag, unsigned long long const &Default = 0) const; + + bool FindFlag(APT::StringView Tag,uint8_t &Flags, uint8_t const Flag) const; - APT_HIDDEN bool FindFlag(APT::StringView Tag,unsigned long &Flags, + bool FindFlag(APT::StringView Tag,unsigned long &Flags, unsigned long Flag) const; - APT_HIDDEN bool Exists(APT::StringView Tag) const; -#endif + bool Exists(APT::StringView Tag) const; bool static FindFlag(uint8_t &Flags, uint8_t const Flag, const char* const Start, const char* const Stop); @@ -187,16 +166,11 @@ class pkgTagSection }; -class APT_DEPRECATED_MSG("Use pkgTagFile with the SUPPORT_COMMENTS flag instead") pkgUserTagSection : public pkgTagSection -{ - virtual void TrimRecord(bool BeforeRecord, const char* &End) APT_OVERRIDE; -}; - /** \class pkgTagFile reads and prepares a deb822 formatted file for parsing * via #pkgTagSection. The default mode tries to be as fast as possible and * assumes perfectly valid (machine generated) files like Packages. Support * for comments e.g. needs to be enabled explicitly. */ -class pkgTagFile +class APT_PUBLIC pkgTagFile { pkgTagFilePrivate * const d; @@ -224,18 +198,7 @@ public: virtual ~pkgTagFile(); }; -extern const char **TFRewritePackageOrder; -extern const char **TFRewriteSourceOrder; - -APT_IGNORE_DEPRECATED_PUSH -struct APT_DEPRECATED_MSG("Use pkgTagSection::Tag and pkgTagSection::Write() instead") TFRewriteData -{ - const char *Tag; - const char *Rewrite; - const char *NewTag; -}; -APT_DEPRECATED_MSG("Use pkgTagSection::Tag and pkgTagSection::Write() instead") bool TFRewrite(FILE *Output,pkgTagSection const &Tags,const char *Order[], - TFRewriteData *Rewrite); -APT_IGNORE_DEPRECATED_POP +APT_PUBLIC extern const char **TFRewritePackageOrder; +APT_PUBLIC extern const char **TFRewriteSourceOrder; #endif diff --git a/apt-pkg/update.h b/apt-pkg/update.h index 559516f..dce5cbc 100644 --- a/apt-pkg/update.h +++ b/apt-pkg/update.h @@ -14,8 +14,8 @@ class pkgAcquireStatus; class pkgSourceList; class pkgAcquire; -bool ListUpdate(pkgAcquireStatus &progress, pkgSourceList &List, int PulseInterval=0); -bool AcquireUpdate(pkgAcquire &Fetcher, int const PulseInterval = 0, +APT_PUBLIC bool ListUpdate(pkgAcquireStatus &progress, pkgSourceList &List, int PulseInterval=0); +APT_PUBLIC bool AcquireUpdate(pkgAcquire &Fetcher, int const PulseInterval = 0, bool const RunUpdateScripts = true, bool const ListCleanup = true); diff --git a/apt-pkg/upgrade.cc b/apt-pkg/upgrade.cc index c9432aa..06c3751 100644 --- a/apt-pkg/upgrade.cc +++ b/apt-pkg/upgrade.cc @@ -119,12 +119,7 @@ static bool pkgDistUpgrade(pkgDepCache &Cache, OpProgress * const Progress) if (Progress != NULL) Progress->Done(); return success; -} -bool pkgDistUpgrade(pkgDepCache &Cache) -{ - return pkgDistUpgrade(Cache, NULL); -} - /*}}}*/ +} /*}}}*/ // AllUpgradeNoNewPackages - Upgrade but no removals or new pkgs /*{{{*/ static bool pkgAllUpgradeNoNewPackages(pkgDepCache &Cache, OpProgress * const Progress) { @@ -224,20 +219,6 @@ static bool pkgAllUpgradeWithNewPackages(pkgDepCache &Cache, OpProgress * const return success; } /*}}}*/ -// AllUpgrade - Upgrade as many packages as possible /*{{{*/ -// --------------------------------------------------------------------- -/* Right now the system must be consistent before this can be called. - It also will not change packages marked for install, it only tries - to install packages not marked for install */ -static bool pkgAllUpgrade(pkgDepCache &Cache, OpProgress * const Progress) -{ - return pkgAllUpgradeNoNewPackages(Cache, Progress); -} -bool pkgAllUpgrade(pkgDepCache &Cache) -{ - return pkgAllUpgrade(Cache, NULL); -} - /*}}}*/ // MinimizeUpgrade - Minimizes the set of packages to be upgraded /*{{{*/ // --------------------------------------------------------------------- /* This simply goes over the entire set of packages and tries to keep @@ -286,7 +267,6 @@ bool pkgMinimizeUpgrade(pkgDepCache &Cache) // APT::Upgrade::Upgrade - Upgrade using a specific strategy /*{{{*/ bool APT::Upgrade::Upgrade(pkgDepCache &Cache, int mode, OpProgress * const Progress) { -APT_IGNORE_DEPRECATED_PUSH if (mode == ALLOW_EVERYTHING) return pkgDistUpgrade(Cache, Progress); else if ((mode & ~FORBID_REMOVE_PACKAGES) == 0) @@ -295,7 +275,6 @@ APT_IGNORE_DEPRECATED_PUSH return pkgAllUpgradeNoNewPackages(Cache, Progress); else _error->Error("pkgAllUpgrade called with unsupported mode %i", mode); -APT_IGNORE_DEPRECATED_POP return false; } /*}}}*/ diff --git a/apt-pkg/upgrade.h b/apt-pkg/upgrade.h index 5612acf..8e89601 100644 --- a/apt-pkg/upgrade.h +++ b/apt-pkg/upgrade.h @@ -24,12 +24,9 @@ namespace APT { FORBID_INSTALL_NEW_PACKAGES = 2, ALLOW_EVERYTHING = 0 }; - bool Upgrade(pkgDepCache &Cache, int UpgradeMode, OpProgress * const Progress = NULL); + APT_PUBLIC bool Upgrade(pkgDepCache &Cache, int UpgradeMode, OpProgress * const Progress = NULL); } } -APT_DEPRECATED_MSG("Use APT::Upgrade::Upgrade() instead") bool pkgDistUpgrade(pkgDepCache &Cache); -APT_DEPRECATED_MSG("Use APT::Upgrade::Upgrade() instead") bool pkgAllUpgrade(pkgDepCache &Cache); - -bool pkgMinimizeUpgrade(pkgDepCache &Cache); +APT_PUBLIC bool pkgMinimizeUpgrade(pkgDepCache &Cache); #endif diff --git a/apt-pkg/version.h b/apt-pkg/version.h index 6cb2932..eaf667c 100644 --- a/apt-pkg/version.h +++ b/apt-pkg/version.h @@ -22,11 +22,8 @@ #include #include -#ifndef APT_8_CLEANER_HEADERS -using std::string; -#endif -class pkgVersioningSystem +class APT_PUBLIC pkgVersioningSystem { public: // Global list of VS's diff --git a/apt-pkg/versionmatch.h b/apt-pkg/versionmatch.h index c9e4367..0f84f8d 100644 --- a/apt-pkg/versionmatch.h +++ b/apt-pkg/versionmatch.h @@ -38,11 +38,8 @@ #include -#ifndef APT_8_CLEANER_HEADERS -using std::string; -#endif -class pkgVersionMatch +class APT_PUBLIC pkgVersionMatch { // Version Matching std::string VerStr; diff --git a/apt-private/acqprogress.cc b/apt-private/acqprogress.cc index a788ec9..b37934c 100644 --- a/apt-private/acqprogress.cc +++ b/apt-private/acqprogress.cc @@ -33,7 +33,7 @@ // --------------------------------------------------------------------- /* */ AcqTextStatus::AcqTextStatus(std::ostream &out, unsigned int &ScreenWidth,unsigned int const Quiet) : - pkgAcquireStatus2(), out(out), ScreenWidth(ScreenWidth), LastLineLength(0), ID(0), Quiet(Quiet) + pkgAcquireStatus(), out(out), ScreenWidth(ScreenWidth), LastLineLength(0), ID(0), Quiet(Quiet) { // testcases use it to disable pulses without disabling other user messages if (Quiet == 0 && _config->FindB("quiet::NoUpdate", false) == true) @@ -221,21 +221,21 @@ bool AcqTextStatus::Pulse(pkgAcquire *Owner) enum {Long = 0,Medium,Short} Mode = Medium; // Add the current progress if (Mode == Long) - S << " " << std::to_string(I->CurrentSize); + S << " " << std::to_string(I->CurrentItem->CurrentSize); else { - if (Mode == Medium || I->TotalSize == 0) - S << " " << SizeToStr(I->CurrentSize) << "B"; + if (Mode == Medium || I->CurrentItem->TotalSize == 0) + S << " " << SizeToStr(I->CurrentItem->CurrentSize) << "B"; } // Add the total size and percent - if (I->TotalSize > 0 && I->CurrentItem->Owner->Complete == false) + if (I->CurrentItem->TotalSize > 0 && I->CurrentItem->Owner->Complete == false) { if (Mode == Short) - ioprintf(S, " %.0f%%", (I->CurrentSize*100.0)/I->TotalSize); + ioprintf(S, " %.0f%%", (I->CurrentItem->CurrentSize*100.0)/I->CurrentItem->TotalSize); else - ioprintf(S, "/%sB %.0f%%", SizeToStr(I->TotalSize).c_str(), - (I->CurrentSize*100.0)/I->TotalSize); + ioprintf(S, "/%sB %.0f%%", SizeToStr(I->CurrentItem->TotalSize).c_str(), + (I->CurrentItem->CurrentSize*100.0)/I->CurrentItem->TotalSize); } S << "]"; } @@ -335,10 +335,10 @@ bool AcqTextStatus::ReleaseInfoChanges(metaIndex const * const L, metaIndex cons { if (Quiet >= 2 || isatty(STDOUT_FILENO) != 1 || isatty(STDIN_FILENO) != 1 || _config->FindB("APT::Get::Update::InteractiveReleaseInfoChanges", false) == false) - return pkgAcquireStatus2::ReleaseInfoChanges(nullptr, nullptr, std::move(Changes)); + return pkgAcquireStatus::ReleaseInfoChanges(nullptr, nullptr, std::move(Changes)); _error->PushToStack(); - auto const confirmed = pkgAcquireStatus2::ReleaseInfoChanges(L, N, std::move(Changes)); + auto const confirmed = pkgAcquireStatus::ReleaseInfoChanges(L, N, std::move(Changes)); if (confirmed == true) { _error->MergeWithStack(); diff --git a/apt-private/acqprogress.h b/apt-private/acqprogress.h index c8c2116..87b957e 100644 --- a/apt-private/acqprogress.h +++ b/apt-private/acqprogress.h @@ -15,7 +15,7 @@ #include #include -class APT_PUBLIC AcqTextStatus : public pkgAcquireStatus2 +class APT_PUBLIC AcqTextStatus : public pkgAcquireStatus { std::ostream &out; unsigned int &ScreenWidth; diff --git a/apt-private/private-cachefile.cc b/apt-private/private-cachefile.cc index ab25338..9d875b4 100644 --- a/apt-private/private-cachefile.cc +++ b/apt-private/private-cachefile.cc @@ -22,7 +22,7 @@ using namespace std; static bool SortPackagesByName(pkgCache * const Owner, - map_pointer_t const A, map_pointer_t const B) + map_pointer const A, map_pointer const B) { if (A == 0) return false; @@ -42,7 +42,7 @@ void SortedPackageUniverse::LazyInit() const return; pkgCache * const Owner = data(); // In Multi-Arch systems Grps are easier to sort than Pkgs - std::vector GrpList; + std::vector> GrpList; List.reserve(Owner->Head().GroupCount); for (pkgCache::GrpIterator I{Owner->GrpBegin()}; I.end() != true; ++I) GrpList.emplace_back(I - Owner->GrpP); diff --git a/apt-private/private-cachefile.h b/apt-private/private-cachefile.h index 5086cea..ccd4710 100644 --- a/apt-private/private-cachefile.h +++ b/apt-private/private-cachefile.h @@ -13,7 +13,7 @@ class APT_PUBLIC CacheFile : public pkgCacheFile { public: - std::vector UniverseList; + std::vector> UniverseList; bool CheckDeps(bool AllowBroken = false); bool BuildCaches(bool WithLock = true) @@ -40,13 +40,13 @@ class APT_PUBLIC CacheFile : public pkgCacheFile class SortedPackageUniverse : public APT::PackageUniverse { - std::vector &List; + std::vector> &List; void LazyInit() const; public: explicit SortedPackageUniverse(CacheFile &Cache); - class const_iterator : public APT::Container_iterator_base::const_iterator, pkgCache::PkgIterator> + class const_iterator : public APT::Container_iterator_base>::const_iterator, pkgCache::PkgIterator> { pkgCache * const Cache; public: @@ -55,8 +55,8 @@ public: if (*_iter == 0) return pkgCache::PkgIterator(*Cache); return pkgCache::PkgIterator(*Cache, Cache->PkgP + *_iter); } - explicit const_iterator(pkgCache * const Owner, std::vector::const_iterator i): - Container_iterator_base::const_iterator, pkgCache::PkgIterator>(i), Cache(Owner) {} + explicit const_iterator(pkgCache * const Owner, std::vector>::const_iterator i): + Container_iterator_base>::const_iterator, pkgCache::PkgIterator>(i), Cache(Owner) {} }; typedef const_iterator iterator; diff --git a/apt-private/private-cacheset.cc b/apt-private/private-cacheset.cc index 95a16f8..2a5afac 100644 --- a/apt-private/private-cacheset.cc +++ b/apt-private/private-cacheset.cc @@ -188,6 +188,25 @@ CacheSetHelperAPTGet::CacheSetHelperAPTGet(std::ostream &pout) : { explicitlyNamed = true; } +void CacheSetHelperAPTGet::showPackageSelection(pkgCache::PkgIterator const &pkg, enum PkgSelector const select, + std::string const &pattern) +{ + switch (select) + { + case REGEX: + showRegExSelection(pkg, pattern); + break; + case TASK: + showTaskSelection(pkg, pattern); + break; + case FNMATCH: + showFnmatchSelection(pkg, pattern); + break; + default: + APT::CacheSetHelper::showPackageSelection(pkg, select, pattern); + break; + } +} void CacheSetHelperAPTGet::showTaskSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern) { ioprintf(out, _("Note, selecting '%s' for task '%s'\n"), @@ -206,13 +225,22 @@ void CacheSetHelperAPTGet::showRegExSelection(pkgCache::PkgIterator const &Pkg, Pkg.FullName(true).c_str(), pattern.c_str()); explicitlyNamed = false; } -void CacheSetHelperAPTGet::showSelectedVersion(pkgCache::PkgIterator const &/*Pkg*/, pkgCache::VerIterator const Ver, - std::string const &ver, bool const /*verIsRel*/) +void CacheSetHelperAPTGet::showVersionSelection(pkgCache::PkgIterator const &Pkg, + pkgCache::VerIterator const &Ver, enum VerSelector const select, std::string const &pattern) { - if (ver == Ver.VerStr()) - return; - selectedByRelease.push_back(make_pair(Ver, ver)); + switch (select) + { + case RELEASE: + case VERSIONNUMBER: + if (pattern == Ver.VerStr()) + return; + selectedByRelease.push_back(make_pair(Ver, pattern)); + break; + default: + return APT::CacheSetHelper::showVersionSelection(Pkg, Ver, select, pattern); + } } + bool CacheSetHelperAPTGet::showVirtualPackageErrors(pkgCacheFile &Cache) { if (virtualPkgs.empty() == true) @@ -226,11 +254,12 @@ bool CacheSetHelperAPTGet::showVirtualPackageErrors(pkgCacheFile &Cache) pkgCache::PrvIterator I = Pkg.ProvidesList(); unsigned short provider = 0; for (; I.end() == false; ++I) { - pkgCache::PkgIterator Pkg = I.OwnerPkg(); + pkgCache::PkgIterator const OPkg = I.OwnerPkg(); - if (Cache[Pkg].CandidateVerIter(Cache) == I.OwnerVer()) { - c1out << " " << Pkg.FullName(true) << " " << I.OwnerVer().VerStr(); - if (Cache[Pkg].Install() == true && Cache[Pkg].NewInstall() == false) + if (Cache[OPkg].CandidateVerIter(Cache) == I.OwnerVer()) + { + c1out << " " << OPkg.FullName(true) << " " << I.OwnerVer().VerStr(); + if (Cache[OPkg].Install() == true && Cache[OPkg].NewInstall() == false) c1out << _(" [Installed]"); c1out << std::endl; ++provider; @@ -268,6 +297,33 @@ bool CacheSetHelperAPTGet::showVirtualPackageErrors(pkgCacheFile &Cache) } return false; } +pkgCache::VerIterator CacheSetHelperAPTGet::canNotGetVersion(enum VerSelector const select, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) +{ + switch (select) + { + case NEWEST: + return canNotFindNewestVer(Cache, Pkg); + case CANDIDATE: + return canNotFindCandidateVer(Cache, Pkg); + default: + return APT::CacheSetHelper::canNotGetVersion(select, Cache, Pkg); + } +} +void CacheSetHelperAPTGet::canNotFindVersion(enum VerSelector const select, APT::VersionContainerInterface * const vci, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) +{ + switch (select) + { + case NEWEST: + canNotFindNewestVer(Cache, Pkg); + break; + case CANDIDATE: + canNotFindCandidateVer(Cache, Pkg); + break; + default: + return APT::CacheSetHelper::canNotFindVersion(select, vci, Cache, Pkg); + } +} + pkgCache::VerIterator CacheSetHelperAPTGet::canNotFindCandidateVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) { APT::VersionSet const verset = tryVirtualPackage(Cache, Pkg, CacheSetHelper::CANDIDATE); diff --git a/apt-private/private-cacheset.h b/apt-private/private-cacheset.h index 3370bd0..8848aa3 100644 --- a/apt-private/private-cacheset.h +++ b/apt-private/private-cacheset.h @@ -18,6 +18,8 @@ class VerIteratorWithCaching const pkgCache::VerIterator iter; const pkgCache::DescFile * descFile; public: + + // cppcheck-suppress noExplicitConstructor VerIteratorWithCaching(const pkgCache::VerIterator& iter) : iter(iter), descFile(iter->DescriptionList != 0 @@ -105,15 +107,17 @@ public: explicit CacheSetHelperAPTGet(std::ostream &out); - virtual void showTaskSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern) APT_OVERRIDE; - virtual void showFnmatchSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern) APT_OVERRIDE; - virtual void showRegExSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern) APT_OVERRIDE; - virtual void showSelectedVersion(pkgCache::PkgIterator const &/*Pkg*/, pkgCache::VerIterator const Ver, - std::string const &ver, bool const /*verIsRel*/) APT_OVERRIDE; + virtual void showPackageSelection(pkgCache::PkgIterator const &Pkg, enum PkgSelector const select, std::string const &pattern) APT_OVERRIDE; + void showTaskSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern); + void showFnmatchSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern); + void showRegExSelection(pkgCache::PkgIterator const &Pkg, std::string const &pattern); + void showVersionSelection(pkgCache::PkgIterator const &Pkg, pkgCache::VerIterator const &Ver, enum VerSelector const select, std::string const &pattern) APT_OVERRIDE; bool showVirtualPackageErrors(pkgCacheFile &Cache); - virtual pkgCache::VerIterator canNotFindCandidateVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; - virtual pkgCache::VerIterator canNotFindNewestVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; + pkgCache::VerIterator canNotGetVersion(enum VerSelector const select, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; + void canNotFindVersion(enum VerSelector const select, APT::VersionContainerInterface * const vci, pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg) APT_OVERRIDE; + pkgCache::VerIterator canNotFindCandidateVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg); + pkgCache::VerIterator canNotFindNewestVer(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg); virtual pkgCache::PkgIterator canNotFindPkgName(pkgCacheFile &Cache, std::string const &str) APT_OVERRIDE; APT::VersionSet tryVirtualPackage(pkgCacheFile &Cache, pkgCache::PkgIterator const &Pkg, diff --git a/apt-private/private-cmndline.cc b/apt-private/private-cmndline.cc index 4949283..478cb95 100644 --- a/apt-private/private-cmndline.cc +++ b/apt-private/private-cmndline.cc @@ -16,6 +16,7 @@ #include #include +#include #include #include @@ -58,7 +59,7 @@ static bool addArgumentsAPTCache(std::vector &Args, char cons addArg('n', "names-only", "APT::Cache::NamesOnly", 0); addArg('f', "full", "APT::Cache::ShowFull", 0); } - else if (CmdMatches("show")) + else if (CmdMatches("show") | CmdMatches("info")) { addArg('a', "all-versions", "APT::Cache::AllVersions", 0); } @@ -216,14 +217,17 @@ static bool addArgumentsAPTGet(std::vector &Args, char const addArg(0, "tar-only", "APT::Get::Tar-Only", 0); addArg(0, "dsc-only", "APT::Get::Dsc-Only", 0); } - else if (CmdMatches("build-dep")) + else if (CmdMatches("build-dep") || CmdMatches("satisfy")) { addArg('a', "host-architecture", "APT::Get::Host-Architecture", CommandLine::HasArg); addArg('P', "build-profiles", "APT::Build-Profiles", CommandLine::HasArg); addArg(0, "purge", "APT::Get::Purge", 0); addArg(0, "solver", "APT::Solver", CommandLine::HasArg); - addArg(0,"arch-only","APT::Get::Arch-Only",0); - addArg(0,"indep-only","APT::Get::Indep-Only",0); + if (CmdMatches("build-dep")) + { + addArg(0,"arch-only","APT::Get::Arch-Only",0); + addArg(0,"indep-only","APT::Get::Indep-Only",0); + } // this has no effect *but* sbuild is using it (see LP: #1255806) // once sbuild is fixed, this option can be removed addArg('f', "fix-broken", "APT::Get::Fix-Broken", 0); @@ -241,7 +245,7 @@ static bool addArgumentsAPTGet(std::vector &Args, char const if (CmdMatches("install", "reinstall", "remove", "purge", "upgrade", "dist-upgrade", "dselect-upgrade", "autoremove", "auto-remove", "autopurge", "clean", "autoclean", "auto-clean", "check", - "build-dep", "full-upgrade", "source")) + "build-dep", "satisfy", "full-upgrade", "source")) { addArg('s', "simulate", "APT::Get::Simulate", 0); addArg('s', "just-print", "APT::Get::Simulate", 0); @@ -286,7 +290,7 @@ static bool addArgumentsAPTGet(std::vector &Args, char const static bool addArgumentsAPTMark(std::vector &Args, char const * const Cmd)/*{{{*/ { if (CmdMatches("auto", "manual", "hold", "unhold", "showauto", - "showmanual", "showhold", "showholds", + "showmanual", "showhold", "showholds", "showheld", "markauto", "unmarkauto", "minimize-manual")) { addArg('f',"file","Dir::State::extended_states",CommandLine::HasArg); @@ -340,7 +344,7 @@ static bool addArgumentsAPT(std::vector &Args, char const * c addArg('v', "verbose", "APT::Cmd::List-Include-Summary", 0); addArg('a', "all-versions", "APT::Cmd::All-Versions", 0); } - else if (CmdMatches("show")) + else if (CmdMatches("show") || CmdMatches("info")) { addArg('a', "all-versions", "APT::Cache::AllVersions", 0); } @@ -470,6 +474,12 @@ static void BinarySpecificConfiguration(char const * const Binary) /*{{{*/ _config->CndSet("Binary::apt::DPkg::Progress-Fancy", true); _config->CndSet("Binary::apt::APT::Keep-Downloaded-Packages", false); _config->CndSet("Binary::apt::APT::Get::Update::InteractiveReleaseInfoChanges", true); + _config->CndSet("Binary::apt::APT::Cmd::Pattern-Only", true); + + if (isatty(STDIN_FILENO)) + _config->CndSet("Binary::apt::Dpkg::Lock::Timeout", -1); + else + _config->CndSet("Binary::apt::Dpkg::Lock::Timeout", 120); } _config->Set("Binary", binary); @@ -505,15 +515,15 @@ std::vector ParseCommandLine(CommandLine &CmdL, APT_CMD c if (likely(argc != 0 && argv[0] != NULL)) BinarySpecificConfiguration(argv[0]); - std::vector const CmdsWithHelp = GetCommands(); std::vector Cmds; + std::vector const CmdsWithHelp = GetCommands(); if (CmdsWithHelp.empty() == false) { CommandLine::Dispatch const help = { "help", [](CommandLine &){return false;} }; Cmds.push_back(std::move(help)); } - for (auto const& cmd : CmdsWithHelp) - Cmds.push_back({cmd.Match, cmd.Handler}); + std::transform(CmdsWithHelp.begin(), CmdsWithHelp.end(), std::back_inserter(Cmds), + [](auto &&cmd) { return CommandLine::Dispatch{cmd.Match, cmd.Handler}; }); char const * CmdCalled = nullptr; if (Cmds.empty() == false && Cmds[0].Handler != nullptr) diff --git a/apt-private/private-depends.cc b/apt-private/private-depends.cc index 79d66b7..95c747e 100644 --- a/apt-private/private-depends.cc +++ b/apt-private/private-depends.cc @@ -105,24 +105,24 @@ static bool ShowDepends(CommandLine &CmdL, bool const RevDepends) verset.insert(APT::VersionSet::FromPackage(CacheFile, Trg, APT::CacheSetHelper::CANDIDATE, helper)); } - } - - // Display all solutions - std::unique_ptr List(D.AllTargets()); - pkgPrioSortList(*Cache,List.get()); - for (pkgCache::Version **I = List.get(); *I != 0; I++) - { - pkgCache::VerIterator V(*Cache,*I); - if (V != Cache->VerP + V.ParentPkg()->VersionList || - V->ParentPkg == D->Package) - continue; - std::cout << " " << V.ParentPkg().FullName(true) << std::endl; - - if (Recurse == true && Shown[V.ParentPkg()->ID] == false) + // Display all solutions + std::unique_ptr List(D.AllTargets()); + pkgPrioSortList(*Cache,List.get()); + for (pkgCache::Version **I = List.get(); *I != 0; I++) { - Shown[V.ParentPkg()->ID] = true; - verset.insert(APT::VersionSet::FromPackage(CacheFile, V.ParentPkg(), APT::CacheSetHelper::CANDIDATE, helper)); + pkgCache::VerIterator V(*Cache,*I); + if (V != Cache->VerP + V.ParentPkg()->VersionList || + V->ParentPkg == D->Package) + continue; + std::cout << " " << V.ParentPkg().FullName(true) << std::endl; + + if (Recurse == true && Shown[V.ParentPkg()->ID] == false) + { + Shown[V.ParentPkg()->ID] = true; + verset.insert(APT::VersionSet::FromPackage(CacheFile, V.ParentPkg(), APT::CacheSetHelper::CANDIDATE, helper)); + } } + } if (ShowOnlyFirstOr == true) diff --git a/apt-private/private-download.cc b/apt-private/private-download.cc index 2c12676..16d1125 100644 --- a/apt-private/private-download.cc +++ b/apt-private/private-download.cc @@ -339,7 +339,7 @@ bool DoClean(CommandLine &) // --------------------------------------------------------------------- /* This is similar to clean but it only purges things that cannot be downloaded, that is old versions of cached packages. */ - class LogCleaner : public pkgArchiveCleaner2 + class LogCleaner : public pkgArchiveCleaner { protected: virtual void Erase(int const dirfd, char const * const File, std::string const &Pkg, std::string const &Ver,struct stat const &St) APT_OVERRIDE diff --git a/apt-private/private-install.cc b/apt-private/private-install.cc index 40543d9..af6697d 100644 --- a/apt-private/private-install.cc +++ b/apt-private/private-install.cc @@ -18,7 +18,6 @@ #include #include #include -#include #include #include @@ -728,8 +727,7 @@ bool AddVolatileSourceFile(pkgSourceList *const SL, PseudoPkg &&pkg, std::vector return false; std::vector files; SL->AddVolatileFile(pkg.name, &files); - for (auto &&f: files) - VolatileCmdL.emplace_back(std::move(f), pkg.arch, pkg.release, pkg.index); + std::transform(files.begin(), files.end(), std::back_inserter(VolatileCmdL), [&](auto &&f) { return PseudoPkg{std::move(f), pkg.arch, pkg.release, pkg.index}; }); return true; } @@ -741,8 +739,7 @@ bool AddVolatileBinaryFile(pkgSourceList *const SL, PseudoPkg &&pkg, std::vector return false; std::vector files; SL->AddVolatileFile(pkg.name, &files); - for (auto &&f: files) - VolatileCmdL.emplace_back(std::move(f), pkg.arch, pkg.release, pkg.index); + std::transform(files.begin(), files.end(), std::back_inserter(VolatileCmdL), [&](auto &&f) { return PseudoPkg{std::move(f), pkg.arch, pkg.release, pkg.index}; }); return true; } /*}}}*/ diff --git a/apt-private/private-json-hooks.cc b/apt-private/private-json-hooks.cc index 65ff879..0b765a4 100644 --- a/apt-private/private-json-hooks.cc +++ b/apt-private/private-json-hooks.cc @@ -7,7 +7,9 @@ */ #include +#include #include +#include #include #include @@ -79,7 +81,7 @@ class APT_HIDDEN JsonWriter } public: - JsonWriter(std::ostream &os) : os(os) { old_locale = os.imbue(std::locale::classic()); } + explicit JsonWriter(std::ostream &os) : os(os), old_locale{os.imbue(std::locale::classic())} {} ~JsonWriter() { os.imbue(old_locale); } JsonWriter &beginArray() { @@ -356,7 +358,7 @@ bool RunJsonHook(std::string const &option, std::string const &method, const cha SetCloseExec(STDIN_FILENO, false); SetCloseExec(STDERR_FILENO, false); - string hookfd; + std::string hookfd; strprintf(hookfd, "%d", InfoFD); setenv("APT_HOOK_SOCKET", hookfd.c_str(), 1); diff --git a/apt-private/private-list.cc b/apt-private/private-list.cc index 7c8c897..f5c31bb 100644 --- a/apt-private/private-list.cc +++ b/apt-private/private-list.cc @@ -39,17 +39,26 @@ struct PackageSortAlphabetic /*{{{*/ class PackageNameMatcher : public Matcher { + pkgCacheFile &cacheFile; public: - explicit PackageNameMatcher(const char **patterns) + explicit PackageNameMatcher(pkgCacheFile &cacheFile, const char **patterns) + : cacheFile(cacheFile) { for(int i=0; patterns[i] != NULL; ++i) { std::string pattern = patterns[i]; - APT::CacheFilter::PackageMatcher *cachefilter = NULL; - if(_config->FindB("APT::Cmd::Use-Regexp", false) == true) + APT::CacheFilter::Matcher *cachefilter = NULL; + if (pattern.size() > 0 && (pattern[0] == '?' || pattern[0] == '~')) + cachefilter = APT::CacheFilter::ParsePattern(pattern, &cacheFile).release(); + else if(_config->FindB("APT::Cmd::Use-Regexp", false) == true) cachefilter = new APT::CacheFilter::PackageNameMatchesRegEx(pattern); else cachefilter = new APT::CacheFilter::PackageNameMatchesFnmatch(pattern); + + if (cachefilter == nullptr) { + return; + filters.clear(); + } filters.push_back(cachefilter); } } @@ -62,7 +71,7 @@ class PackageNameMatcher : public Matcher { for(J=filters.begin(); J != filters.end(); ++J) { - APT::CacheFilter::PackageMatcher *cachefilter = *J; + APT::CacheFilter::Matcher *cachefilter = *J; if((*cachefilter)(P)) return true; } @@ -70,8 +79,8 @@ class PackageNameMatcher : public Matcher } private: - std::vector filters; - std::vector::const_iterator J; + std::vector filters; + std::vector::const_iterator J; #undef PackageMatcher }; /*}}}*/ @@ -111,7 +120,7 @@ bool DoList(CommandLine &Cmd) if (_config->FindB("APT::Cmd::List-Include-Summary", false) == true) format += "\n ${Description}\n"; - PackageNameMatcher matcher(patterns); + PackageNameMatcher matcher(CacheFile, patterns); LocalitySortedVersionSet bag; OpTextProgress progress(*_config); progress.OverallProgress(0, diff --git a/apt-private/private-main.cc b/apt-private/private-main.cc index 47b1a09..e9f65bd 100644 --- a/apt-private/private-main.cc +++ b/apt-private/private-main.cc @@ -44,7 +44,6 @@ void InitLocale(APT_CMD const binary) /*{{{*/ break; } } -void InitLocale() {} /*}}}*/ void InitSignals() /*{{{*/ { diff --git a/apt-private/private-main.h b/apt-private/private-main.h index 0d60797..4dcb271 100644 --- a/apt-private/private-main.h +++ b/apt-private/private-main.h @@ -8,7 +8,6 @@ class CommandLine; void InitLocale(APT_CMD const binary); -APT_PUBLIC APT_DEPRECATED_MSG("Is a no-op now") void InitLocale(); APT_PUBLIC void InitSignals(); APT_PUBLIC void CheckIfSimulateMode(CommandLine &CmdL); APT_PUBLIC void CheckIfCalledByScript(int argc, const char *argv[]); diff --git a/apt-private/private-search.cc b/apt-private/private-search.cc index de1b197..b3f9469 100644 --- a/apt-private/private-search.cc +++ b/apt-private/private-search.cc @@ -1,6 +1,7 @@ // Includes /*{{{*/ #include +#include #include #include #include @@ -24,11 +25,30 @@ #include #include #include +#include #include #include /*}}}*/ +static std::vector const TranslatedDescriptionsList(pkgCache::VerIterator const &V) /*{{{*/ +{ + std::vector Descriptions; + + for (std::string const &lang: APT::Configuration::getLanguages()) + { + pkgCache::DescIterator Desc = V.TranslatedDescriptionForLanguage(lang); + if (Desc.IsGood()) + Descriptions.push_back(Desc); + } + + if (Descriptions.empty()) + Descriptions.push_back(V.TranslatedDescription()); + + return Descriptions; +} + + /*}}}*/ static bool FullTextSearch(CommandLine &CmdL) /*{{{*/ { @@ -94,27 +114,49 @@ static bool FullTextSearch(CommandLine &CmdL) /*{{{*/ if (PkgsDone[P->ID] == true) continue; - char const * const PkgName = P.Name(); - pkgCache::DescIterator Desc = V.TranslatedDescription(); - std::string LongDesc = ""; - if (Desc.end() == false) + std::vector PkgDescriptions; + if (not NamesOnly) { - pkgRecords::Parser &parser = records.Lookup(Desc.FileList()); - LongDesc = parser.LongDesc(); + for (auto &Desc: TranslatedDescriptionsList(V)) + { + pkgRecords::Parser &parser = records.Lookup(Desc.FileList()); + PkgDescriptions.push_back(parser.LongDesc()); + } } bool all_found = true; + + char const * const PkgName = P.Name(); + std::vector SkipDescription(PkgDescriptions.size(), false); for (std::vector::const_iterator pattern = Patterns.begin(); - pattern != Patterns.end(); ++pattern) + pattern != Patterns.end(); ++pattern) { - if (regexec(&(*pattern), PkgName, 0, 0, 0) == 0) - continue; - else if (NamesOnly == false && regexec(&(*pattern), LongDesc.c_str(), 0, 0, 0) == 0) - continue; - // search patterns are AND, so one failing fails all - all_found = false; - break; + if (regexec(&(*pattern), PkgName, 0, 0, 0) == 0) + continue; + else if (not NamesOnly) + { + bool found = false; + + for (std::vector::size_type i = 0; i < PkgDescriptions.size(); ++i) + { + if (not SkipDescription[i]) + { + if (regexec(&(*pattern), PkgDescriptions[i].c_str(), 0, 0, 0) == 0) + found = true; + else + SkipDescription[i] = true; + } + } + + if (found) + continue; + } + + // search patterns are AND, so one failing fails all + all_found = false; + break; } + if (all_found == true) { PkgsDone[P->ID] = true; @@ -290,19 +332,43 @@ static bool Search(CommandLine &CmdL) // Iterate over all the version records and check them for (ExDescFile *J = DFList; J->Df != 0; ++J) { - pkgRecords::Parser &P = Recs.Lookup(pkgCache::DescFileIterator(*Cache,J->Df)); size_t const PatternOffset = J->ID * NumPatterns; - - if (NamesOnly == false) + if (not NamesOnly) { - std::string const LongDesc = P.LongDesc(); - for (unsigned I = 0; I < NumPatterns; ++I) - { - if (PatternMatch[PatternOffset + I] == true) - continue; - else if (regexec(&Patterns[I],LongDesc.c_str(),0,0,0) == 0) - PatternMatch[PatternOffset + I] = true; - } + std::vector PkgDescriptions; + for (auto &Desc: TranslatedDescriptionsList(J->V)) + { + pkgRecords::Parser &parser = Recs.Lookup(Desc.FileList()); + PkgDescriptions.push_back(parser.LongDesc()); + } + + std::vector SkipDescription(PkgDescriptions.size(), false); + for (unsigned I = 0; I < NumPatterns; ++I) + { + if (PatternMatch[PatternOffset + I]) + continue; + else + { + bool found = false; + + for (std::vector::size_type k = 0; k < PkgDescriptions.size(); ++k) + { + if (not SkipDescription[k]) + { + if (regexec(&Patterns[I], PkgDescriptions[k].c_str(), 0, 0, 0) == 0) + { + found = true; + PatternMatch[PatternOffset + I] = true; + } + else + SkipDescription[k] = true; + } + } + + if (not found) + break; + } + } } bool matchedAll = true; @@ -325,7 +391,10 @@ static bool Search(CommandLine &CmdL) DisplayRecordV1(CacheFile, Recs, J->V, Vf, Start, Length, std::cout); } else - printf("%s - %s\n",P.Name().c_str(),P.ShortDesc().c_str()); + { + pkgRecords::Parser &P = Recs.Lookup(pkgCache::DescFileIterator(*Cache, J->Df)); + printf("%s - %s\n", P.Name().c_str(), P.ShortDesc().c_str()); + } } } diff --git a/apt-private/private-show.cc b/apt-private/private-show.cc index b69008e..103fa57 100644 --- a/apt-private/private-show.cc +++ b/apt-private/private-show.cc @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -89,7 +90,7 @@ static APT_PURE char const *skipColonSpaces(char const *Buffer, size_t const Len ++Buffer; for (; isspace(*Buffer) != 0 && Length - (Buffer - Start) > 0; ++Buffer) ; - if (Length - (Buffer - Start) <= 0) + if (Length < static_cast(Buffer - Start)) return nullptr; return Buffer; } @@ -415,9 +416,9 @@ bool ShowPackage(CommandLine &CmdL) /*{{{*/ static std::string Sha1FromString(std::string const &input) /*{{{*/ { // XXX: move to hashes.h: HashString::FromString() ? - SHA1Summation sha1; + Hashes sha1(Hashes::SHA1SUM); sha1.Add(input.c_str(), input.length()); - return sha1.Result().Value(); + return sha1.GetHashString(Hashes::SHA1SUM).HashValue(); } /*}}}*/ bool ShowSrcPackage(CommandLine &CmdL) /*{{{*/ diff --git a/apt-private/private-source.cc b/apt-private/private-source.cc index c8a48a7..9b47ce3 100644 --- a/apt-private/private-source.cc +++ b/apt-private/private-source.cc @@ -29,6 +29,7 @@ #include #include +#include #include #include @@ -339,10 +340,10 @@ bool DoSource(CommandLine &CmdL) // Load the requestd sources into the fetcher aptAcquireWithTextStatus Fetcher; std::vector UntrustedList; - for (const char **I = CmdL.FileList + 1; *I != 0; I++) + for (const char **cmdl = CmdL.FileList + 1; *cmdl != 0; ++cmdl) { std::string Src; - pkgSrcRecords::Parser *Last = FindSrc(*I,SrcRecs,Src,Cache); + pkgSrcRecords::Parser *Last = FindSrc(*cmdl, SrcRecs, Src, Cache); if (Last == 0) { return _error->Error(_("Unable to find a source package for %s"),Src.c_str()); } @@ -383,14 +384,14 @@ bool DoSource(CommandLine &CmdL) } // Back track - std::vector Lst; - if (Last->Files2(Lst) == false) { + std::vector Lst; + if (Last->Files(Lst) == false) { return false; } DscFile curDsc; // Load them into the fetcher - for (std::vector::const_iterator I = Lst.begin(); + for (std::vector::const_iterator I = Lst.begin(); I != Lst.end(); ++I) { // Try to guess what sort of file it is we are getting. @@ -652,8 +653,10 @@ bool DoBuildDep(CommandLine &CmdL) CacheFile Cache; auto VolatileCmdL = GetPseudoPackages(Cache.GetSourceList(), CmdL, AddVolatileSourceFile, pseudoArch); + auto AreDoingSatisfy = strcasecmp(CmdL.FileList[0], "satisfy") == 0; - _config->Set("APT::Install-Recommends", false); + if (not AreDoingSatisfy) + _config->Set("APT::Install-Recommends", false); if (CmdL.FileSize() <= 1 && VolatileCmdL.empty()) return _error->Error(_("Must specify at least one package to check builddeps for")); @@ -661,6 +664,7 @@ bool DoBuildDep(CommandLine &CmdL) std::ostringstream buildDepsPkgFile; std::vector pseudoPkgs; // deal with the build essentials first + if (not AreDoingSatisfy) { std::vector BuildDeps; for (auto && opt: _config->FindVector("APT::Build-Essential")) @@ -678,11 +682,78 @@ bool DoBuildDep(CommandLine &CmdL) pseudoPkgs.emplace_back(pseudo, nativeArch, ""); } + if (AreDoingSatisfy) + { + std::vector BuildDeps; + for (unsigned i = 1; i < CmdL.FileSize(); i++) + { + const char *Start = CmdL.FileList[i]; + const char *Stop = Start + strlen(Start); + auto Type = pkgSrcRecords::Parser::BuildDependIndep; + + // Reject '>' and '<' as operators, as they have strange meanings. + bool insideVersionRestriction = false; + for (auto C = Start; C + 1 < Stop; C++) + { + if (*C == '(') + insideVersionRestriction = true; + else if (*C == ')') + insideVersionRestriction = false; + else if (insideVersionRestriction && (*C == '<' || *C == '>')) + { + if (C[1] != *C && C[1] != '=') + return _error->Error(_("Invalid operator '%c' at offset %d, did you mean '%c%c' or '%c='? - in: %s"), *C, (int)(C - Start), *C, *C, *C, Start); + C++; + } + } + + if (APT::String::Startswith(Start, "Conflicts:")) + { + Type = pkgSrcRecords::Parser::BuildConflictIndep; + Start += strlen("Conflicts:"); + } + while (1) + { + pkgSrcRecords::Parser::BuildDepRec rec; + Start = debListParser::ParseDepends(Start, Stop, + rec.Package, rec.Version, rec.Op, true, false, true, pseudoArch); + + if (Start == 0) + return _error->Error("Problem parsing dependency: %s", CmdL.FileList[i]); + rec.Type = Type; + + // We parsed a package that was ignored (wrong architecture restriction + // or something). + if (rec.Package.empty()) + { + // If we are in an OR group, we need to set the "Or" flag of the + // previous entry to our value. + if (BuildDeps.empty() == false && (BuildDeps[BuildDeps.size() - 1].Op & pkgCache::Dep::Or) == pkgCache::Dep::Or) + { + BuildDeps[BuildDeps.size() - 1].Op &= ~pkgCache::Dep::Or; + BuildDeps[BuildDeps.size() - 1].Op |= (rec.Op & pkgCache::Dep::Or); + } + } + else + { + BuildDeps.emplace_back(std::move(rec)); + } + + if (Start == Stop) + break; + } + } + std::string const pseudo = "command line argument"; + WriteBuildDependencyPackage(buildDepsPkgFile, pseudo, pseudoArch, BuildDeps); + pseudoPkgs.emplace_back(pseudo, pseudoArch, ""); + } + // Read the source list if (Cache.BuildSourceList() == false) return false; pkgSourceList *List = Cache.GetSourceList(); + if (not AreDoingSatisfy) { auto const VolatileSources = List->GetVolatileFiles(); for (auto &&pkg : VolatileCmdL) @@ -713,7 +784,7 @@ bool DoBuildDep(CommandLine &CmdL) } bool const WantLock = _config->FindB("APT::Get::Print-URIs", false) == false; - if (CmdL.FileList[1] != 0) + if (CmdL.FileList[1] != 0 && not AreDoingSatisfy) { if (Cache.BuildCaches(WantLock) == false) return false; @@ -786,7 +857,7 @@ bool DoBuildDep(CommandLine &CmdL) { pkgDepCache::ActionGroup group(Cache); - if (_config->FindB("APT::Get::Build-Dep-Automatic", false) == false) + if (_config->FindB(AreDoingSatisfy ? "APT::Get::Satisfy-Automatic" : "APT::Get::Build-Dep-Automatic", false) == false) { for (auto const &pkg: removeAgain) { diff --git a/apt-private/private-sources.cc b/apt-private/private-sources.cc index 713327f..4cfb879 100644 --- a/apt-private/private-sources.cc +++ b/apt-private/private-sources.cc @@ -31,7 +31,7 @@ class APT_HIDDEN ScopedGetLock { public: int fd; - ScopedGetLock(std::string const &filename) : fd(GetLock(filename)) {} + explicit ScopedGetLock(std::string const &filename) : fd(GetLock(filename)) {} ~ScopedGetLock() { close(fd); } }; bool EditSources(CommandLine &CmdL) diff --git a/apt-private/private-update.cc b/apt-private/private-update.cc index 59d1d6d..248f1f3 100644 --- a/apt-private/private-update.cc +++ b/apt-private/private-update.cc @@ -10,6 +10,7 @@ #include #include #include +#include #include #include diff --git a/cmdline/CMakeLists.txt b/cmdline/CMakeLists.txt index 8977b45..d82239b 100644 --- a/cmdline/CMakeLists.txt +++ b/cmdline/CMakeLists.txt @@ -29,10 +29,10 @@ target_link_libraries(apt-cdrom apt-pkg apt-private) target_link_libraries(apt-helper apt-pkg apt-private) target_link_libraries(apt-mark apt-pkg apt-private) target_link_libraries(apt-sortpkgs apt-pkg apt-private) -target_link_libraries(apt-extracttemplates apt-pkg apt-inst apt-private) -target_link_libraries(apt-internal-solver apt-pkg apt-inst apt-private) -target_link_libraries(apt-dump-solver apt-pkg apt-inst apt-private) -target_link_libraries(apt-internal-planner apt-pkg apt-inst apt-private) +target_link_libraries(apt-extracttemplates apt-pkg apt-private) +target_link_libraries(apt-internal-solver apt-pkg apt-private) +target_link_libraries(apt-dump-solver apt-pkg apt-private) +target_link_libraries(apt-internal-planner apt-pkg apt-private) set_target_properties(apt-dump-solver PROPERTIES RUNTIME_OUTPUT_DIRECTORY solvers diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index 3c0e477..23ab7e4 100644 --- a/cmdline/apt-cache.cc +++ b/cmdline/apt-cache.cc @@ -33,7 +33,6 @@ #include #include #include -#include #include #include #include @@ -135,14 +134,14 @@ static bool DumpPackage(CommandLine &CmdL) // ShowHashTableStats - Show stats about a hashtable /*{{{*/ // --------------------------------------------------------------------- /* */ -static map_pointer_t PackageNext(pkgCache::Package const * const P) { return P->NextPackage; } -static map_pointer_t GroupNext(pkgCache::Group const * const G) { return G->Next; } -template -static void ShowHashTableStats(std::string Type, - T *StartP, - map_pointer_t *Hashtable, - unsigned long Size, - map_pointer_t(*Next)(T const * const)) +static map_pointer PackageNext(pkgCache::Package const * const P) { return P->NextPackage; } +static map_pointer GroupNext(pkgCache::Group const * const G) { return G->Next; } +template +static void ShowHashTableStats(char const *const Type, + T *StartP, + map_pointer *Hashtable, + unsigned long Size, + map_pointer (*Next)(T const *const)) { // hashtable stats for the HashTable unsigned long NumBuckets = Size; @@ -202,8 +201,7 @@ static bool Stats(CommandLine &CmdL) int NVirt = 0; int DVirt = 0; int Missing = 0; - pkgCache::PkgIterator I = Cache->PkgBegin(); - for (;I.end() != true; ++I) + for (pkgCache::PkgIterator I = Cache->PkgBegin(); I.end() != true; ++I) { if (I->VersionList != 0 && I->ProvidesList == 0) { @@ -469,7 +467,7 @@ static bool DumpAvail(CommandLine &) char *Buffer = new char[Cache->HeaderP->MaxVerFileSize+10]; for (pkgCache::VerFile **J = VFList; *J != 0;) { - pkgCache::PkgFileIterator File(*Cache,(*J)->File + Cache->PkgFileP); + pkgCache::PkgFileIterator File(*Cache, Cache->PkgFileP + (*J)->File); // FIXME: Add support for volatile/with-source files FileFd PkgF(File.FileName(),FileFd::ReadOnly, FileFd::Extension); if (_error->PendingError() == true) @@ -483,7 +481,7 @@ static bool DumpAvail(CommandLine &) unsigned long Pos = 0; for (; *J != 0; J++) { - if ((*J)->File + Cache->PkgFileP != File) + if (Cache->PkgFileP + (*J)->File != File) break; const pkgCache::VerFile &VF = **J; @@ -596,8 +594,8 @@ static bool XVcg(CommandLine &CmdL) // Load the list of packages from the command line into the show list APT::CacheSetHelper helper(true, GlobalError::NOTICE); std::list mods; - mods.push_back(APT::CacheSetHelper::PkgModifier(0, ",", APT::PackageSet::Modifier::POSTFIX)); - mods.push_back(APT::CacheSetHelper::PkgModifier(1, "^", APT::PackageSet::Modifier::POSTFIX)); + mods.push_back(APT::CacheSetHelper::PkgModifier(0, ",", APT::CacheSetHelper::PkgModifier::POSTFIX)); + mods.push_back(APT::CacheSetHelper::PkgModifier(1, "^", APT::CacheSetHelper::PkgModifier::POSTFIX)); std::map pkgsets = APT::PackageSet::GroupedFromCommandLine(CacheFile, CmdL.FileList + 1, mods, 0, helper); @@ -809,8 +807,8 @@ static bool Dotty(CommandLine &CmdL) // Load the list of packages from the command line into the show list APT::CacheSetHelper helper(true, GlobalError::NOTICE); std::list mods; - mods.push_back(APT::CacheSetHelper::PkgModifier(0, ",", APT::PackageSet::Modifier::POSTFIX)); - mods.push_back(APT::CacheSetHelper::PkgModifier(1, "^", APT::PackageSet::Modifier::POSTFIX)); + mods.push_back(APT::CacheSetHelper::PkgModifier(0, ",", APT::CacheSetHelper::PkgModifier::POSTFIX)); + mods.push_back(APT::CacheSetHelper::PkgModifier(1, "^", APT::CacheSetHelper::PkgModifier::POSTFIX)); std::map pkgsets = APT::PackageSet::GroupedFromCommandLine(CacheFile, CmdL.FileList + 1, mods, 0, helper); diff --git a/cmdline/apt-cdrom.cc b/cmdline/apt-cdrom.cc index e9218ae..94202d9 100644 --- a/cmdline/apt-cdrom.cc +++ b/cmdline/apt-cdrom.cc @@ -107,7 +107,7 @@ static bool AddOrIdent(bool const Add) bool oneSuccessful = false; bool AutoDetect = _config->FindB("Acquire::cdrom::AutoDetect", true); - if (AutoDetect == true && UdevCdroms.Dlopen() == true) + if (AutoDetect == true) { bool const Debug = _config->FindB("Debug::Acquire::cdrom", false); std::string const CDMount = _config->Find("Acquire::cdrom::mount"); diff --git a/cmdline/apt-extracttemplates.cc b/cmdline/apt-extracttemplates.cc index bc8a27d..01b5dbb 100644 --- a/cmdline/apt-extracttemplates.cc +++ b/cmdline/apt-extracttemplates.cc @@ -326,7 +326,7 @@ static std::vector GetCommands() /*{{{*/ int main(int argc, const char **argv) /*{{{*/ { CommandLine CmdL; - auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_EXTRACTTEMPLATES, &_config, &_system, argc, argv, &ShowHelp, &GetCommands); + ParseCommandLine(CmdL, APT_CMD::APT_EXTRACTTEMPLATES, &_config, &_system, argc, argv, &ShowHelp, &GetCommands); Go(CmdL); diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index da18d2d..efb5cfd 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -42,14 +42,12 @@ #include #include #include -#include #include #include #include #include #include #include -#include #include #include #include @@ -149,8 +147,7 @@ static bool DoDSelectUpgrade(CommandLine &) pkgDepCache::ActionGroup group(Cache); // Install everything with the install flag set - pkgCache::PkgIterator I = Cache->PkgBegin(); - for (;I.end() != true; ++I) + for (pkgCache::PkgIterator I = Cache->PkgBegin(); I.end() != true; ++I) { /* Install the package only if it is a new install, the autoupgrader will deal with the rest */ @@ -160,7 +157,7 @@ static bool DoDSelectUpgrade(CommandLine &) /* Now install their deps too, if we do this above then order of the status file is significant for | groups */ - for (I = Cache->PkgBegin();I.end() != true; ++I) + for (pkgCache::PkgIterator I = Cache->PkgBegin(); I.end() != true; ++I) { /* Install the package only if it is a new install, the autoupgrader will deal with the rest */ @@ -169,7 +166,7 @@ static bool DoDSelectUpgrade(CommandLine &) } // Apply erasures now, they override everything else. - for (I = Cache->PkgBegin();I.end() != true; ++I) + for (pkgCache::PkgIterator I = Cache->PkgBegin(); I.end() != true; ++I) { // Remove packages if (I->SelectedState == pkgCache::State::DeInstall || @@ -417,6 +414,7 @@ static std::vector GetCommands() /*{{{*/ {"full-upgrade", &DoDistUpgrade, nullptr}, {"dselect-upgrade", &DoDSelectUpgrade, _("Follow dselect selections")}, {"build-dep", &DoBuildDep, _("Configure build-dependencies for source packages")}, + {"satisfy", &DoBuildDep, _("Satisfy dependency strings")}, {"clean", &DoClean, _("Erase downloaded archive files")}, {"autoclean", &DoAutoClean, _("Erase old downloaded archive files")}, {"auto-clean", &DoAutoClean, nullptr}, diff --git a/cmdline/apt-helper.cc b/cmdline/apt-helper.cc index beac0ef..3d6a692 100644 --- a/cmdline/apt-helper.cc +++ b/cmdline/apt-helper.cc @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -63,14 +64,36 @@ static bool DoDownloadFile(CommandLine &CmdL) /*{{{*/ { std::string download_uri = CmdL.FileList[fileind + 1]; std::string targetfile = CmdL.FileList[fileind + 2]; - std::string hash; - if (CmdL.FileSize() > fileind + 3) - hash = CmdL.FileList[fileind + 3]; + HashStringList hashes; + + fileind += 2; + + // An empty string counts as a hash for compatibility reasons + if (CmdL.FileSize() > fileind + 1 && *CmdL.FileList[fileind + 1] == '\0') + fileind++; + + /* Let's start looking for hashes */ + for (auto i = fileind + 1; CmdL.FileSize() > i; i++) + { + bool isAHash = false; + + for (auto HashP = HashString::SupportedHashes(); *HashP != nullptr; HashP++) + { + if (APT::String::Startswith(CmdL.FileList[i], *HashP)) + isAHash = true; + } + + if (!isAHash) + break; + + hashes.push_back(HashString(CmdL.FileList[i])); + fileind++; + } + // we use download_uri as descr and targetfile as short-descr - new pkgAcqFile(&Fetcher, download_uri, hash, 0, download_uri, targetfile, - "dest-dir-ignored", targetfile); + new pkgAcqFile(&Fetcher, download_uri, hashes, 0, download_uri, targetfile, + "dest-dir-ignored", targetfile); targetfiles.push_back(targetfile); - fileind += 3; } bool Failed = false; @@ -111,7 +134,7 @@ static bool DoSrvLookup(CommandLine &CmdL) /*{{{*/ return true; } /*}}}*/ -static const APT::Configuration::Compressor *FindCompressor(std::vector const & compressors, std::string name) /*{{{*/ +static const APT::Configuration::Compressor *FindCompressor(std::vector const &compressors, std::string const &name) /*{{{*/ { APT::Configuration::Compressor const * compressor = NULL; for (auto const & c : compressors) @@ -235,6 +258,35 @@ static bool DropPrivsAndRun(CommandLine &CmdL) /*{{{*/ return ExecWait(pid, CmdL.FileList[1]); } /*}}}*/ +static bool AnalyzePattern(CommandLine &CmdL) /*{{{*/ +{ + if (CmdL.FileSize() != 2) + return _error->Error("Expect one argument, a pattern"); + + try + { + auto top = APT::Internal::PatternTreeParser(CmdL.FileList[1]).parseTop(); + top->render(std::cout) << "\n"; + } + catch (APT::Internal::PatternTreeParser::Error &e) + { + std::stringstream ss; + ss << "input:" << e.location.start << "-" << e.location.end << ": error: " << e.message << "\n"; + ss << CmdL.FileList[1] << "\n"; + for (size_t i = 0; i < e.location.start; i++) + ss << " "; + for (size_t i = e.location.start; i < e.location.end; i++) + ss << "^"; + + ss << "\n"; + + _error->Error("%s", ss.str().c_str()); + return false; + } + + return true; +} + /*}}}*/ static bool ShowHelp(CommandLine &) /*{{{*/ { std::cout << @@ -256,6 +308,8 @@ static std::vector GetCommands() /*{{{*/ {"auto-detect-proxy", &DoAutoDetectProxy, _("detect proxy using apt.conf")}, {"wait-online", &DoWaitOnline, _("wait for system to be online")}, {"drop-privs", &DropPrivsAndRun, _("drop privileges before running given command")}, + {"analyze-pattern", &AnalyzePattern, _("analyse a pattern")}, + {"analyse-pattern", &AnalyzePattern, nullptr}, {nullptr, nullptr, nullptr}}; } /*}}}*/ diff --git a/cmdline/apt-internal-solver.cc b/cmdline/apt-internal-solver.cc index 5c9ca5a..d22eb75 100644 --- a/cmdline/apt-internal-solver.cc +++ b/cmdline/apt-internal-solver.cc @@ -67,7 +67,6 @@ static bool WriteSolution(pkgDepCache &Cache, FileFd &output) /*{{{*/ bool Okay = output.Failed() == false; for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false && likely(Okay); ++Pkg) { - std::string action; if (Cache[Pkg].Delete() == true) Okay &= EDSP::WriteSolutionStanza(output, "Remove", Pkg.CurrentVer()); else if (Cache[Pkg].NewInstall() == true || Cache[Pkg].Upgrade() == true) diff --git a/cmdline/apt-mark.cc b/cmdline/apt-mark.cc index 161845b..92efa0c 100644 --- a/cmdline/apt-mark.cc +++ b/cmdline/apt-mark.cc @@ -56,7 +56,8 @@ static bool DoAuto(CommandLine &CmdL) return _error->Error(_("No packages found")); bool MarkAuto = strcasecmp(CmdL.FileList[0],"auto") == 0; - int AutoMarkChanged = 0; + + vector PackagesMarked; for (APT::PackageList::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg) { @@ -74,16 +75,27 @@ static bool DoAuto(CommandLine &CmdL) continue; } - if (MarkAuto == false) - ioprintf(c1out,_("%s set to manually installed.\n"), Pkg.FullName(true).c_str()); - else - ioprintf(c1out,_("%s set to automatically installed.\n"), Pkg.FullName(true).c_str()); - + PackagesMarked.push_back(Pkg.FullName(true)); DepCache->MarkAuto(Pkg, MarkAuto); - ++AutoMarkChanged; } - if (AutoMarkChanged > 0 && _config->FindB("APT::Mark::Simulate", false) == false) - return DepCache->writeStateFile(NULL); + + bool MarkWritten = false; + bool IsSimulation = _config->FindB("APT::Mark::Simulate", false); + if (PackagesMarked.size() > 0 && !IsSimulation) { + MarkWritten = DepCache->writeStateFile(NULL); + if(!MarkWritten) { + return MarkWritten; + } + } + + if(IsSimulation || MarkWritten) { + for (vector::const_iterator I = PackagesMarked.begin(); I != PackagesMarked.end(); ++I) { + if (MarkAuto == false) + ioprintf(c1out,_("%s set to manually installed.\n"), (*I).c_str()); + else + ioprintf(c1out,_("%s set to automatically installed.\n"), (*I).c_str()); + } + } return true; } /*}}}*/ @@ -365,7 +377,7 @@ static bool ShowSelection(CommandLine &CmdL) /*{{{*/ else if (strncasecmp(CmdL.FileList[0], "showdeinstall", strlen("showdeinstall")) == 0 || strncasecmp(CmdL.FileList[0], "showremove", strlen("showremove")) == 0) selector = pkgCache::State::DeInstall; - else if (strncasecmp(CmdL.FileList[0], "showhold", strlen("showhold")) == 0) + else if (strncasecmp(CmdL.FileList[0], "showhold", strlen("showhold")) == 0 || strncasecmp(CmdL.FileList[0], "showheld", strlen("showheld")) == 0) selector = pkgCache::State::Hold; else //if (strcasecmp(CmdL.FileList[0], "showinstall", strlen("showinstall")) == 0) selector = pkgCache::State::Install; @@ -423,7 +435,7 @@ static std::vector GetCommands() /*{{{*/ {"purge",&DoSelection, nullptr}, {"showauto",&ShowAuto, _("Print the list of automatically installed packages")}, {"showmanual",&ShowAuto, _("Print the list of manually installed packages")}, - {"showhold",&ShowSelection, _("Print the list of packages on hold")}, {"showholds",&ShowSelection, nullptr}, + {"showhold",&ShowSelection, _("Print the list of packages on hold")}, {"showholds",&ShowSelection, nullptr}, {"showheld",&ShowSelection, nullptr}, {"showinstall",&ShowSelection, nullptr}, {"showinstalls",&ShowSelection, nullptr}, {"showdeinstall",&ShowSelection, nullptr}, {"showdeinstalls",&ShowSelection, nullptr}, {"showremove",&ShowSelection, nullptr}, {"showremoves",&ShowSelection, nullptr}, diff --git a/cmdline/apt.cc b/cmdline/apt.cc index d388e4a..cc73181 100644 --- a/cmdline/apt.cc +++ b/cmdline/apt.cc @@ -78,6 +78,7 @@ static std::vector GetCommands() /*{{{*/ // misc {"edit-sources", &EditSources, _("edit the source information file")}, {"moo", &DoMoo, nullptr}, + {"satisfy", &DoBuildDep, _("satisfy dependency strings")}, // for compat with muscle memory {"dist-upgrade", &DoDistUpgrade, nullptr}, diff --git a/completions/bash/apt b/completions/bash/apt index e185392..bc2a7ef 100644 --- a/completions/bash/apt +++ b/completions/bash/apt @@ -39,7 +39,7 @@ _apt() "list" "search" "show" "showsrc" - "install" "remove" "purge" "autoremove" + "install" "remove" "purge" "autoremove" "autopurge" "update" "upgrade" "full-upgrade" "dist-upgrade" "edit-sources" diff --git a/debian/NEWS b/debian/NEWS index e8cb4e2..13fc641 100644 --- a/debian/NEWS +++ b/debian/NEWS @@ -1,3 +1,33 @@ +apt (1.9.11) experimental; urgency=medium + + apt(8) now waits for the lock indefinitely if connected to a tty, or + for 120 seconds if not. + + -- Julian Andres Klode Wed, 26 Feb 2020 20:30:33 +0100 + +apt (1.9.6) experimental; urgency=medium + + apt(8) no longer treats package names passed as regular expressions or fnmatch + expressions, requiring the use of patterns (apt-patterns(5)) to perform complex + searches. For ease of use, regular expressions starting with ^ or ending with + $ continue to work. + + This fixes the problem where e.g. g++ could mean either "the package g++" + or, if there is no g++ package, "all packages containing g". This change + will propagate to apt-* after the release of Debian bullseye. + + -- Julian Andres Klode Wed, 15 Jan 2020 21:45:18 +0100 + +apt (1.9.5) unstable; urgency=medium + + Credentials in apt_auth.conf(5) now only apply to https and tor+https + sources to avoid them being leaked over plaintext (Closes: #945911). To + opt-in to http, add http:// before the hostname. Note that this will transmit + credentials in plain text, which you do not want on devices that could be + operating in an untrusted network. + + -- Julian Andres Klode Mon, 02 Dec 2019 11:45:52 +0100 + apt (1.8.0~alpha3) unstable; urgency=medium The PATH for running dpkg is now configured by the option DPkg::Path, diff --git a/debian/apt.conf.autoremove b/debian/apt.conf.autoremove index f9d9e85..478c571 100644 --- a/debian/apt.conf.autoremove +++ b/debian/apt.conf.autoremove @@ -10,31 +10,13 @@ APT VersionedKernelPackages { - # linux kernels - "linux-image"; - "linux-headers"; - "linux-image-extra"; - "linux-modules"; - "linux-modules-extra"; - "linux-signed-image"; - "linux-image-unsigned"; - # kfreebsd kernels - "kfreebsd-image"; - "kfreebsd-headers"; - # hurd kernels - "gnumach-image"; + # kernels + "linux-.*"; + "kfreebsd-.*"; + "gnumach-.*"; # (out-of-tree) modules ".*-modules"; ".*-kernel"; - "linux-backports-modules-.*"; - "linux-modules-.*"; - # tools - "linux-tools"; - "linux-cloud-tools"; - # build info - "linux-buildinfo"; - # source code - "linux-source"; }; Never-MarkAuto-Sections diff --git a/debian/apt.install b/debian/apt.install index f12eb24..f745b3d 100644 --- a/debian/apt.install +++ b/debian/apt.install @@ -37,6 +37,7 @@ usr/share/man/*/apt-get.* usr/share/man/*/apt-key.* usr/share/man/*/apt-mark.* usr/share/man/*/apt-secure.* +usr/share/man/*/apt-patterns.* usr/share/man/*/apt-transport-http.* usr/share/man/*/apt-transport-https.* usr/share/man/*/apt-transport-mirror.* diff --git a/debian/apt.systemd.daily b/debian/apt.systemd.daily index c6fbca0..2533905 100755 --- a/debian/apt.systemd.daily +++ b/debian/apt.systemd.daily @@ -84,7 +84,7 @@ check_stamp() return 0 fi - if [ "$interval" -eq 0 ]; then + if [ "$interval" = 0 ]; then debug_echo "check_stamp: interval=0" # treat as no time has passed return 1 @@ -237,7 +237,7 @@ do_cache_backup() BackupArchiveInterval="$1" if [ "$BackupArchiveInterval" = always ]; then : - elif [ "$BackupArchiveInterval" -eq 0 ]; then + elif [ "$BackupArchiveInterval" = 0 ]; then return fi @@ -415,12 +415,12 @@ if [ $UpdateInterval = always ] || [ $AutocleanInterval = always ] || [ $CleanInterval = always ] ; then : -elif [ $UpdateInterval -eq 0 ] && - [ $DownloadUpgradeableInterval -eq 0 ] && - [ $UnattendedUpgradeInterval -eq 0 ] && - [ $BackupArchiveInterval -eq 0 ] && - [ $AutocleanInterval -eq 0 ] && - [ $CleanInterval -eq 0 ] ; then +elif [ $UpdateInterval = 0 ] && + [ $DownloadUpgradeableInterval = 0 ] && + [ $UnattendedUpgradeInterval = 0 ] && + [ $BackupArchiveInterval = 0 ] && + [ $AutocleanInterval = 0 ] && + [ $CleanInterval = 0 ] ; then # check cache size check_size_constraints diff --git a/debian/changelog b/debian/changelog index 7abfa31..0b4863c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,15 +1,314 @@ -apt (1.8.2+parrot2) testing; urgency=medium +apt (2.0.2) unstable; urgency=medium - * Update CI Configuration. + [ Boyuan Yang ] + * Simplified Chinese program translation update (Closes: #955023) + + [ Frans Spiesschaert ] + * Dutch program translation update (Closes: #955505) + + [ Marco Ippolito ] + * Fix gramma in apt(8): "by append(+ing) a" (Closes: #955412) + + [ Chris Leick ] + * German manpage translation update + * Fix "string match{ing,es}" and whitespace typo in apt-patterns(7) + + [ Julian Andres Klode ] + * test/integration/apt.pem: Regenerate with SHA2 hashes to make the + test work with stricter gnutls in Ubuntu which rejects SHA1 + * ubuntu: http: Add non-interactive to user agent if run by systemd + (LP: #1825000) + + -- Julian Andres Klode Thu, 09 Apr 2020 12:21:07 +0200 + +apt (2.0.1) unstable; urgency=medium + + [ David Kalnischkies ] + * Don't crash pattern matching sections if pkg has no section + * Parse last line in deb file correctly by adding a newline + + [ Julian Andres Klode ] + * apt-helper: Add analyze-pattern helper + * Add color highlighting to E:/W:/N: prefixes (Closes: #953527) + + [ Алексей Шилин ] + * Russian program translation update (Closes: #953804) + + -- Julian Andres Klode Tue, 24 Mar 2020 11:53:30 +0100 + +apt (2.0.0) unstable; urgency=medium + + * Upload to unstable - Happy APT 2.0 day! + * GetLock: No strerror if it's just another process holding the lock + * Show absolute time while waiting for lock instead of %, rework message + + -- Julian Andres Klode Sat, 07 Mar 2020 21:19:53 +0100 + +apt (1.9.12) experimental; urgency=medium + + * pkgcache: Add operator bool() to map_pointer + * (temporarily) unhide pkgDPkgPM again to have python-apt compile + + -- Julian Andres Klode Thu, 27 Feb 2020 15:06:56 +0100 + +apt (1.9.11) experimental; urgency=medium + + [ Tomáš Janoušek ] + * bash completion: Add autopurge command + + [ Tris Emmy Wilson ] + * apt-mark: don't lie about successful marks + + [ Julian Andres Klode ] + * apt(8): Wait for lock (Closes: #754103) + * policy: Implement pinning by source package (Closes: #166032) + * Initialize libgcrypt on first use (Closes: #949074) + * Fix various compiler warnings + * Bump ABI to 6.0; update symbols file; cleanup ABI: + - Merge various function overloads together + - Make stuff that should be virtual virtual + - Default to hidden visibility + * Code removals: + - Use a 32-bit djb VersionHash instead of CRC-16 + - Remove CRC-16 implementation + * Hardening: + - tagfile: Check if memchr() returned null before using + - tagfile: Check out-of-bounds access to Tags vector + * Cache improvements: + - Type safe cache: Replace map_pointer_t with map_pointer + - Extensibility: Add d-pointers to groups, packages, versions, and files + - Prepare for package hashtable removal: Swap locations of hashtables + + [ Nis Martensen ] + * apt-pkg/srcrecords.cc: 'source' means 'deb-src' in error message + + [ David Kalnischkies ] + * Parse records including empty tag names correctly + + -- Julian Andres Klode Wed, 26 Feb 2020 21:29:48 +0100 + +apt (1.9.10) experimental; urgency=medium + + [ David Kalnischkies ] + * Fix remaining usec vs sec time-delta calculation typos. + Thanks to Trent W. Buck for initial patch (Closes: #950776) + + [ Julian Andres Klode ] + * seccomp: Allow time64 variants (>402,<415) of allowed syscalls + (Closes: #951012) + * debian/control: Bump libseccomp-dev Build-Depends to >= 2.4.2 + * seccomp: Allow recvmmsg_time64() and futex_time64() + * policy: Add SetPriority() methods + * Revert "Add a Packages-Require-Authorization Release file field" + + [ Michael Vogt ] + * doc: remove "WIP" from apt.8.xml + + -- Julian Andres Klode Tue, 18 Feb 2020 12:32:42 +0100 + +apt (1.9.9) experimental; urgency=medium + + * Widen regular expressions for versioned kernel packages (LP: #1607845) + * Implement short patterns (patterns starting with ~) - -- Lorenzo "Palinuro" Faletra Wed, 05 Jun 2019 16:27:38 +0200 + -- Julian Andres Klode Tue, 04 Feb 2020 17:42:21 +0100 -apt (1.8.2+parrot1) testing; urgency=medium +apt (1.9.8) experimental; urgency=medium - * Import new Debian release. - * Re-apply https downgrade patch. + * pkgcache.cc: Mix PACKAGE_VERSION into the cache hash + * mmap: Do not look for empty pool unless we need to + * apt-verbatim.ent: Update ubuntu-codename from disco to focal + * NewGroup: Create GrpIterator after allocation (fix segfault) - -- Lorenzo "Palinuro" Faletra Wed, 05 Jun 2019 15:47:44 +0200 + -- Julian Andres Klode Mon, 27 Jan 2020 13:25:52 +0100 + +apt (1.9.7) experimental; urgency=medium + + * Trim trailing whitespace (thanks lintian-brush) + * NewProvidesAllArch: Check if group is empty before using it. + This caused automake-1.16 to not be provided by automake anymore, + because apt wanted to add provides to packages in an empty automake-1.16 + group. LP: #1859952 + * Fix debian-rules-uses-deprecated-systemd-override. + We accidentally managed to restart apt-daily{,-upgrade}.service + again because our dh_systemd_start override was being ignored + since we switched to debhelper 12. Override dh_installsystemd + instead. + + -- Julian Andres Klode Thu, 16 Jan 2020 12:13:50 +0100 + +apt (1.9.6) experimental; urgency=medium + + [ Julian Andres Klode ] + * gitlab-ci: Do not do coverage + * gitlab-ci: Use ccache + * satisfy: Fix segmentation fault when called with empty argument + * Add support for GTest 1.9, do not fail silently if its missing + * gtests: Fix netrc parser test regression from https-only changes + * Macro cleanup: + - Avoid #define _error, use anonymous C++ struct instead (Closes: #948338) + - Rename _count() macro to APT_ARRAY_SIZE() + - Remove various unused macros like MAX/MIN/ABS/APT_CONST + - Only define likely/unlikely if APT_COMPILING_APT set + * Performance: Avoid extra out-of-cache hash table deduplication for + package names, this saved about 10-16% on gencaches in memory + * acquire: Move queue startup after calling log's Start(), fixes abort() + calls in python-apt + * hashes: Use Libgcrypt for hashing purposes + - Raise buffer size for Hashes::AddFD() from 4 KiB to 64 KiB + - Convert users of {MD5,SHA1,SHA256,SHA512}Summation to use Hashes + - Deprecate the Summation classes and mark them for removal + - Remove includes of (md5|sha1|sha2).h headers + * netrc: Add warning when ignoring entries for unencrypted protocols + * apt(8): Disable regular expressions and fnmatch + + [ David Kalnischkies ] + * Drop g++ build-dependency to help crossbuilding (Closes: #948201) + + [ Denis Mosolov ] + * Fix typo in README.md + + -- Julian Andres Klode Wed, 15 Jan 2020 23:06:49 +0100 + +apt (1.9.5) experimental; urgency=medium + + [ Julian Andres Klode ] + * Parse 'show' arguments for the 'info' alias as well (LP: #1843812) + * patterns: Add base class for regular expression matching + * patterns: Add ?version + * patterns: Add ?source-name and ?source-version + * patterns: Add ?archive + * patterns: Add ?origin + * patterns: Add ?any-version + * patterns: Implement ?narrow(...), as ?any-version(?and(...)) + * patterns: Add ?all-versions + * patterns: Add ?section + * netrc: Restrict auth.conf entries to https by default (Closes: #945911) + + [ Anatoly Borodin ] + * README.md: fix dead anonscm link + + [ Алексей Шилин ] + * Search in all available description translations (Closes: #490000) + * strutl: Add APT::String::DisplayLength() function + * Fix progress bar width for multibyte charsets + + [ Chris Leick ] + * German manpage translation update + + [ David Kalnischkies ] + * Use correct filename on IMS-hit reverify for indices + * Remove failed trusted signature instead of index on IMS hit + + [ Anthony Papillon ] + * Fix a mistake in man french translation + + -- Julian Andres Klode Mon, 02 Dec 2019 18:17:56 +0100 + +apt (1.9.4) experimental; urgency=medium + + * CMake: Pass -Werror=return-type to gcc + * CMake: Produce a fatal error if triehash could not be found + * apt.systemd.daily: Do not numerically check if intervals equal 0 + (LP: #1840995) + * srvrec: Use re-entrant resolver functions + * Pass --abort-after=1 to dpkg when using --force-depends (Closes: #935910) + (LP: #1844634) + * Fix use of GTest to adjust for GTest 1.9 + + -- Julian Andres Klode Thu, 19 Sep 2019 11:13:47 +0200 + +apt (1.9.3) experimental; urgency=medium + + * Fix segfault in pkgAcquire::Enqueue() with Acquire::Queue-Mode=access + (LP: #1839714) + * test: Use valgrind to ensure Acquire::Queue-Mode=access does not crash + * Add initial support for package patterns (patterns on versions WIP) + + -- Julian Andres Klode Mon, 19 Aug 2019 16:21:20 +0200 + +apt (1.9.2) experimental; urgency=medium + + [ Julian Andres Klode ] + * Improve locking messaging - pid and name, "do not remove lock file" + + [ Lynn Cyrin ] + * Change a pronoun in the readme from `he` to `they` + + [ David Kalnischkies ] + * Distribute host-less work based on backlog of the queues + * Show details about the package with bad Provides + * Apply various suggestions by cppcheck + + -- Julian Andres Klode Mon, 05 Aug 2019 21:26:10 +0200 + +apt (1.9.1) experimental; urgency=medium + + * RFC1123StrToTime: Accept const std::string& as first argument + * Fix pkg-config-test autopkgtest + + -- Julian Andres Klode Thu, 20 Jun 2019 17:53:14 +0200 + +apt (1.9.0) experimental; urgency=medium + + [ Julian Andres Klode ] + * CMakeLists.txt: Bump C++ standard version to C++14 + * debian: Update to debhelper-compat (= 12) + * debian/rules: Do not use dh_install --list-missing (dh 12 porting) + * Remove all the deprecated bits, merge various function prototypes together + * prepare-release: Add merge-translations command + * Use system-provided triehash + * CI: Use unstable for now, as we need triehash package + * Tighten dependencies from apt and apt-utils on libs + * Add test case for local-only packages pinned to never + * acq: worker: Move CurrentSize, TotalSize, ResumePoint to CurrentItem + * apt-helper: Support multiple hashes for a file + * Add 'explicit' to most single argument constructors + * Get rid of pkgExtract and pkgFLCache + * Merge libapt-inst into libapt-pkg + * Use debDebFile to get control file instead of dpkg-deb + * prepare-release: Add bump-abi command + * Change soname to libapt-pkg.so.5.90 + * CMake: Enforce "override" use on overridden methods + * debmetaindex: Use isspace_ascii() variant to normalize Signed-By + * README.md: Quote -j as code with backticks + * apt-mark: Add hidden showheld alias for showhold + * Mnor wording improvements in documentation + * Make APT::StringView public, replace std::string with it in various places + * Introduce apt satisfy and apt-get satisfy (Closes: #275379) + * Run unifdef -DAPT_{8,9,10,15}_CLEANER_HEADERS + * Adjust code for missing includes, and using std::string + * Bump cache MajorVersion to 16 + + [ Corentin Noël ] + * Add pkg-config files for the apt-pkg and apt-inst libraries + (Closes: #439121) + + [ Simon McVittie ] + * vendor/getinfo: Iterate through vendors in lexicographic order + (Closes: #924662) + * vendor/getinfo: Don't assume that Ubuntu is the last vendor + (Closes: #924662) + + [ Martin Michlmayr ] + * Perform minor copy-editing on the docs + + [ Ivan Krylov ] + * Mark apt-transport-https as M-A:foreign (Closes: #905141) + + [ David Kalnischkies ] + * Don't limit cpu-limited queues to at most 10 + + [ Stephen Kitt ] + * apt-cache: only show solutions if displayed + + [ Brian Murray ] + * Do not include squashfs file systems in df output. (LP: #1756595) + + [ Simon Körner ] + * http: Fix Host header in proxied https connections + + -- Julian Andres Klode Mon, 17 Jun 2019 11:36:56 +0200 apt (1.8.2) unstable; urgency=medium @@ -33,13 +332,6 @@ apt (1.8.2) unstable; urgency=medium -- Julian Andres Klode Tue, 28 May 2019 16:40:29 +0200 -apt (1.8.1+parrot1) testing; urgency=medium - - * Import new Debian release. - * Re-apply https downgrade patch. - - -- Lorenzo "Palinuro" Faletra Fri, 10 May 2019 21:47:56 +0200 - apt (1.8.1) unstable; urgency=medium * Add test case for local-only packages pinned to never @@ -2564,7 +2856,7 @@ apt (1.1~exp4) experimental; urgency=medium - add new -o Debug::Acquire::Transaction=1 debug option * feature/expected-size: Do not download more data in the mehotds than expected if we know - the size. For the InRelease/Release/Release.gpg add new + the size. For the InRelease/Release/Release.gpg add new Acquire::MaxReleaseFileSize that defaults to 10Mb for now * Verify the hashes of the downloaded compressed files early * Only load unauthenticated data into our parsers when the user @@ -2640,7 +2932,7 @@ apt (1.1~exp3) experimental; urgency=medium * Make /var/lib/apt/lists and /var/cache/apt/archives owned by the new _apt user * Drop Privileges in the following acquire methods: - copy, http, https, ftp, gpgv, gzip/bzip2/lzma/xz + copy, http, https, ftp, gpgv, gzip/bzip2/lzma/xz * DropPrivs: Improvements based on feedback from error@debian.org [ Julian Andres Klode ] @@ -2917,7 +3209,7 @@ apt (1.0.9.2) unstable; urgency=medium * generalize Acquire::GzipIndex to support all compressions that apt supports * Fix regression for cdrom: sources from latest security update - * Ensure that iTFRewritePackageOrder is "MD5sum" to match + * Ensure that iTFRewritePackageOrder is "MD5sum" to match apt-ftparchive * debian/rules: add hardening=+all. Thanks to Simon Ruderich, Markus Waldeck @@ -2986,16 +3278,16 @@ apt (1.0.8) unstable; urgency=medium * Add testcase for apt list --all-versions * * apt-pkg/deb/dpkgpm.cc: - update string matching for dpkg I/O errors. (LP: #1363257) - - properly parse the dpkg status line so that package name - is properly set and an apport report is created. Thanks + - properly parse the dpkg status line so that package name + is properly set and an apport report is created. Thanks to Anders Kaseorg for the patch (LP: #1353171) * Use heap to allocate PatternMatch to avoid potential stack overflow (Closes: 759612) * Run autopkgtest tests with "env -i" to avoid pollution from the host env (Closes: #759655) - * test/integration/test-ubuntu-bug-346386-apt-get-update-paywall: + * test/integration/test-ubuntu-bug-346386-apt-get-update-paywall: - use downloadfile() to fix test failure - * Fix incorrect upgradable listing in "apt list" + * Fix incorrect upgradable listing in "apt list" (thanks to Michael Musenbrock) (Closes: #753297) * apt-pkg/cachefile.cc: - ensure we have a Policy in CacheFile.BuildDepCache() @@ -3003,7 +3295,7 @@ apt (1.0.8) unstable; urgency=medium - Improve Debug::Acquire::http debug output [ Dimitri John Ledkov ] - * apt-ftparchive: make Packages & Sources generation optional, + * apt-ftparchive: make Packages & Sources generation optional, during Generate call [ David Kalnischkies ] @@ -3134,7 +3426,7 @@ apt (1.0.4) unstable; urgency=low * Fix various errors found by clang scan-build * Show unauthenticated warning for source packages as well (Closes: #749795) * Add compat mode for old (32bit FileSize) CacheDB (LP: #1274466) - * cmdline/apt-helper.cc: use less generic description/short-description + * cmdline/apt-helper.cc: use less generic description/short-description in apt-helper download * add pkgSrcRecords::Step() to step through all the pkgSrcRecords (thanks to Helmut Grohne) @@ -3200,7 +3492,7 @@ apt (1.0.2) unstable; urgency=medium * fix apt list output for pkgs in dpkg ^rc state * Notice the user about "apt list -a" when only a single hit if found * fix test-failure in adt - * apt-private/acqprogress.cc: fix output when ctrl-c is hit during + * apt-private/acqprogress.cc: fix output when ctrl-c is hit during apt update (LP: #1310548, closes: #744297) * Fix option name DPkg::Progress-Fancy in apt.8 manpage (LP: #1310506) @@ -3251,7 +3543,7 @@ apt (1.0) unstable; urgency=low The "Happy birthday and 10000b years in the making" release [ Julian Andres Klode ] - * apt-inst: Do not try to create a substring of an empty string in + * apt-inst: Do not try to create a substring of an empty string in error reporting (LP: #1288718) [ Beatrice Torracca ] @@ -3284,7 +3576,7 @@ apt (1.0) unstable; urgency=low * refresh po/pot and unfuzzy apt-extracttemplate manpage change * remove no longer needed apt.7 page * install "apt" binary by default - * add sun-java{5,6}-jdk to breaks/replaces as they provided a + * add sun-java{5,6}-jdk to breaks/replaces as they provided a "apt" binary as well [ Trần Ngọc Quân ] @@ -3306,7 +3598,7 @@ apt (0.9.16.1) unstable; urgency=medium apt (0.9.16) unstable; urgency=medium [ Michael Vogt ] - * add hashsum support in apt-helper download-file and + * add hashsum support in apt-helper download-file and add more tests [ Trần Ngọc Quân ] @@ -3358,7 +3650,7 @@ apt (0.9.15.4) unstable; urgency=low * remove auto-generated apt-key and sources.list on clean (closes: 739749) * add testcase for Bug#718329 * various fixes for ADT failures - + [ Jon Severinsson ] * add apt-vendor information for tanglu @@ -3375,9 +3667,9 @@ apt (0.9.15.3) unstable; urgency=medium [ Michael Vogt ] * disable https->http redirects in libcurl, thanks to Julien Cristau - * ADT: use "Restrictions: allow-stderr and avoid apt-stderr.log in + * ADT: use "Restrictions: allow-stderr and avoid apt-stderr.log in debian/tests/run-tests - * test/integration/test-bug-723705-tagfile-truncates-fields: + * test/integration/test-bug-723705-tagfile-truncates-fields: - fix autopkgtest failure * add missing canNotFindFnmatch/showFnmatchSelection (for the next ABI break) @@ -3470,7 +3762,7 @@ apt (0.9.14.3~exp4) experimental; urgency=medium - add Description tag for deb822 sources - add support for Enabled: no in deb822 sources.list - add support for multiple URIs in deb822 style sources.list - - add support for multipl types in one line + - add support for multiple types in one line * add integration test for apt search and apt show * do not ignore ioctl(TIOCSCTTY) errors @@ -3487,7 +3779,7 @@ apt (0.9.14.3~exp3) experimental; urgency=low * add "apt upgrade --dist" * add "apt purge" * flock() the file edited in "apt edit-sources" - * apt-private/private-show.cc: + * apt-private/private-show.cc: - do not show Description-lang: header * reword apt !isatty() warning * add missing integration test for "apt list" and fix bugs @@ -3514,7 +3806,7 @@ apt (0.9.14.3~exp2) experimental; urgency=medium * rename URL to Uri in deb822-sources * support multiple "Suite:" entries in deb822 style sources.list: "Suite: stable testing unstable" - + -- Michael Vogt Thu, 16 Jan 2014 21:43:22 +0100 apt (0.9.14.3~exp1) experimental; urgency=low @@ -3535,14 +3827,14 @@ apt (0.9.14.2) unstable; urgency=low [ Joe Hansen ] * Danish translation update. Closes: #732166 - + [ Peter Green ] * add apt-vendor for raspbian. Closes: #732749 [ Thomas Bechtold ] * apt-pkg/contrib/gpgv.cc: use /tmp as fallback dir if the directory from $TMPDIR is not available (closes: #728500) - + [ Michael Vogt ] * vendor/getinfo: - fix ubuntu-codename @@ -3602,9 +3894,9 @@ apt (0.9.13.1) unstable; urgency=low [ Colin Watson ] * fix "apt-get --purge build-dep" (closes: #720597) * fix regression that APT::Keep-Fds is not honored (closes: #730490) - + [ Michael Vogt ] - * add "-f" option to "build-dep" as sbuild is using it to fix + * add "-f" option to "build-dep" as sbuild is using it to fix regression with cross-building (LP: #1255806) * add autopkgtest support for the integration testsuite * merge mvo/feature/short-list @@ -3618,7 +3910,7 @@ apt (0.9.13.1) unstable; urgency=low apt (0.9.13) unstable; urgency=low [ TJ Guthrie ] - * Changed MinAgeSec to MinAge in /etc/cron.daily/apt:200,204 + * Changed MinAgeSec to MinAge in /etc/cron.daily/apt:200,204 LP: #1206047 -- Michael Vogt Sun, 24 Nov 2013 10:56:22 +0100 @@ -3667,7 +3959,7 @@ apt (0.9.12) unstable; urgency=low [ Christian Perrier ] * Fix typo in apt-private/private-show.cc. Thanks to Benjamin Keresa. Closes: #724073 - + [ Mark Hymers ] * fix libapt-inst for >2G debs (closes: #725483) @@ -3691,16 +3983,16 @@ apt (0.9.12) unstable; urgency=low * Add new "apt-get upgrade --with-new-pkgs" option (and add man-page for it). So "apt-get upgrade --with-new-pkgs" will pull in new dependencies but never remove packages - * Rename "--dpkg-progress" to "--show-progress" and document it in + * Rename "--dpkg-progress" to "--show-progress" and document it in apt-get.8. This will show global install progress information in the terminal. * Fix status-fd progress calculation for certain multi-arch install/upgrade situations - * add new -o DpkgPM::Progress-Fancy for nicer dpkg progress output + * add new -o DpkgPM::Progress-Fancy for nicer dpkg progress output on vt100+ terminals - * fix libapt-inst for >2G debs (closes: #725483), thanks to Mark Hymers - * debian/apt.postinst: use --compare-versions lt instead of lt-nl, - to ensure the apt-auto-removal file is correctly create, + * fix libapt-inst for >2G debs (closes: #725483), thanks to Mark Hymers + * debian/apt.postinst: use --compare-versions lt instead of lt-nl, + to ensure the apt-auto-removal file is correctly create, thanks to Ben Hutchings * update Uploaders to match recent uploaders better * Set the default "Acquire::PDiffs::FileLimit" to 20. If the amount @@ -3725,7 +4017,7 @@ apt (0.9.11.4) unstable; urgency=low apt (0.9.11.3) unstable; urgency=low [ Michael Vogt ] - * Add DPkgPM::Progress option to enable terminal install + * Add DPkgPM::Progress option to enable terminal install progress * fix typo (mkostemp->mkstemp) * Remove invalid "-f" option for apt-get check, thanks to @@ -3743,10 +4035,10 @@ apt (0.9.11.2) unstable; urgency=low [ Milo Casagrande ] * Update Italian translation. Closes: #721030 - + [ Trần Ngọc Quân ] * Update Vietnamese translation. Closes: #720752 - + [ Michael Vogt ] * dselect/install: - remove "-f" option for apt-get clean/auto-clean (closes: #720532) @@ -3766,11 +4058,11 @@ apt (0.9.11.1) unstable; urgency=low [ Michael Vogt ] * more coverity fixes: - - explicit init + - explicit init - always chdir("/") after chroot() - - ftparchive/override.cc: fix "skip empty lines" code, the pointer + - ftparchive/override.cc: fix "skip empty lines" code, the pointer needs to get de-referenced first - * dselect/update: + * dselect/update: - remove "-f" option for apt-get update to fix breakage (closes: 720532) [ Christopher Baines ] @@ -3794,7 +4086,7 @@ apt (0.9.11) unstable; urgency=low [ Michael Vogt ] * lp:~mvo/apt/config-clear: - - support Configuration.Clear() for a clear of the entire + - support Configuration.Clear() for a clear of the entire configuration * lp:~mvo/apt/add-glob-function: - add Glob() to fileutl.{cc,h} @@ -3802,7 +4094,7 @@ apt (0.9.11) unstable; urgency=low - refactor large chunks of cmdline/*.cc into a new libapt-private library that is shared between the internal apt cmdline tools - install libapt-private* into the apt binary - - add PACKAGE_MATCHER_ABI_COMPAT define so that this branch can be + - add PACKAGE_MATCHER_ABI_COMPAT define so that this branch can be merged without breaking ABI - add lintian override for no-shlibs-control-file so that the internal libapt-private.so.0.0.0 can be shipped @@ -3821,7 +4113,7 @@ apt (0.9.11) unstable; urgency=low apt (0.9.10) unstable; urgency=low The "Hello to Debconf" upload - + [ Christian Perrier ] * Vietnamese translation update. Closes: #718615 * Japanese translation update. Closes: #719279 @@ -3836,7 +4128,7 @@ apt (0.9.10) unstable; urgency=low * make the code -Wall clean again * remove duplicated #include * add .travis.yml - * use the 'abi-complicance-checker' package and remove the buildin + * use the 'abi-complicance-checker' package and remove the buildin copy for the abi checks [ David Kalnischkies ] @@ -3859,7 +4151,7 @@ apt (0.9.10) unstable; urgency=low * make the keyring locations in apt-key configurable * let apt-key del work better with softlink and single key keyrings * do not call 'apt-key update' in apt.postinst - + [ Colin Watson ] * prefer native arch over higher priority for providers (Closes: #718482) @@ -3871,7 +4163,7 @@ apt (0.9.9.4) unstable; urgency=low * pick up Translation-* even if only compressed available (Closes: 717665) * request absolute URIs from proxies again (0.9.9.3 regression) (Closes: 717891) - + [ Michael vogt ] * fix missing changelog entry for 0.9.9.3 (git-dch issue) @@ -3881,9 +4173,9 @@ apt (0.9.9.3) unstable; urgency=low [ Ben Hutchings ] * debian/apt.auto-removal.sh: - - do not include debug symbol packages for the kernel in the + - do not include debug symbol packages for the kernel in the blacklist (closes: #717616) - + [ Michael Vogt ] * debian/apt.postinst: - run /etc/kernel/postinst.d/apt-auto-removal once on upgrade @@ -3896,7 +4188,7 @@ apt (0.9.9.3) unstable; urgency=low [ Raphael Geissert ] * Do not send a connection: keep-alive, at all - + -- Michael Vogt Thu, 25 Jul 2013 17:14:58 +0200 apt (0.9.9.2) unstable; urgency=low @@ -3981,14 +4273,14 @@ apt (0.9.8.2) unstable; urgency=low [ Guillem Jover ] * Update Vcs fields (Closes: #708562) - + [ Michael Vogt ] * buildlib/apti18n.h.in: - fix build failure when building without NLS (closes: #671587) - + [ Gregoire Menuel ] * Fix double free (closes: #711045) - + [ Raphael Geissert ] * Fix crash when the "mirror" method does not find any entry (closes: #699303) @@ -4006,7 +4298,7 @@ apt (0.9.8.1) unstable; urgency=low * apt-pkg/indexcopy.cc: - non-inline RunGPGV methods to restore ABI compatibility with previous versions to fix partial upgrades (Closes: #707771) - + [ Michael Vogt ] * moved source to http://git.debian.org/apt/apt.git * updated gbp.conf to match what bzr-buildpackage is doing @@ -4017,18 +4309,18 @@ apt (0.9.8.1) unstable; urgency=low apt (0.9.8) unstable; urgency=low [ Ludovico Cavedon ] - * properly handle if-modfied-since with libcurl/https + * properly handle if-modfied-since with libcurl/https (closes: #705648) - + [ Andreas Beckman ] * apt-pkg/algorithms.cc: - Do not propagate negative scores from rdepends. Propagating the absolute value of a negative score may boost obsolete packages and keep them installed instead of installing their successors. (Closes: #699759) - + [ Michael Vogt ] * apt-pkg/sourcelist.cc: - - fix segfault when a hostname contains a [, thanks to + - fix segfault when a hostname contains a [, thanks to Tzafrir Cohen (closes: #704653) * debian/control: - replace manpages-it (closes: #704723) @@ -4055,14 +4347,14 @@ apt (0.9.8) unstable; urgency=low [ Marc Deslauriers ] * make apt-ftparchive generate missing deb-src hashes (LP: #1078697) - + [ Yaroslav Halchenko ] * Fix English spelling error in a message ('A error'). Unfuzzy translations. Closes: #705087 [ Programs translations ] * French translation completed (Christian Perrier) - + [ Manpages translations ] * French translation completed (Christian Perrier) @@ -4082,7 +4374,7 @@ apt (0.9.8) unstable; urgency=low - environment variables do not override an explicit no proxy directive ("DIRECT") in apt.conf - disregard all_proxy environment variable, like other methods - + -- Michael Vogt Wed, 08 May 2013 18:43:28 +0200 apt (0.9.7.9~exp2) experimental; urgency=low @@ -4090,7 +4382,7 @@ apt (0.9.7.9~exp2) experimental; urgency=low [ Programs translations ] * Update all PO files and apt-all.pot * French translation completed (Christian Perrier) - + [ Daniel Hartwig ] * cmdline/apt-get.cc: - do not have space between "-a" and option when cross building @@ -4137,7 +4429,7 @@ apt (0.9.7.9~exp1) experimental; urgency=low [ Niels Thykier ] * test/libapt/assert.h, test/libapt/run-tests: - exit with status 1 on test failure - + [ Daniel Hartwig ] * test/integration/framework: - continue after test failure but preserve exit status @@ -4149,9 +4441,9 @@ apt (0.9.7.9~exp1) experimental; urgency=low * methods/connect.cc: - provide useful error message in case of EAI_SYSTEM (closes: #703603) - + [ Michael Vogt ] - * add new config options "Acquire::ForceIPv4" and + * add new config options "Acquire::ForceIPv4" and "Acquire::ForceIPv6" to allow focing one or the other (closes: #611891) * lp:~mvo/apt/fix-tagfile-hash: @@ -4166,7 +4458,7 @@ apt (0.9.7.8) unstable; urgency=critical * SECURITY UPDATE: InRelease verification bypass - CVE-2013-1051 - + [ David Kalnischk ] * apt-pkg/deb/debmetaindex.cc, test/integration/test-bug-595691-empty-and-broken-archive-files, @@ -4179,7 +4471,7 @@ apt (0.9.7.8) unstable; urgency=critical apt (0.9.7.8~exp2) experimental; urgency=low * include two missing patches to really fix bug #696225, thanks to - Guillem Jover + Guillem Jover * ensure sha512 is really used when available, thanks to Tyler Hicks (LP: #1098752) @@ -4189,12 +4481,12 @@ apt (0.9.7.8~exp1) experimental; urgency=low [ Manpages translation updates ] * Italian (Beatrice Torracca). Closes: #696601 - + [ Programs translation updates ] * Japanese (Kenshi Muto). Closes: #699783 - + [ Michael Vogt ] - * fix pkgProblemResolver::Scores, thanks to Paul Wise. + * fix pkgProblemResolver::Scores, thanks to Paul Wise. Closes: #697577 * fix missing translated apt.8 manpages, thanks to Helge Kreutzmann for the report. Closes: #696923 @@ -4214,7 +4506,7 @@ apt (0.9.7.8~exp1) experimental; urgency=low * methods/http.cc: - quote spaces in filenames to ensure as the http method is also (potentially) used for non deb,dsc content that may contain - spaces, thanks to Daniel Hartwig and Thomas Bushnell + spaces, thanks to Daniel Hartwig and Thomas Bushnell (LP: #1086997) - quote plus in filenames to work around a bug in the S3 server (LP: #1003633) @@ -4253,7 +4545,7 @@ apt (0.9.7.7) unstable; urgency=low * apt-pkg/algorithms.cc: - ensure pkgProblemResolver calls MarkDelete without FromUser set so that it can't overrule holds and the protection flag - + [ Michael Vogt ] * change permissions of /var/log/apt/term.log to 0640 (LP: #975199) @@ -4293,7 +4585,7 @@ apt (0.9.7.6) unstable; urgency=low * apt-pkg/contrib/netrc.cc: - remove the 64 char limit for login/password in internal usage - remove 256 char line limit by using getline() (POSIX.1-2008) - + [ Colin Watson ] * apt-pkg/pkgcachegen.cc: - Fix crash if the cache is remapped while writing a Provides version @@ -4680,7 +4972,7 @@ apt (0.9.4) unstable; urgency=low [ Michael Vogt ] * merged updated de.po, thanks to Holger Wansing (closes: #672466) - + [ Raphael Geissert ] * apt-pkg/acquire*.cc: - handle redirections in the worker with the right method instead of @@ -4809,7 +5101,7 @@ apt (0.9.1) unstable; urgency=low Merci, les Titeps! * Drop hardcoded "en.html" suffix in apt-secure manpage. Thanks to David Prevot. - + -- Michael Vogt Tue, 17 Apr 2012 09:49:31 +0200 apt (0.9.0) unstable; urgency=low @@ -4826,10 +5118,10 @@ apt (0.9.0~exp1) experimental; urgency=low - add APT::pkgPackageManager::MaxLoopCount to ensure that the ordering code does not get into a endless loop when it flip-flops between two states - * update libapt-inst1.4 to libapt-inst1.5 because of the cleanup + * update libapt-inst1.4 to libapt-inst1.5 because of the cleanup performed * prepare debian/unstable upload, if there are no issues with this - upload it will directly go into unstable as 0.9.0 + upload it will directly go into unstable as 0.9.0 [ David Kalnischkies ] * do not update po and pot files in the process of the build as this @@ -5198,7 +5490,7 @@ apt (0.8.16~exp6) experimental; urgency=low size are pretty unlikely for now, but we need it for deb packages which could become bigger than 4GB now (LP: #815895) * merged the debian-sid branch - + [ Michael Vogt ] * bump ABI version @@ -5210,7 +5502,7 @@ apt (0.8.16~exp5) experimental; urgency=low * apt-pkg/makefile: - install sha256.h compat header * apt-pkg/pkgcachegen.{cc,h}: - - use ref-to-ptr semantic in NewDepends() to ensure that the + - use ref-to-ptr semantic in NewDepends() to ensure that the libapt does not segfault if the cache is remapped in between (LP: #812862) - fix crash when P.Arch() was used but the cache got remapped @@ -5220,7 +5512,7 @@ apt (0.8.16~exp5) experimental; urgency=low * apt-pkg/acquire.cc: - fix potential divide-by-zero * methods/mirror.cc: - - include the architecture(s) in the query string as well so + - include the architecture(s) in the query string as well so that the server can make better decisions -- Michael Vogt Mon, 15 Aug 2011 14:52:54 +0200 @@ -5234,7 +5526,7 @@ apt (0.8.16~exp4) experimental; urgency=low - Write the file size to the cache * apt-pkg/pkgcache.cc: - Check that cache is at least CacheFileSize bytes large (LP: #16467) - + [ Michael Vogt ] * merged latest fixes from debian-sid * apt-pkg/cdrom.{cc,h}: @@ -5276,7 +5568,7 @@ apt (0.8.16~exp3) experimental; urgency=low [ Michael Vogt ] * merge fixes from the debian/unstable upload - * merge lp:~mvo/apt/sha512-template to get fixes for the + * merge lp:~mvo/apt/sha512-template to get fixes for the sha1/md5 verifiation (closes: #632520) -- Michael Vogt Fri, 15 Jul 2011 09:56:17 +0200 @@ -5306,7 +5598,7 @@ apt (0.8.16~exp2) experimental; urgency=low [ Stefano Zacchiroli ] * doc/external-dependency-solver-protocol.txt: - describe EDSP and the configuration interface around it - + [ Michael Vogt ] * [ABI-Break] merge lp:~mvo/apt/sha512-template to add support for sha512 * [ABI-Break] merge lp:~mvo/apt/dpointer to support easier extending @@ -5475,7 +5767,7 @@ apt (0.8.15.6) unstable; urgency=low * apt-pkg/sourcelist.{cc,h}: - add pkgSourceList::GetLastModifiedTime() helper * apt-pkg/pkgcachegen.{cc,h}: - - use ref-to-ptr semantic in NewDepends() to ensure that the + - use ref-to-ptr semantic in NewDepends() to ensure that the libapt does not segfault if the cache is remapped in between (LP: #812862) - fix crash when P.Arch() was used but the cache got remapped @@ -5484,7 +5776,7 @@ apt (0.8.15.6) unstable; urgency=low * apt-pkg/acquire-item.cc: - if no Release.gpg file is found, still load the hashes for verification (closes: #636314) and add test - + [ David Kalnischkies ] * lots of cppcheck fixes @@ -5513,7 +5805,7 @@ apt (0.8.15.4) unstable; urgency=low unescape character escapes like \0XX and \xXX (plus added test) * refresh po/* - + -- Michael Vogt Tue, 26 Jul 2011 12:12:27 +0200 apt (0.8.15.3) unstable; urgency=low @@ -5564,7 +5856,7 @@ apt (0.8.15.3) unstable; urgency=low apt (0.8.15.2) unstable; urgency=high - * fix from David Kalnischkies for the InRelease gpg verification + * fix from David Kalnischkies for the InRelease gpg verification code (LP: #784473) -- Michael Vogt Tue, 12 Jul 2011 11:54:47 +0200 @@ -5685,7 +5977,7 @@ apt (0.8.15) unstable; urgency=low - ignore lines starting with "#" in the mirror file - ignore non http urls in the mirrors - append the dist (e.g. sid, wheezy) as a query string when - asking for a suitable mirror + asking for a suitable mirror * apt-pkg/deb/deblistparser.cc: - include all known languages when building the apt cache (LP: #794907) @@ -5695,7 +5987,7 @@ apt (0.8.15) unstable; urgency=low [ Kenneth Solbø Andersen ] * apt-pkg/deb/dpkgpm.cc: - set permissions of term.log to root.adm and 644 (LP: #404724) - + [ Chris Leick ] * various typo and syntax corrections in doc/*.xml @@ -5704,7 +5996,7 @@ apt (0.8.15) unstable; urgency=low apt (0.8.15~exp3) experimental; urgency=low * debian/control: - - add Breaks: 0.8.15~exp3) for libapt-pkg4.10 and + - add Breaks: 0.8.15~exp3) for libapt-pkg4.10 and libapt-inst1.2 (thanks to Jonathan Nieder, closes: #630214) - use depends for the ${shlibs:Depends} to make the breaks work @@ -5799,7 +6091,7 @@ apt (0.8.15~exp1) experimental; urgency=low - ignore lines starting with "#" in the mirror file - ignore non http urls in the mirrors - append the dist (e.g. sid, wheezy) as a query string when - asking for a suitable mirror + asking for a suitable mirror * debian/control: - add libapt-pkg4.10 and libapt-inst1.2 library packages @@ -5905,7 +6197,7 @@ apt (0.8.14) unstable; urgency=low (Closes: #121132) * debian/control: - Set Standards-Version to 3.9.2 - + [ Michael Vogt ] * mirror method: - do not crash if the mirror file fails to download @@ -5970,8 +6262,8 @@ apt (0.8.13) unstable; urgency=low [ Thorsten Spindler ] * methods/rsh.cc - fix rsh/ssh option parsing (LP: #678080), thanks to - Ville Mattila - + Ville Mattila + [ Michael Vogt ] * apt-pkg/acquire-item.cc: - mark pkgAcqIndexTrans as Index-File to avoid asking the @@ -6065,7 +6357,7 @@ apt (0.8.11.4) unstable; urgency=low - ensure that va_list is not invalid in second try * cmdline/apt-get.cc: - don't remove new dependencies of garbage packages (Closes: #613420) - + [ Michael Vogt ] * test/integration/* - fix dashish in the integration tests @@ -6087,11 +6379,11 @@ apt (0.8.11.2) unstable; urgency=low [ Michael Vogt ] * merged lp:~evfool/apt/fix641673: - - String-fix in the source and the translations for the grammatical + - String-fix in the source and the translations for the grammatical mistake reported in bug LP: #641673, thanks to Robert Roth * merged lp:~evfool/apt/fix418552: - Grammar fix for bug LP: #418552, thanks to Robert Roth - + [ David Kalnischkies ] * cmdline/apt-get.cc: - add --install-suggests option (Closes: #473089) @@ -6262,7 +6554,7 @@ apt (0.8.10.1) unstable; urgency=low if packages could not found (LP: #647045) [ Programs translations ] - * Spanish update by Javier Fernández-Sanguino Peña. Closes: #607145 + * Spanish update by Javier Fernández-Sanguino Peña. Closes: #607145 [ Manpages translations ] * Correct a typo and an error in French manpages translation. @@ -6441,9 +6733,9 @@ apt (0.8.4) unstable; urgency=low available LP: #633967. Thanks to Colin Watson * apt-pkg/contrib/cdromutl.cc: - if apt-cdrom is used on writable media (like usb-sticks), do - not use the root directory to identify the medium (as all - changes there change the ident id). Use the .disk directory - instead + not use the root directory to identify the medium (as all + changes there change the ident id). Use the .disk directory + instead [ David Kalnischkies ] * ftparchive/writer.cc: @@ -6686,7 +6978,7 @@ apt (0.7.26~exp11) experimental; urgency=low - try to install another or-group member in DepRemove before breaking the or group (Closes: #590438) - configure also the replacement before remove by adding Immediate flag - + [ Michael Vogt ] * apt-pkg/contrib/error.{cc,h} - docstring cleanup @@ -6836,7 +7128,7 @@ apt (0.7.26~exp6) experimental; urgency=low - enable cdrom autodetection via libudev by default - show message about Vcs in use when apt-get source is run for packages maintained in a Vcs - - better support transitional packages with mark auto-installed. + - better support transitional packages with mark auto-installed. when the transitional package is in "oldlibs" the new package is not marked auto installed (same is true for section metapackages) @@ -6846,7 +7138,7 @@ apt (0.7.26~exp6) experimental; urgency=low - write apport crash file on package failure (disabled by default on debian until apport is available) - support mirror failure reporting (disabled by default on debian) - + [ David Kalnischkies ] * apt-pkg/deb/dpkgpm.cc: - write Disappeared also to the history.log @@ -6962,7 +7254,7 @@ apt (0.7.26~exp5) experimental; urgency=low [ Michael Vogt ] * methods/http.{cc,h}: - code cleanup, use enums instead of magic ints - + [ Jari Aalto ] * debian/rules: - spell out some less known options to reduce manpage consultation-rate @@ -6972,7 +7264,7 @@ apt (0.7.26~exp5) experimental; urgency=low [ Julian Andres Klode ] * apt-pkg/acquire-item.cc: - Fix pkgAcqFile::Custom600Headers() to always return something. - + [ Christian Perrier ] * Slovak translation update. Closes: #581159 @@ -7052,7 +7344,7 @@ apt (0.7.26~exp4) experimental; urgency=low * apt-pkg/deb/debrecords.cc: - fix max tag buffer size (LP: #545336, closes: #578959) * debian/rules: - - install html doxygen in libapt-pkg-doc + - install html doxygen in libapt-pkg-doc * debian/control: - build-depend on doxygen @@ -7171,7 +7463,7 @@ apt (0.7.26~exp3) experimental; urgency=low - if apt-get source foo=version or foo/distro can not be found, error out (LP: #502641) * apt-pkg/packagemanager.cc: - - better debug output + - better debug output * doc/examples/configure-index: - add missing Debug::pkgPackageManager option @@ -7224,7 +7516,7 @@ apt (0.7.26~exp1) experimental; urgency=low [ Ivan Masár ] * Slovak translation update. Closes: #568294 - + [ Michael Vogt ] * [BREAK] merged lp:~mvo/apt/history - this writes a /var/log/apt/history tagfile that contains details @@ -7232,8 +7524,8 @@ apt (0.7.26~exp1) experimental; urgency=low * methods/http.cc: - add cache-control headers even if no cache is given to allow adding options for intercepting proxies - - add Acquire::http::ProxyAutoDetect configuration that - can be used to call a external helper to figure out the + - add Acquire::http::ProxyAutoDetect configuration that + can be used to call a external helper to figure out the proxy configuration and return it to apt via stdout (this is a step towards WPAD and zeroconf/avahi support) * abicheck/ @@ -7384,11 +7676,11 @@ apt (0.7.25) unstable; urgency=low Closes: #551534 * Italian translation update by Milo Casagrande Closes: #555797 - * Simplified Chinese translation update by Aron Xu + * Simplified Chinese translation update by Aron Xu Closes: #558737 * Slovak translation update by Ivan Masár Closes: #559277 - + [ Michael Vogt ] * apt-pkg/packagemanager.cc: - add output about pre-depends configuring when debug::pkgPackageManager @@ -7411,7 +7703,7 @@ apt (0.7.25) unstable; urgency=low [ Brian Murray ] * apt-pkg/depcache.cc, apt-pkg/indexcopy.cc: - typo fix (LP: #462328) - + [ Loïc Minier ] * cmdline/apt-key: - Emit a warning if removed keys keyring is missing and skip associated @@ -7526,7 +7818,7 @@ apt (0.7.24) unstable; urgency=low [ Michael Vogt ] * apt-pkg/deb/dpkgpm.cc: - - when tcgetattr() returns non-zero skip all pty magic + - when tcgetattr() returns non-zero skip all pty magic (thanks to Simon Richter, closes: #509866) * apt-inst/contrib/arfile.cc: - show proper error message for Invalid archive members @@ -7583,7 +7875,7 @@ apt (0.7.23.1) unstable; urgency=low [ Michael Vogt ] * apt-pkg/pkgcache.cc: - - do not set internal "needs-configure" state for packages in + - do not set internal "needs-configure" state for packages in triggers-pending state. dpkg will deal with the trigger and it if does it before we trigger it, dpkg will error out (LP: #414631) @@ -7601,7 +7893,7 @@ apt (0.7.23) unstable; urgency=low and '{http,ftp}_proxy' environment variables are used only if options mentioned above are not specified. (Closes: #445985, #157759, #320184, #365880, #479617) - + [ David Kalnischkies ] * cmdline/apt-get.cc: - add APT::Get::HideAutoRemove=small to display only a short line @@ -7686,7 +7978,7 @@ apt (0.7.22) unstable; urgency=low Thanks to Aurélien Couderc. * Translations: - fr.po - - sk.po. Closes: #525857 + - sk.po. Closes: #525857 - ru.po. Closes: #526816 - eu.po. Closes: #528985 - zh_CN.po. Closes: #531390 @@ -7697,7 +7989,7 @@ apt (0.7.22) unstable; urgency=low * Added translations - ast.po (Asturian by Marcos Alvareez Costales). Closes: #529007, #529730, #535328 - + [ David Kalnischkies ] * [ABI break] support '#' in apt.conf and /etc/apt/preferences (closes: #189866) @@ -7705,7 +7997,7 @@ apt (0.7.22) unstable; urgency=low * support running "--simulate" as user * add depth information to the debug output and show what depends type triggers a autoinst (closes: #458389) - * add Debug::pkgDepCache::Marker with more detailed debug output + * add Debug::pkgDepCache::Marker with more detailed debug output (closes: #87520) * add Debug::pkgProblemResolver::ShowScores and make the scores adjustable @@ -7735,14 +8027,14 @@ apt (0.7.22) unstable; urgency=low - provide DPkg::Chroot-Directory config option (useful for testing) - fix potential hang when in a background process group * apt-pkg/algorithms.cc: - - consider recommends when making the scores for the problem + - consider recommends when making the scores for the problem resolver * apt-pkg/acquire-worker.cc: - show error details of failed methods * apt-pkg/contrib/fileutl.cc: - if a process aborts with signal, show signal number * methods/http.cc: - - ignore SIGPIPE, we deal with EPIPE from write in + - ignore SIGPIPE, we deal with EPIPE from write in HttpMethod::ServerDie() (LP: #385144) * Only run Download-Upgradable and Unattended-Upgrades if the initial update was successful Closes: #341970 @@ -7750,7 +8042,7 @@ apt (0.7.22) unstable; urgency=low - support having CDs with no Packages file (just a Packages.gz) by not forcing a verification on non-existing files (LP: #255545) - - remove the gettext from a string that consists entirely + - remove the gettext from a string that consists entirely of variables (LP: #56792) * apt-pkg/cacheiterators.h: - add missing checks for Owner == 0 in end() @@ -7760,9 +8052,9 @@ apt (0.7.22) unstable; urgency=low - add new strprintf() function to make i18n strings easier - fix compiler warning * apt-pkg/deb/debsystem.cc: - - make strings i18n able - * fix problematic use of tolower() when calculating the version - hash by using locale independent tolower_ascii() function. + - make strings i18n able + * fix problematic use of tolower() when calculating the version + hash by using locale independent tolower_ascii() function. Thanks to M. Vefa Bicakci (LP: #80248) * build fixes for g++-4.4 * cmdline/apt-mark: @@ -7773,13 +8065,13 @@ apt (0.7.22) unstable; urgency=low - merged patch from Aurélien Couderc to improve the text (thanks!) * [ABI] merged the libudev-dlopen branch, this allows one to pass - "apt-udev-auto" to Acquire::Cdrom::mount and the cdrom method will + "apt-udev-auto" to Acquire::Cdrom::mount and the cdrom method will dynamically find/mount the cdrom device (if libhal is available) [ Julian Andres Klode ] * apt-pkg/contrib/configuration.cc: Fix a small memory leak in ReadConfigFile. - * Introduce support for the Enhances field. (Closes: #137583) + * Introduce support for the Enhances field. (Closes: #137583) * Support /etc/apt/preferences.d, by adding ReadPinDir() (Closes: #535512) * configure-index: document Dir::Etc::SourceParts and some other options (Closes: #459605) @@ -7789,15 +8081,15 @@ apt (0.7.22) unstable; urgency=low SHA1Summation and SHA256Summation [ Osamu Aoki ] - * Updated cron script to support backups by hardlinks and - verbose levels. All features turned off by default. + * Updated cron script to support backups by hardlinks and + verbose levels. All features turned off by default. * Added more error handlings. Closes: #438803, #462734, #454989 - * Documented all cron script related configuration items in + * Documented all cron script related configuration items in configure-index. [ Dereck Wonnacott ] * apt-ftparchive might write corrupt Release files (LP: #46439) - * Apply --important option to apt-cache depends (LP: #16947) + * Apply --important option to apt-cache depends (LP: #16947) [ Otavio Salvador ] * Apply patch from Sami Liedes to reduce the @@ -7820,7 +8112,7 @@ apt (0.7.21) unstable; urgency=low - sk.po. Closes: #520403 - it.po. Closes: #522222 - sk.po. Closes: #520403 - + [ Jamie Strandboge ] * apt.cron.daily: catch invalid dates due to DST time changes in the stamp files @@ -7841,7 +8133,7 @@ apt (0.7.21) unstable; urgency=low * Clarify the --help for 'purge' (LP: #243948) * cmdline/apt-get.cc - fix "apt-get source pkg" if there is a binary package and - a source package of the same name but from different + a source package of the same name but from different packages (LP: #330103) [ Colin Watson ] @@ -7864,9 +8156,9 @@ apt (0.7.20.1) unstable; urgency=low [ Michael Vogt ] * apt-pkg/pkgcachegen.cc: - - fix apt-cache search for localized description + - fix apt-cache search for localized description (closes: #512110) - + [ Christian Perrier ] * Translations: - fr.po: fix spelling error to "défectueux". Thanks to Thomas Péteul. @@ -7899,10 +8191,10 @@ apt (0.7.20) unstable; urgency=low (Closes: #440049, #509337) [ Michael Vogt ] - * add option to "apt-get build-dep" to mark the needed - build-dep packages as automatic installed. + * add option to "apt-get build-dep" to mark the needed + build-dep packages as automatic installed. This is controlled via the value of - APT::Get::Build-Dep-Automatic and is set "false" by default. + APT::Get::Build-Dep-Automatic and is set "false" by default. Thanks to Aaron Haviland, closes: #448743 * apt-inst/contrib/arfile.cc: - support members ending with '/' as well (thanks to Michal Cihr, @@ -7910,12 +8202,12 @@ apt (0.7.20) unstable; urgency=low [ Christian Perrier ] * Translations: - - Finnish updated. Closes: #508449 + - Finnish updated. Closes: #508449 - Galician updated. Closes: #509151 - Catalan updated. Closes: #509375 - Vietnamese updated. Closes: #509422 - Traditional Chinese added. Closes: #510664 - - French corrected (remove awful use of first person) + - French corrected (remove awful use of first person) -- Michael Vogt Mon, 05 Jan 2009 08:59:20 +0100 @@ -7959,9 +8251,9 @@ apt (0.7.19) unstable; urgency=low - Norwegian Bokmål updated. Closes: #505934 - Brazilian Portuguese updated. Closes: #505949 - Basque updated. Closes: #506085 - - Russian updated. Closes: #506452 - - Marathi updated. - - Ukrainian updated. Closes: #506545 + - Russian updated. Closes: #506452 + - Marathi updated. + - Ukrainian updated. Closes: #506545 -- Michael Vogt Mon, 24 Nov 2008 10:33:54 +0100 @@ -8061,7 +8353,7 @@ apt (0.7.17~exp4) experimental; urgency=low apt (0.7.17~exp3) experimental; urgency=low * apt-pkg/acquire-item.cc: - - fix a merge mistake that prevents the fallback to the + - fix a merge mistake that prevents the fallback to the uncompressed 'Packages' to work correctly (closes: #409284) -- Michael Vogt Wed, 29 Oct 2008 09:36:24 +0100 @@ -8075,7 +8367,7 @@ apt (0.7.17~exp2) experimental; urgency=low * apt-pkg/algorithm.cc: - Strip username and password from source URL in error message. (Closes: #425150) - + [ Michael Vogt ] * fix various -Wall warnings @@ -8122,7 +8414,7 @@ apt (0.7.16) unstable; urgency=low * Retitle the apt-mark.8 manpage (thanks to Justin Pryzby, closes: #471276) * Better documentation on using both APT::Default-Release and /etc/apt/preferences (thanks to Ingo Saitz, closes: #145575) - + [ Michael Vogt ] * doc/apt-cache.8.xml: - add missing citerefentry @@ -8159,7 +8451,7 @@ apt (0.7.15~exp2) experimental; urgency=low [ Michael Vogt ] * apt-pkg/pkgcachegen.cc: - - do not add multiple identical descriptions for the same + - do not add multiple identical descriptions for the same language (closes: #400768) [ Program translations ] @@ -8214,7 +8506,7 @@ apt (0.7.15~exp1) experimental; urgency=low (thanks to Joey Hess) * doc/makefile: - add examples/apt-https-method-example.conf - + -- Michael Vogt Tue, 16 Sep 2008 21:27:03 +0200 apt (0.7.14) unstable; urgency=low @@ -8250,10 +8542,10 @@ apt (0.7.14) unstable; urgency=low * Apply patch to avoid truncating of arbitrary files. Thanks to Bryan Donlan for the patch. Closes: #482476 * Avoid using dbus if dbus-daemon isn't running. Closes: #438803 - + [ Michael Vogt ] * debian/apt.cron.daily: - - apply patch based on the ideas of Francesco Poli for better + - apply patch based on the ideas of Francesco Poli for better behavior when the cache can not be locked (closes: #459344) -- Michael Vogt Wed, 28 May 2008 15:19:12 +0200 @@ -8270,10 +8562,10 @@ apt (0.7.13) unstable; urgency=low [ Goswin von Brederlow ] * Add support for --no-download on apt-get update. Closes: #478517 - + [ Program translations ] - Vietnamese updated. Closes: #479008 - + -- Otavio Salvador Fri, 02 May 2008 14:46:00 -0300 apt (0.7.12) unstable; urgency=low @@ -8286,7 +8578,7 @@ apt (0.7.12) unstable; urgency=low * apt-pkg/deb/dpkgpm.cc: - merged patch from Kees Cook to fix annoying upper-case display on amd64 in sbuild - * apt-pkg/algorithms.cc: + * apt-pkg/algorithms.cc: - add APT::Update::Post-Invoke-Success script slot - Make the breaks handling use the kill list. This means, that a Breaks: Pkg (<< version) may put Pkg onto the remove list. @@ -8325,7 +8617,7 @@ apt (0.7.12) unstable; urgency=low - French updated. - Bulgarian updated. Closes: #448492 - Galician updated. Closes: #476839 - + [ Daniel Burrows ] * apt-pkg/depcache.cc: - Patch MarkInstall to follow currently satisfied Recommends even @@ -8345,7 +8637,7 @@ apt (0.7.12) unstable; urgency=low -- Daniel Burrows Sat, 26 Apr 2008 12:24:35 -0700 apt (0.7.11) unstable; urgency=critical - + [ Raise urgency to critical since it fixes a critical but for Debian Installer Lenny Beta1 release ] @@ -8417,7 +8709,7 @@ apt (0.7.10) unstable; urgency=low - make the authentication download code more robust against servers/proxies with broken If-Range implementations * apt-pkg/packagemanager.{cc,h}: - - propergate the Immediate flag to make hitting the + - propergate the Immediate flag to make hitting the "E: Internal Error, Could not perform immediate configuration (2)" harder * debian/control: @@ -8431,7 +8723,7 @@ apt (0.7.10) unstable; urgency=low - support lzma data members * ftparchive/multicompress.cc: - support lzma output - + [ Daniel Burrows ] * apt-pkg/contrib/configuration.cc: - if RootDir is set, then FindFile and FindDir will return paths @@ -8487,11 +8779,11 @@ apt (0.7.7) unstable; urgency=low - remove zero size files on I-M-S hit * methods/https.cc: - only send LastModified if we actually have a file - - send range request with if-range + - send range request with if-range - delete failed downloads - delete zero size I-M-S hits * apt-pkg/deb/dpkgpm.{cc,h}: - - merged dpkg-log branch, this lets you specify a + - merged dpkg-log branch, this lets you specify a Dir::Log::Terminal file to log dpkg output to (ABI break) - fix parse error when dpkg sends unexpected data @@ -8523,7 +8815,7 @@ apt (0.7.7) unstable; urgency=low - set "APT::Install-Recommends" to true by default (OMG!) * debian/apt.cron.daily: - only run the cron job if apt-get check succeeds (LP: #131719) - + [ Program translations ] - French updated - Basque updated. Closes: #436425 @@ -8565,7 +8857,7 @@ apt (0.7.7) unstable; urgency=low [ Colin Watson ] * apt-pkg/contrib/mmap.cc: - don't fail if msync() returns > 0 - + -- Michael Vogt Tue, 23 Oct 2007 14:58:03 +0200 apt (0.7.6) unstable; urgency=low @@ -8634,14 +8926,14 @@ apt (0.7.4) unstable; urgency=low apt (0.7.3) unstable; urgency=low - * fixed compile errors with g++ 4.3 (thanks to + * fixed compile errors with g++ 4.3 (thanks to Daniel Burrows, closes: #429378) * fixes in the auto-mark code (thanks to Daniel Burrows) * fix FTBFS by changing build-depends to libcurl4-gnutls-dev (closes: #428363) * cmdline/apt-get.cc: - - fix InstallTask code when a pkgRecord ends + - fix InstallTask code when a pkgRecord ends with a single '\n' (thanks to Soren Hansen for reporting) * merged from Christian Perrier: * vi.po: completed to 532t, again. Closes: #429899 @@ -8664,7 +8956,7 @@ apt (0.7.2-0.1) unstable; urgency=low -- Steve Langasek Thu, 28 Jun 2007 18:46:53 -0700 apt (0.7.2) unstable; urgency=low - + * merged the debian/experimental changes back into the debian/sid branch * merged from Christian Perrier: @@ -8697,20 +8989,20 @@ apt (0.7.2) unstable; urgency=low * add --dsc-only option, thanks to K. Richard Pixley * Removed the more leftover #pragma interface/implementation closes: #306937 (thanks to Andreas Henriksson for the patch) - + -- Michael Vogt Wed, 06 Jun 2007 23:19:50 +0200 apt (0.7.1) experimental; urgency=low * ABI library name change because it's built against new glibc - * implement SourceVer() in pkgRecords + * implement SourceVer() in pkgRecords (thanks to Daniel Burrows for the patch!) * apt-pkg/algorithm.cc: - use clog for all debugging - - only increase the score of installed applications if they - are not obsolete - - fix resolver bug on removal triggered by weak-dependencies + - only increase the score of installed applications if they + are not obsolete + - fix resolver bug on removal triggered by weak-dependencies with or-groups * methods/http.cc: - send apt version in User-Agent @@ -8718,12 +9010,12 @@ apt (0.7.1) experimental; urgency=low - fix SHA1Hash() return value * apt-pkg/cdrom.cc: - only unmount if APT::CDROM::NoMount is false - * methods/cdrom.cc: + * methods/cdrom.cc: - only umount if it was mounted by the method before * po/gl.po: - fix error translation that causes trouble to lsb_release * apt-pkg/acquire-item.cc: - - if decompression of a index fails, delete the index + - if decompression of a index fails, delete the index * apt-pkg/acquire.{cc,h}: - deal better with duplicated sources.list entries (avoid double queuing of URLs) - this fixes hangs in bzip/gzip @@ -8758,15 +9050,15 @@ apt (0.7.0) experimental; urgency=low * translated package descriptions * task install support * automatic dependency removal (thanks to Daniel Burrows) - * merged support for the new dpkg "Breaks" field + * merged support for the new dpkg "Breaks" field (thanks to Ian Jackson) * handle network failures more gracefully on "update" * support for unattended-upgrades (via unattended-upgrades package) * added apt-transport-https method - * merged "install-recommends" branch (ABI break): + * merged "install-recommends" branch (ABI break): - new "--install-recommends" - - install new recommends on "upgrade" if --install-recommends is + - install new recommends on "upgrade" if --install-recommends is given - new "--fix-policy" option to install all packages with unmet important dependencies (useful with --install-recommends to @@ -8778,7 +9070,7 @@ apt (0.7.0) experimental; urgency=low -- Michael Vogt Fri, 12 Jan 2007 20:48:07 +0100 apt (0.6.46.4-0.1) unstable; urgency=emergency - + * NMU * Fix broken use of awk in apt-key that caused removal of the wrong keys from the keyring. Closes: #412572 @@ -8811,8 +9103,8 @@ apt (0.6.46.3-0.2) unstable; urgency=high * Non-maintainer upload with permission of Michael Vogt. * Fix FTBFS on most arches (regression from the fix of #400874) - -- Andreas Barth Tue, 5 Dec 2006 15:51:22 +0000 - + -- Andreas Barth Tue, 5 Dec 2006 15:51:22 +0000 + apt (0.6.46.3-0.1) unstable; urgency=high * Non-maintainer upload with permission of Michael Vogt. @@ -8820,14 +9112,14 @@ apt (0.6.46.3-0.1) unstable; urgency=high * Add apt-key update in postinst, so that debian-archive-keyring doesn't need to depend on apt >= 0.6. Closes: #401114 * Don't double-queue pdiff files. Closes: #401017 - + -- Andreas Barth Tue, 5 Dec 2006 10:34:56 +0000 apt (0.6.46.3) unstable; urgency=low * apt-pkg/deb/dpkgpm.cc: - make progress reporting robust against multiline error - messages + messages * Merged from Christian Perrier bzr branch: - ca.po: Updated to 514t @@ -8851,7 +9143,7 @@ apt (0.6.46.3) unstable; urgency=low apt (0.6.46.2) unstable; urgency=low * debian/control: - - depend on debian-archive-keyring to offer clean upgrade path + - depend on debian-archive-keyring to offer clean upgrade path (closes: #386800) * Merged from Christian Perrier bzr branch: - es.po: Updated to 514t. Closes: #391661 @@ -8865,13 +9157,13 @@ apt (0.6.46.2) unstable; urgency=low apt (0.6.46.1) unstable; urgency=low * methods/gzip.cc: - - deal with empty files + - deal with empty files * Applied patch from Daniel Schepler to make apt bin-NMU able. (closes: bug#359634) * rebuild against current g++ because of: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29289 (closes: #390189) - * fix broken i18n in the dpkg progress reporting, thanks to + * fix broken i18n in the dpkg progress reporting, thanks to Frans Pop and Steinar Gunderson. (closes: #389261) * Merged from Christian Perrier bzr branch: * fi.po: Updated to 514t. Closes: #390149 @@ -8879,7 +9171,7 @@ apt (0.6.46.1) unstable; urgency=low * vi.po: Updated to 514t. Closes: #388555 * make the internal buffer in pkgTagFile grow dynamically (closes: #388708) - + -- Michael Vogt Mon, 2 Oct 2006 20:42:20 +0200 apt (0.6.46) unstable; urgency=low @@ -8913,9 +9205,9 @@ apt (0.6.46) unstable; urgency=low * apt-pkg/tagfile.cc: - applied patch from Jeroen van Wolffelaar to make the tags caseinsensitive (closes: #384182) - - reverted MMap use in the tagfile because it does not work - across pipes (closes: #383487) - + - reverted MMap use in the tagfile because it does not work + across pipes (closes: #383487) + -- Michael Vogt Thu, 21 Sep 2006 10:25:03 +0200 apt (0.6.45) unstable; urgency=low @@ -8933,16 +9225,16 @@ apt (0.6.45) unstable; urgency=low - make progress reporting more robust against multiline error messages (first half of a fix for #374195) * doc/examples/configure-index: - - document Debug::pkgAcquire::Auth + - document Debug::pkgAcquire::Auth * methods/gpgv.cc: - - deal with gpg error "NODATA". Closes: #296103, Thanks to + - deal with gpg error "NODATA". Closes: #296103, Thanks to Luis Rodrigo Gallardo Cruz for the patch * apt-inst/contrib/extracttar.cc: - fix for string mangling, closes: #373864 * apt-pkg/acquire-item.cc: - check for bzip2 in /bin (closes: #377391) * apt-pkg/tagfile.cc: - - make it work on non-mapable files again, thanks + - make it work on non-mapable files again, thanks to James Troup for confirming the fix (closes: #376777) * Merged from Christian Perrier bzr branch: * ko.po: Updated to 512t. Closes: #378901 @@ -8967,7 +9259,7 @@ apt (0.6.44.2exp1) experimental; urgency=low * added support for i18n of the package descriptions * added support for aptitude like auto-install tracking (a HUGE - HUGE thanks to Daniel Burrows who made this possible) + HUGE thanks to Daniel Burrows who made this possible) * synced with the http://people.debian.org/~mvo/bzr/apt/debian-sid branch * build from http://people.debian.org/~mvo/bzr/apt/debian-experimental @@ -8980,7 +9272,7 @@ apt (0.6.44.2) unstable; urgency=low * apt-pkg/acquire-item.cc: - fix missing chmod() in the new acquire code (thanks to Bastian Blank, Closes: #367425) - * merged from + * merged from http://www.perrier.eu.org/debian/packages/d-i/level4/apt-main: * sk.po: Completed to 512t * eu.po: Completed to 512t @@ -9003,7 +9295,7 @@ apt (0.6.44.1) unstable; urgency=low * apt-pkg/acquire-item.cc: - fix reversed logic of the "Acquire::PDiffs" option - * merged from + * merged from http://www.perrier.eu.org/debian/packages/d-i/level4/apt-main: - po/LINGUAS: added "bg" Closes: #360262 - po/gl.po: Galician translation update. Closes: #366849 @@ -9018,13 +9310,13 @@ apt (0.6.44.1) unstable; urgency=low apt (0.6.44) unstable; urgency=low * apt-pkg/acquire.cc: don't show ETA if it is 0 or absurdely large - * apt-pkg/contrib/sha256.{cc,h},hashes.{cc,h}: support for sha256 + * apt-pkg/contrib/sha256.{cc,h},hashes.{cc,h}: support for sha256 (thanks to Anthony Towns) - * ftparchive/cachedb.{cc,h},writer.{cc,h}: optimizations + * ftparchive/cachedb.{cc,h},writer.{cc,h}: optimizations (thanks to Anthony Towns) * apt pdiff support from experimental merged * apt-pkg/deb/dpkgpm.cc: wording fixes (thanks to Matt Zimmerman) - * apt-pkg/deb/dpkgpm.cc: + * apt-pkg/deb/dpkgpm.cc: - wording fixes (thanks to Matt Zimmerman) - fix error in dpkg interaction (closes: #364513, thanks to Martin Dickopp) * apt-pkg/tagfile.{cc,h}: @@ -9099,7 +9391,7 @@ apt (0.6.43.2) unstable; urgency=low - gl.po: Completed to 511 strings Closes: #347729 - it.po: Yet another update Closes: #347435 * added debian-archive-keyring to the Recommends (closes: #347970) - * fixed message in apt-key to install debian-archive-keyring + * fixed message in apt-key to install debian-archive-keyring * typos fixed in apt-cache.8 (closes: #348348, #347349) * add patch to fix http download corruption problem (thanks to Petr Vandrovec, closes: #280844, #290694) @@ -9131,10 +9423,10 @@ apt (0.6.43.1) unstable; urgency=low apt (0.6.43) unstable; urgency=medium - * Merge bubulle@debian.org--2005/apt--main--0 up to patch-132: + * Merge bubulle@debian.org--2005/apt--main--0 up to patch-132: * zh_CN.po: Completed to 510 strings(Closes: #338267) * gl.po: Completed to 510 strings (Closes: #338356) - * added support for "/etc/apt/sources.list.d" directory + * added support for "/etc/apt/sources.list.d" directory (closes: #66325) * make pkgDirStream (a bit) more complete * fix bug in pkgCache::VerIterator::end() (thanks to Daniel Burrows) @@ -9146,7 +9438,7 @@ apt (0.6.43) unstable; urgency=medium * ABI change, library name changed (closes: #339147) * Fix GNU/kFreeBSD crash on non-existing server file (closes: #317718) * switch to libdb4.3 in build-depends - + -- Michael Vogt Tue, 29 Nov 2005 00:17:07 +0100 apt (0.6.42.3) unstable; urgency=low @@ -9155,7 +9447,7 @@ apt (0.6.42.3) unstable; urgency=low - patch-118: Russian translation update by Yuri Kozlov (closes: #335164) - patch-119: add update-po as a pre-req for binary (closes: #329910) - patch-121: Complete French translation - - patch-125: Fixed localization of y/n questions in German translation + - patch-125: Fixed localization of y/n questions in German translation (closes: #337078) - patch-126: Swedish translation update (closes: #337163) - patch-127: Complete Tagalog translation (closes: #337306) @@ -9166,7 +9458,7 @@ apt (0.6.42.3) unstable; urgency=low * added armeb to archtable (closes: #333599) * with --allow-unauthenticated use the old fallback behaviour for sources (closes: #335112) - + -- Michael Vogt Wed, 9 Nov 2005 07:22:31 +0100 apt (0.6.42.2) unstable; urgency=high @@ -9177,13 +9469,13 @@ apt (0.6.42.2) unstable; urgency=high * Priority high to get the AMD key into testing ASAP. -- Frans Pop Sun, 30 Oct 2005 21:29:11 +0100 - + apt (0.6.42.1) unstable; urgency=low * fix a incorrect example in the apt_preferences man page (thanks to Filipus Klutiero, closes: #282918) * apt-pkg/pkgrecords.cc: - - revert patch from last version, it causes trouble on alpha + - revert patch from last version, it causes trouble on alpha and ia64 (closes: #335102, #335103) * cmdline/apt-get.cc: - be extra careful in FindSrc (closes: #335213) @@ -9196,13 +9488,13 @@ apt (0.6.42) unstable; urgency=low - unmount the cdrom when apt failed to locate any package files * allow cdrom failures and fallback to other sources in that case (closes: #44135) - * better error text when dpkg-source fails + * better error text when dpkg-source fails * Merge bubulle@debian.org--2005/apt--main--0 up to patch-115: - patch-99: Added Galician translation - patch-100: Completed Danish translation (Closes: #325686) - patch-104: French translation completed - patch-109: Italian translation completed - - patch-112: Swedish translation update + - patch-112: Swedish translation update - patch-115: Basque translation completed (Closes: #333299) * applied french man-page update (thanks to Philippe Batailler) (closes: #316638, #327456) @@ -9216,9 +9508,9 @@ apt (0.6.42) unstable; urgency=low * apt-pkg/contrib/md5.cc: - fix a alignment problem on sparc64 that gives random bus errors (thanks to Fabbione for providing a test-case) - * init the default ScreenWidth to 79 columns by default + * init the default ScreenWidth to 79 columns by default (Closes: #324921) - * cmdline/apt-cdrom.cc: + * cmdline/apt-cdrom.cc: - fix some missing gettext() calls (closes: #334539) * doc/apt-cache.8.xml: fix typo (closes: #334714) @@ -9229,8 +9521,8 @@ apt (0.6.41) unstable; urgency=low * improved the support for "error" and "conffile" reporting from dpkg, added the format to README.progress-reporting * added README.progress-reporting to the apt-doc package - * improved the network timeout handling, if a index file from a - sources.list times out or EAI_AGAIN is returned from getaddrinfo, + * improved the network timeout handling, if a index file from a + sources.list times out or EAI_AGAIN is returned from getaddrinfo, don't try to get the other files from that entry * Support architecture-specific extra overrides (closes: #225947). Thanks to Anthony Towns for idea and @@ -9238,10 +9530,10 @@ apt (0.6.41) unstable; urgency=low * Javier Fernandez-Sanguino Pen~a: - Added a first version of an apt-secure.8 manpage, and modified apt-key and apt.end accordingly. Also added the 'update' - argument to apt-key which was previously not documented + argument to apt-key which was previously not documented (Closes: #322120) * Andreas Pakulat: - - added example apt-ftparchive.conf file to doc/examples + - added example apt-ftparchive.conf file to doc/examples (closes: #322483) * Fix a incorrect example in the man-page (closes: #282918) * Fix a bug for very long lines in the apt-cdrom code (closes: #280356) @@ -9250,14 +9542,14 @@ apt (0.6.41) unstable; urgency=low * Change pkgPolicy::Pin from private to protected to let subclasses access it too (closes: #321799) * add default constructor for PrvIterator (closes: #322267) - * Reread status configuration on debSystem::Initialize() + * Reread status configuration on debSystem::Initialize() (needed for apt-proxy, thanks to Otavio for this patch) - + -- Michael Vogt Mon, 5 Sep 2005 22:59:03 +0200 apt (0.6.40.1) unstable; urgency=low - * bugfix in the parsing code for the apt<->dpkg communication. apt + * bugfix in the parsing code for the apt<->dpkg communication. apt crashed when dpkg sends the same state more than once under certain conditions * 0.6.40 breaks the ABI but I accidentally didn't change the soname :/ @@ -9300,10 +9592,10 @@ apt (0.6.38) unstable; urgency=low - debian/rules: install all keyrings * Add the current Debian archive signing key (4F368D5D) to debian-archive.gpg - * make pinning on the "component" work again (using the section of the + * make pinning on the "component" work again (using the section of the archive, we don't use per-section Release files anymore with apt-0.6) (closes ubuntu #9935) - + -- Matt Zimmerman Sat, 25 Jun 2005 09:51:00 -0700 apt (0.6.37) breezy; urgency=low @@ -9336,7 +9628,7 @@ apt (0.6.36ubuntu1) breezy; urgency=low warning; - Lock database at start of DoInstall routine to avoid concurrent runs of install/remove and update commands (Closes: #194467) - - Fix warnings while compiling with GCC 4.0 compiler + - Fix warnings while compiling with GCC 4.0 compiler -- Michael Vogt Mon, 23 May 2005 11:57:53 +0200 @@ -9344,13 +9636,13 @@ apt (0.6.36) experimental; urgency=low * Merge apt--mvo--0: - apt-pkg/acquire-item.cc: - added "Acquire::BrokenProxy" that will force apt to always + added "Acquire::BrokenProxy" that will force apt to always re-get the Release.gpg file (for broken proxies) - debian/apt.cron.daily: MinAge is defaulting to 2 days now to prevent over-aggressive removal - apt-pkg/cdrom.cc: honor "Acquire::gpgv::Options" when verifying the signature (Ubuntu #8496) - + -- Michael Vogt Thu, 31 Mar 2005 20:37:11 +0200 apt (0.6.35) hoary; urgency=low @@ -9419,13 +9711,13 @@ apt (0.6.30) unstable; urgency=low * Merge michael.vogt@canonical.com--2004/apt--status-fd--0 - Support preserving dpkg status file descriptor, to support better integration with synaptic - + -- Matt Zimmerman Wed, 19 Jan 2005 00:26:01 -0800 apt (0.6.29) hoary; urgency=low * Merge apt--mvo--0 (0.6.27ubuntu4) - + -- Matt Zimmerman Tue, 28 Dec 2004 17:18:02 -0800 @@ -9464,7 +9756,7 @@ apt (0.6.27ubuntu2) hoary; urgency=low apt (0.6.27ubuntu1) hoary; urgency=low * chmod 755 /usr/bin/apt-key - * don't display a error when a apt-get update don't find a + * don't display a error when a apt-get update don't find a Packages.bz2/Sources.bz2 file -- Michael Vogt Mon, 13 Dec 2004 18:40:21 +0100 @@ -9739,7 +10031,7 @@ apt (0.5.31) unstable; urgency=low apt (0.5.30ubuntu2) hoary; urgency=low - * bzip2 is now "Suggested" and it will detect if bzip2 is installed + * bzip2 is now "Suggested" and it will detect if bzip2 is installed and only then trying to get Packages.bz2 -- Michael Vogt Fri, 19 Nov 2004 12:00:39 +0100 diff --git a/debian/compat b/debian/compat deleted file mode 100644 index f599e28..0000000 --- a/debian/compat +++ /dev/null @@ -1 +0,0 @@ -10 diff --git a/debian/control b/debian/control index a612101..0a8594f 100644 --- a/debian/control +++ b/debian/control @@ -8,25 +8,26 @@ Uploaders: Michael Vogt , Rules-Requires-Root: no Standards-Version: 4.1.1 Build-Depends: cmake (>= 3.4), - debhelper (>= 11.2~), + debhelper-compat (= 12), docbook-xml, docbook-xsl, dpkg-dev (>= 1.17.14), - g++ (>= 4:7), gettext (>= 0.12), googletest | libgtest-dev , libbz2-dev, libdb-dev, libgnutls28-dev (>= 3.4.6), + libgcrypt20-dev, liblz4-dev (>= 0.0~r126), liblzma-dev, - libseccomp-dev [amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x hppa powerpc powerpcspe ppc64 x32], + libseccomp-dev (>= 2.4.2) [amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x hppa powerpc powerpcspe ppc64 x32], libsystemd-dev [linux-any], libudev-dev [linux-any], libzstd-dev (>= 1.0), ninja-build, pkg-config, po4a (>= 0.34-2), + triehash, xsltproc, zlib1g-dev Build-Depends-Indep: doxygen, graphviz, w3m @@ -37,6 +38,7 @@ Package: apt Architecture: any Depends: adduser, gpgv | gpgv2 | gpgv1, + libapt-pkg6.0 (>= ${binary:Version}), ${apt:keyring}, ${misc:Depends}, ${shlibs:Depends} @@ -66,7 +68,7 @@ Description: commandline package manager * apt-config as an interface to the configuration settings * apt-key as an interface to manage authentication keys -Package: libapt-pkg5.0 +Package: libapt-pkg6.0 Architecture: any Multi-Arch: same Priority: optional @@ -92,19 +94,6 @@ Description: package management runtime library http(s), rsh as well as an interface to add more transports like tor+http(s) (apt-transport-tor). -Package: libapt-inst2.0 -Architecture: any -Multi-Arch: same -Priority: optional -Pre-Depends: ${misc:Pre-Depends} -Depends: ${misc:Depends}, ${shlibs:Depends} -Section: libs -Provides: libapt-inst (= ${binary:Version}) -Description: deb package format runtime library - This library provides methods to query and extract information - from deb packages. This includes the control data and the package - file content. - Package: apt-doc Architecture: all Priority: optional @@ -119,8 +108,7 @@ Architecture: any Multi-Arch: same Priority: optional Pre-Depends: ${misc:Pre-Depends} -Depends: libapt-inst (= ${binary:Version}), - libapt-pkg (= ${binary:Version}), +Depends: libapt-pkg (= ${binary:Version}), zlib1g-dev, ${misc:Depends} Section: libdevel @@ -143,7 +131,9 @@ Description: documentation for APT development Package: apt-utils Architecture: any -Depends: apt (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} +Depends: apt (= ${binary:Version}), + ${misc:Depends}, + ${shlibs:Depends} Description: package management related utility programs This package contains some less used commandline utilities related to package management with APT. @@ -156,6 +146,7 @@ Description: package management related utility programs Package: apt-transport-https Architecture: all +Multi-Arch: foreign Depends: apt (>= 1.5~alpha4), ${misc:Depends} Priority: optional Section: oldlibs diff --git a/debian/gbp.conf b/debian/gbp.conf index 058530b..a5e8858 100644 --- a/debian/gbp.conf +++ b/debian/gbp.conf @@ -3,7 +3,7 @@ ;preexport = ./prepare-release pre-export prebuild = ./prepare-release pre-build postbuild = ./prepare-release post-build -debian-branch = 1.8.y +debian-branch = master debian-tag = %(version)s export-dir = ../build-area sign-tags = True diff --git a/debian/libapt-inst2.0.install b/debian/libapt-inst2.0.install deleted file mode 100644 index a8ddd5e..0000000 --- a/debian/libapt-inst2.0.install +++ /dev/null @@ -1,2 +0,0 @@ -usr/lib/*/libapt-inst*.so.* -usr/share/locale/*/*/libapt-inst*.mo diff --git a/debian/libapt-inst2.0.symbols b/debian/libapt-inst2.0.symbols deleted file mode 100644 index 94130bc..0000000 --- a/debian/libapt-inst2.0.symbols +++ /dev/null @@ -1,69 +0,0 @@ -libapt-inst.so.2.0 libapt-inst2.0 #MINVER# -* Build-Depends-Package: libapt-pkg-dev - (c++)"ExtractTar::Done(bool)@APTINST_2.0" 0.8.0 - (c++)"ExtractTar::Done()@APTINST_2.0" 1.1~exp12 - (c++)"ExtractTar::Go(pkgDirStream&)@APTINST_2.0" 0.8.0 - (c++)"ExtractTar::StartGzip()@APTINST_2.0" 0.8.0 - (c++)"ExtractTar::ExtractTar(FileFd&, unsigned long long, std::__cxx11::basic_string, std::allocator >)@APTINST_2.0" 1.0.5 - (c++)"ExtractTar::~ExtractTar()@APTINST_2.0" 0.8.0 - (c++)"debDebFile::GotoMember(char const*)@APTINST_2.0" 0.8.0 - (c++)"debDebFile::CheckMember(char const*)@APTINST_2.0" 0.8.0 - (c++)"debDebFile::ControlExtract::DoItem(pkgDirStream::Item&, int&)@APTINST_2.0" 0.8.0 - (c++)"debDebFile::ExtractTarMember(pkgDirStream&, char const*)@APTINST_2.0" 0.9.15.4 - (c++)"debDebFile::ExtractArchive(pkgDirStream&)@APTINST_2.0" 0.8.0 - (c++)"debDebFile::MemControlExtract::TakeControl(void const*, unsigned long long)@APTINST_2.0" 1.0.5 - (c++)"debDebFile::MemControlExtract::Read(debDebFile&)@APTINST_2.0" 0.8.0 - (c++)"debDebFile::MemControlExtract::DoItem(pkgDirStream::Item&, int&)@APTINST_2.0" 0.8.0 - (c++)"debDebFile::MemControlExtract::Process(pkgDirStream::Item&, unsigned char const*, unsigned long long, unsigned long long)@APTINST_2.0" 1.0.5 - (c++)"debDebFile::debDebFile(FileFd&)@APTINST_2.0" 0.8.0 - (c++)"pkgExtract::FinishedFile(pkgDirStream::Item&, int)@APTINST_2.0" 0.8.0 - (c++)"pkgExtract::CheckDirReplace(std::__cxx11::basic_string, std::allocator >, unsigned int)@APTINST_2.0" 0.8.0 - (c++)"pkgExtract::HandleOverwrites(pkgFLCache::NodeIterator, bool)@APTINST_2.0" 0.8.0 - (c++)"pkgExtract::Fail(pkgDirStream::Item&, int)@APTINST_2.0" 0.8.0 - (c++)"pkgExtract::DoItem(pkgDirStream::Item&, int&)@APTINST_2.0" 0.8.0 - (c++)"pkgExtract::Aborted()@APTINST_2.0" 0.8.0 - (c++)"pkgExtract::Finished()@APTINST_2.0" 0.8.0 - (c++)"pkgExtract::pkgExtract(pkgFLCache&, pkgCache::VerIterator)@APTINST_2.0" 0.8.0 - (c++)"pkgFLCache::TreeLookup(unsigned int*, char const*, char const*, unsigned long, unsigned int*, bool)@APTINST_2.0" 0.8.0 - (c++)"pkgFLCache::AddConfFile(char const*, char const*, pkgFLCache::PkgIterator const&, unsigned char const*)@APTINST_2.0" 0.8.0 - (c++)"pkgFLCache::AddDiversion(pkgFLCache::PkgIterator const&, char const*, char const*)@APTINST_2.0" 0.8.0 - (c++)"pkgFLCache::BeginDiverLoad()@APTINST_2.0" 0.8.0 - (c++)"pkgFLCache::FinishDiverLoad()@APTINST_2.0" 0.8.0 - (c++)"pkgFLCache::GetPkg(char const*, char const*, bool)@APTINST_2.0" 0.8.0 - (c++)"pkgFLCache::Header::Header()@APTINST_2.0" 0.8.0 - (c++)"pkgFLCache::GetNode(char const*, char const*, unsigned int, bool, bool)@APTINST_2.0" 0.8.0 - (c++)"pkgFLCache::DropNode(unsigned int)@APTINST_2.0" 0.8.0 - (c++)"pkgFLCache::HashNode(pkgFLCache::NodeIterator const&)@APTINST_2.0" 0.8.0 - (c++)"pkgFLCache::PrintTree(unsigned int, unsigned long)@APTINST_2.0" 0.8.0 - (c++)"pkgFLCache::pkgFLCache(DynamicMMap&)@APTINST_2.0" 0.8.0 - (c++)"pkgDirStream::FinishedFile(pkgDirStream::Item&, int)@APTINST_2.0" 0.8.0 - (c++)"pkgDirStream::Fail(pkgDirStream::Item&, int)@APTINST_2.0" 0.8.0 - (c++)"pkgDirStream::DoItem(pkgDirStream::Item&, int&)@APTINST_2.0" 0.8.0 - (c++)"ARArchive::LoadHeaders()@APTINST_2.0" 0.8.0 - (c++)"ARArchive::ARArchive(FileFd&)@APTINST_2.0" 0.8.0 - (c++)"ARArchive::~ARArchive()@APTINST_2.0" 0.8.0 - (c++)"pkgFLCache::NodeIterator::RealPackage() const@APTINST_2.0" 0.8.0 - (c++)"pkgFLCache::Header::CheckSizes(pkgFLCache::Header&) const@APTINST_2.0" 0.8.0 - (c++)"ARArchive::FindMember(char const*) const@APTINST_2.0" 0.8.0 - (c++)"typeinfo for ExtractTar@APTINST_2.0" 0.8.0 - (c++)"typeinfo for pkgExtract@APTINST_2.0" 0.8.0 - (c++)"typeinfo for pkgDirStream@APTINST_2.0" 0.8.0 - (c++)"typeinfo for debDebFile::ControlExtract@APTINST_2.0" 0.8.0 - (c++)"typeinfo for debDebFile::MemControlExtract@APTINST_2.0" 0.8.0 - (c++)"typeinfo name for ExtractTar@APTINST_2.0" 0.8.0 - (c++)"typeinfo name for pkgExtract@APTINST_2.0" 0.8.0 - (c++)"typeinfo name for pkgDirStream@APTINST_2.0" 0.8.0 - (c++)"typeinfo name for debDebFile::ControlExtract@APTINST_2.0" 0.8.0 - (c++)"typeinfo name for debDebFile::MemControlExtract@APTINST_2.0" 0.8.0 - (c++)"vtable for ExtractTar@APTINST_2.0" 0.8.0 - (c++)"vtable for pkgExtract@APTINST_2.0" 0.8.0 - (c++)"vtable for pkgDirStream@APTINST_2.0" 0.8.0 - (c++)"vtable for debDebFile::ControlExtract@APTINST_2.0" 0.8.0 - (c++)"vtable for debDebFile::MemControlExtract@APTINST_2.0" 0.8.0 -### gcc artifacts - (c++|optional=std)"std::vector >::~vector()@APTINST_2.0" 0.8.12 - (c++|optional=std)"void std::__cxx11::basic_string, std::allocator >::_M_construct(char*, char*, std::forward_iterator_tag)@APTINST_2.0" 1.7.0~alpha3~ - (c++|optional=std)"void std::__cxx11::basic_string, std::allocator >::_M_construct(char const*, char const*, std::forward_iterator_tag)@APTINST_2.0" 1.7.0~alpha3~ -### symbol versioning - APTINST_2.0@APTINST_2.0 1.1~exp9 -### try to ignore std:: template instances diff --git a/debian/libapt-pkg-dev.install b/debian/libapt-pkg-dev.install index 42e7c34..eea2428 100644 --- a/debian/libapt-pkg-dev.install +++ b/debian/libapt-pkg-dev.install @@ -1,3 +1,3 @@ usr/include/apt-pkg/ -usr/lib/*/libapt-inst*.so usr/lib/*/libapt-pkg*.so +usr/lib/*/pkgconfig/apt-*.pc diff --git a/debian/libapt-pkg-doc.doc-base.dpkg-tech b/debian/libapt-pkg-doc.doc-base.dpkg-tech index 055e8e6..823a7cb 100644 --- a/debian/libapt-pkg-doc.doc-base.dpkg-tech +++ b/debian/libapt-pkg-doc.doc-base.dpkg-tech @@ -1,5 +1,5 @@ Document: libapt-pkg-doc-dpkg-tech -Title: APT's interpetation of DPkg Technical Specification +Title: APT's interpretation of DPkg Technical Specification Author: Jason Gunthorpe Abstract: The DPkg Technical Manual gives an overview of dpkg's external functions(as APT sees them) and describes how it views the world. diff --git a/debian/libapt-pkg5.0.install b/debian/libapt-pkg6.0.install similarity index 100% rename from debian/libapt-pkg5.0.install rename to debian/libapt-pkg6.0.install diff --git a/debian/libapt-pkg5.0.symbols b/debian/libapt-pkg6.0.symbols similarity index 50% rename from debian/libapt-pkg5.0.symbols rename to debian/libapt-pkg6.0.symbols index 882180c..a9ffaf8 100644 --- a/debian/libapt-pkg5.0.symbols +++ b/debian/libapt-pkg6.0.symbols @@ -1,1534 +1,1512 @@ -libapt-pkg.so.5.0 libapt-pkg5.0 #MINVER# +libapt-pkg.so.6.0 libapt-pkg6.0 #MINVER# * Build-Depends-Package: libapt-pkg-dev - TFRewritePackageOrder@APTPKG_5.0 0.8.0 - TFRewriteSourceOrder@APTPKG_5.0 0.8.0 - (c++)"FileExists(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"IdentCdrom(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >&, unsigned int)@APTPKG_5.0" 0.8.0 - (c++)"ListUpdate(pkgAcquireStatus&, pkgSourceList&, int)@APTPKG_5.0" 0.8.0 - (c++)"MountCdrom(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"ParseCWord(char const*&, std::__cxx11::basic_string, std::allocator >&)@APTPKG_5.0" 0.8.0 - (c++)"ReadPinDir(pkgPolicy&, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"RunScripts(char const*)@APTPKG_5.0" 0.8.0 - (c++)"SafeGetCWD[abi:cxx11]()@APTPKG_5.0" 0.8.0 - (c++)"QuoteString(std::__cxx11::basic_string, std::allocator > const&, char const*)@APTPKG_5.0" 0.8.0 - (c++)"ReadPinFile(pkgPolicy&, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"RegexChoice(RxChoiceList*, char const**, char const**)@APTPKG_5.0" 0.8.0 - (c++)"SetNonBlock(int, bool)@APTPKG_5.0" 0.8.0 - (c++)"flExtension(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"Base64Encode(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"ReadMessages(int, std::vector, std::allocator >, std::allocator, std::allocator > > >&)@APTPKG_5.0" 0.8.0 - (c++)"SetCloseExec(int, bool)@APTPKG_5.0" 0.8.0 - (c++)"StringToBool(std::__cxx11::basic_string, std::allocator > const&, int)@APTPKG_5.0" 0.8.0 - (c++)"UnmountCdrom(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"_GetErrorObj()@APTPKG_5.0" 0.8.0 - (c++)"Base256ToNum(char const*, unsigned long long&, unsigned int)@APTPKG_5.0" 1.0.5 - (c++)"pkgFixBroken(pkgDepCache&)@APTPKG_5.0" 0.8.0 - (c++)"DeQuoteString(__gnu_cxx::__normal_iterator, std::allocator > > const&, __gnu_cxx::__normal_iterator, std::allocator > > const&)@APTPKG_5.0" 0.8.0 - (c++)"DeQuoteString(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"OutputInDepth[abi:cxx11](unsigned long, char const*)@APTPKG_5.0" 0.8.0 - (c++)"ReadConfigDir(Configuration&, std::__cxx11::basic_string, std::allocator > const&, bool const&, unsigned int const&)@APTPKG_5.0" 0.8.0 - (c++)"URItoFileName(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"UTF8ToCodeset(char const*, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator >*)@APTPKG_5.0" 0.8.0 - (c++)"pkgInitConfig(Configuration&)@APTPKG_5.0" 0.8.0 - (c++)"pkgInitSystem(Configuration&, pkgSystem*&)@APTPKG_5.0" 0.8.0 - (c++)"safe_snprintf(char*, char*, char const*, ...)@APTPKG_5.0" 0.8.0 - (c++)"stringcasecmp(__gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, char const*, char const*)@APTPKG_5.0" 0.8.0 - (c++)"stringcasecmp(__gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >)@APTPKG_5.0" 0.8.0 - (c++)"stringcasecmp(char const*, char const*, char const*, char const*)@APTPKG_5.0" 0.8.0 - (c++)"tolower_ascii(int)@APTPKG_5.0" 0.8.0 - (c++)"ParseQuoteWord(char const*&, std::__cxx11::basic_string, std::allocator >&)@APTPKG_5.0" 0.8.0 - (c++)"ReadConfigFile(Configuration&, std::__cxx11::basic_string, std::allocator > const&, bool const&, unsigned int const&)@APTPKG_5.0" 0.8.0 - (c++)"TokSplitString(char, char*, char**, unsigned long)@APTPKG_5.0" 0.8.0 - (c++)"maybe_add_auth(URI&, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"pkgApplyStatus(pkgDepCache&)@APTPKG_5.0" 0.8.0 - (c++)"CheckDomainList(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"CreateDirectory(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"DirectoryExists(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"VectorizeString(std::__cxx11::basic_string, std::allocator > const&, char const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgPrioSortList(pkgCache&, pkgCache::Version**)@APTPKG_5.0" 0.8.0 - (c++)"pkgMakeStatusCache(pkgSourceList&, OpProgress&, MMap**, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgMinimizeUpgrade(pkgDepCache&)@APTPKG_5.0" 0.8.0 - (c++)"pkgAllUpgrade(pkgDepCache&)@APTPKG_5.0" 0.8.0 - (c++)"pkgDistUpgrade(pkgDepCache&)@APTPKG_5.0" 0.8.0 - (c++)"GetListOfFilesInDir(std::__cxx11::basic_string, std::allocator > const&, std::vector, std::allocator >, std::allocator, std::allocator > > > const&, bool const&)@APTPKG_5.0" 0.8.0 - (c++)"GetListOfFilesInDir(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, bool const&, bool const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgMakeOnlyStatusCache(OpProgress&, DynamicMMap**)@APTPKG_5.0" 0.8.0 - (c++)"WaitFd(int, bool, unsigned long)@APTPKG_5.0" 0.8.0 - (c++)"GetLock(std::__cxx11::basic_string, std::allocator >, bool)@APTPKG_5.0" 0.8.0 - (c++)"Hex2Num(std::__cxx11::basic_string, std::allocator > const&, unsigned char*, unsigned int)@APTPKG_5.0" 0.8.0 - (c++)"CopyFile(FileFd&, FileFd&)@APTPKG_5.0" 0.8.0 - (c++)"ExecFork()@APTPKG_5.0" 0.8.0 - (c++)"ExecWait(int, char const*, bool)@APTPKG_5.0" 0.8.0 - (c++)"StrToNum(char const*, unsigned long&, unsigned int, unsigned int)@APTPKG_5.0" 0.8.0 - (c++)"SubstVar(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"SubstVar(std::__cxx11::basic_string, std::allocator >, SubstVar const*)@APTPKG_5.0" 0.8.0 - (c++)"flNoLink(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"flNotDir(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"ioprintf(std::basic_ostream >&, char const*, ...)@APTPKG_5.0" 0.8.0 - (c++)"IsMounted(std::__cxx11::basic_string, std::allocator >&)@APTPKG_5.0" 0.8.0 - (c++)"LookupTag(std::__cxx11::basic_string, std::allocator > const&, char const*, char const*)@APTPKG_5.0" 0.8.0 - (c++)"SizeToStr[abi:cxx11](double)@APTPKG_5.0" 0.8.0 - (c++)"TFRewrite(_IO_FILE*, pkgTagSection const&, char const**, TFRewriteData*)@APTPKG_5.0" 0.8.0 - (c++)"TimeToStr[abi:cxx11](unsigned long)@APTPKG_5.0" 0.8.0 - (c++)"_strstrip(char*)@APTPKG_5.0" 0.8.0 - (c++)"flCombine(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"flNotFile(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"stringcmp(__gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, char const*, char const*)@APTPKG_5.0" 0.8.0 - (c++)"stringcmp(__gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >)@APTPKG_5.0" 0.8.0 - (c++)"stringcmp(char const*, char const*, char const*, char const*)@APTPKG_5.0" 0.8.0 - (c++)"strprintf(std::__cxx11::basic_string, std::allocator >&, char const*, ...)@APTPKG_5.0" 0.8.0 - (c++)"HashString::SupportedHashes()@APTPKG_5.0" 0.8.0 - (c++)"HashString::_SupportedHashes@APTPKG_5.0" 0.8.0 - (c++)"HashString::HashString(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"HashString::HashString(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"HashString::HashString()@APTPKG_5.0" 0.8.0 - (c++)"OpProgress::CheckChange(float)@APTPKG_5.0" 0.8.0 - (c++)"OpProgress::OpProgress()@APTPKG_5.0" 0.8.0 - (c++)"SourceCopy::~SourceCopy()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqFile::~pkgAcqFile()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::WorkerStep(pkgAcquire::Worker*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::FetchNeeded()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::TotalNeeded()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::MethodConfig::MethodConfig()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::PartialPresent()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Add(pkgAcquire::Item*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Add(pkgAcquire::Worker*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Run(int)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Bump()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Item::Finished()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Item::~Item()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Clean(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Queue::Bump()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Queue::Cycle()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Queue::Dequeue(pkgAcquire::Item*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Queue::Enqueue(pkgAcquire::ItemDesc&)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Queue::Startup()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Queue::FindItem(std::__cxx11::basic_string, std::allocator >, pkgAcquire::Worker*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Queue::ItemDone(pkgAcquire::Queue::QItem*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Queue::Shutdown(bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Queue::~Queue()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Remove(pkgAcquire::Item*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Remove(pkgAcquire::Worker*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::RunFds(fd_set*, fd_set*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::RunFdsSane(fd_set*, fd_set*)@APTPKG_5.0" 1.1.1 - (c++)"pkgAcquire::SetFds(int&, fd_set*, fd_set*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::UriEnd()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Worker::OutFdReady()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Worker::MediaChange(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Worker::RunMessages()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Worker::Capabilities(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Worker::ReadMessages()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Worker::MethodFailure()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Worker::SendConfiguration()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Worker::Pulse()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Worker::Start()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Worker::ItemDone()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Worker::Construct()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Worker::InFdReady()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Worker::QueueItem(pkgAcquire::Queue::QItem*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Worker::Worker(pkgAcquire::MethodConfig*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Worker::Worker(pkgAcquire::Queue*, pkgAcquire::MethodConfig*, pkgAcquireStatus*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Worker::~Worker()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Dequeue(pkgAcquire::Item*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Enqueue(pkgAcquire::ItemDesc&)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::Shutdown()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::UriBegin()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::GetConfig(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::QueueName(std::__cxx11::basic_string, std::allocator >, pkgAcquire::MethodConfig const*&)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::pkgAcquire(pkgAcquireStatus*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::pkgAcquire()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquire::~pkgAcquire()@APTPKG_5.0" 0.8.0 - (c++)"pkgRecords::Lookup(pkgCache::VerFileIterator const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgRecords::Lookup(pkgCache::DescFileIterator const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgRecords::pkgRecords(pkgCache&)@APTPKG_5.0" 0.8.0 - (c++)"pkgRecords::~pkgRecords()@APTPKG_5.0" 0.8.0 - (c++)"pkgTagFile::Step(pkgTagSection&)@APTPKG_5.0" 0.8.0 - (c++)"pkgTagFile::~pkgTagFile()@APTPKG_5.0" 0.8.0 - (c++)"CommandLine::DispatchArg(CommandLine::Dispatch*, bool)@APTPKG_5.0" 0.8.0 - (c++)"CommandLine::SaveInConfig(unsigned int const&, char const* const*)@APTPKG_5.0" 0.8.0 - (c++)"CommandLine::Parse(int, char const**)@APTPKG_5.0" 0.8.0 - (c++)"CommandLine::HandleOpt(int&, int, char const**, char const*&, CommandLine::Args*, bool)@APTPKG_5.0" 0.8.0 - (c++)"CommandLine::CommandLine(CommandLine::Args*, Configuration*)@APTPKG_5.0" 0.8.0 - (c++)"CommandLine::~CommandLine()@APTPKG_5.0" 0.8.0 - (c++)"DynamicMMap::WriteString(char const*, unsigned long)@APTPKG_5.0" 0.8.0 - (c++)"DynamicMMap::Grow()@APTPKG_5.0" 0.8.0 - (c++)"DynamicMMap::Allocate(unsigned long)@APTPKG_5.0" 0.8.0 - (c++)"DynamicMMap::DynamicMMap(FileFd&, unsigned long, unsigned long const&, unsigned long const&, unsigned long const&)@APTPKG_5.0" 0.8.0 - (c++)"DynamicMMap::DynamicMMap(unsigned long, unsigned long const&, unsigned long const&, unsigned long const&)@APTPKG_5.0" 0.8.0 - (c++)"DynamicMMap::~DynamicMMap()@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::DumpErrors(std::basic_ostream >&, GlobalError::MsgType const&, bool const&)@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::PopMessage(std::__cxx11::basic_string, std::allocator >&)@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::InsertErrno(GlobalError::MsgType const&, char const*, char const*, ...)@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::PushToStack()@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::RevertToStack()@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::MergeWithStack()@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::Debug(char const*, ...)@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::Errno(char const*, char const*, ...)@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::Error(char const*, ...)@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::Fatal(char const*, ...)@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::DebugE(char const*, char const*, ...)@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::FatalE(char const*, char const*, ...)@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::Insert(GlobalError::MsgType const&, char const*, ...)@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::Notice(char const*, ...)@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::Discard()@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::NoticeE(char const*, char const*, ...)@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::Warning(char const*, ...)@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::WarningE(char const*, char const*, ...)@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::GlobalError()@APTPKG_5.0" 0.8.0 - (c++)"PackageCopy::~PackageCopy()@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::IsDeleteOk(pkgCache::PkgIterator const&, bool, unsigned long, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::MarkDelete(pkgCache::PkgIterator const&, bool, unsigned long, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::StateCache::StripEpoch(char const*)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::StateCache::Update(pkgCache::PkgIterator, pkgCache&)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::ActionGroup::release()@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::ActionGroup::ActionGroup(pkgDepCache&)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::ActionGroup::~ActionGroup()@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::IsInstallOk(pkgCache::PkgIterator const&, bool, unsigned long, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::MarkInstall(pkgCache::PkgIterator const&, bool, unsigned long, bool, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::SetReInstall(pkgCache::PkgIterator const&, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::BuildGroupOrs(pkgCache::VerIterator const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::readStateFile(OpProgress*)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::GetRootSetFunc()@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::writeStateFile(OpProgress*, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::MarkFollowsSuggests()@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::MarkFollowsRecommends()@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::Init(OpProgress*)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::Policy::GetCandidateVer(pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::Update(pkgCache::DepIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::Update(OpProgress*)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::Update(pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::MarkAuto(pkgCache::PkgIterator const&, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::MarkKeep(pkgCache::PkgIterator const&, bool, bool, unsigned long)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::MarkRequired(pkgDepCache::InRootSetFunc&)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::Sweep()@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::pkgDepCache(pkgCache*, pkgDepCache::Policy*)@APTPKG_5.0" 0.8.0 - (c++)"pkgDepCache::~pkgDepCache()@APTPKG_5.0" 0.8.0 - (c++)"pkgSimulate::Remove(pkgCache::PkgIterator, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgSimulate::Install(pkgCache::PkgIterator, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"pkgSimulate::Configure(pkgCache::PkgIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgSimulate::pkgSimulate(pkgDepCache*)@APTPKG_5.0" 0.8.0 - (c++)"pkgSimulate::~pkgSimulate()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqMethod::FetchResult::TakeHashes(Hashes&)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqMethod::FetchResult::FetchResult()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqMethod::Configuration(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqMethod::Log(char const*, ...)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqMethod::Run(bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqMethod::Fail(std::__cxx11::basic_string, std::allocator >, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqMethod::Fail(bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqMethod::Status(char const*, ...)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqMethod::URIDone(pkgAcqMethod::FetchResult&, pkgAcqMethod::FetchResult*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqMethod::Redirect(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqMethod::URIStart(pkgAcqMethod::FetchResult&)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqMethod::MediaFail(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqMethod::pkgAcqMethod(char const*, unsigned long)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqMethod::~pkgAcqMethod()@APTPKG_5.0" 0.8.0 - (c++)"pkgCacheFile::BuildCaches(OpProgress*, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgCacheFile::BuildPolicy(OpProgress*)@APTPKG_5.0" 0.8.0 - (c++)"pkgCacheFile::BuildDepCache(OpProgress*)@APTPKG_5.0" 0.8.0 - (c++)"pkgCacheFile::BuildSourceList(OpProgress*)@APTPKG_5.0" 0.8.0 - (c++)"pkgCacheFile::Open(OpProgress*, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgCacheFile::Close()@APTPKG_5.0" 0.8.0 - (c++)"pkgCacheFile::pkgCacheFile()@APTPKG_5.0" 0.8.0 - (c++)"pkgCacheFile::~pkgCacheFile()@APTPKG_5.0" 0.8.0 - (c++)"pkgIndexFile::LanguageCode[abi:cxx11]()@APTPKG_5.0" 0.8.0 - (c++)"pkgIndexFile::CheckLanguageCode(char const*)@APTPKG_5.0" 0.8.0 - (c++)"pkgIndexFile::TranslationsAvailable()@APTPKG_5.0" 0.8.0 - (c++)"pkgIndexFile::Type::GlobalList@APTPKG_5.0" 0.8.0 - (c++)"pkgIndexFile::Type::GlobalListLen@APTPKG_5.0" 0.8.0 - (c++)"pkgIndexFile::Type::GetType(char const*)@APTPKG_5.0" 0.8.0 - (c++)"pkgIndexFile::Type::Type()@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::VisitRDeps(bool (pkgOrderList::*)(pkgCache::DepIterator), pkgCache::PkgIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::OrderUnpack(std::__cxx11::basic_string, std::allocator >*)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::DepConfigure(pkgCache::DepIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::DepUnPackDep(pkgCache::DepIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::DepUnPackPre(pkgCache::DepIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::DepUnPackCrit(pkgCache::DepIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::DepUnPackPreD(pkgCache::DepIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::OrderCritical()@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::VisitProvides(pkgCache::DepIterator, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::OrderConfigure()@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::VisitRProvides(bool (pkgOrderList::*)(pkgCache::DepIterator), pkgCache::VerIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::DoRun()@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::Score(pkgCache::PkgIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::AddLoop(pkgCache::DepIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::FileCmp(pkgCache::PkgIterator, pkgCache::PkgIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::CheckDep(pkgCache::DepIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::DepRemove(pkgCache::DepIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::IsMissing(pkgCache::PkgIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::VisitDeps(bool (pkgOrderList::*)(pkgCache::DepIterator), pkgCache::PkgIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::WipeFlags(unsigned long)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::pkgOrderList(pkgDepCache*)@APTPKG_5.0" 0.8.0 - (c++)"pkgOrderList::~pkgOrderList()@APTPKG_5.0" 0.8.0 - (c++)"Configuration::MatchAgainstConfig::MatchAgainstConfig(char const*)@APTPKG_5.0" 0.8.0 - (c++)"Configuration::MatchAgainstConfig::~MatchAgainstConfig()@APTPKG_5.0" 0.8.0 - (c++)"Configuration::Set(char const*, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"Configuration::Set(char const*, int const&)@APTPKG_5.0" 0.8.0 - (c++)"Configuration::Dump(std::basic_ostream >&)@APTPKG_5.0" 0.8.0 - (c++)"Configuration::Clear(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"Configuration::Clear(std::__cxx11::basic_string, std::allocator > const&, int const&)@APTPKG_5.0" 0.8.0 - (c++)"Configuration::Clear(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"Configuration::CndSet(char const*, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"Configuration::Lookup(char const*, bool const&)@APTPKG_5.0" 0.8.0 - (c++)"Configuration::Lookup(Configuration::Item*, char const*, unsigned long const&, bool const&)@APTPKG_5.0" 0.8.0 - (c++)"Configuration::Configuration(Configuration::Item const*)@APTPKG_5.0" 0.8.0 - (c++)"Configuration::Configuration()@APTPKG_5.0" 0.8.0 - (c++)"Configuration::~Configuration()@APTPKG_5.0" 0.8.0 - (c++)"debListParser::ParseDepends(char const*, char const*, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >&, unsigned int&, bool const&, bool const&)@APTPKG_5.0" 0.8.0 - (c++)"debListParser::ConvertRelation(char const*, unsigned int&)@APTPKG_5.0" 0.8.0 - (c++)"debListParser::GetPrio(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqArchive::Finished()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqArchive::QueueNext()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqArchive::pkgAcqArchive(pkgAcquire*, pkgSourceList*, pkgRecords*, pkgCache::VerIterator const&, std::__cxx11::basic_string, std::allocator >&)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcqArchive::~pkgAcqArchive()@APTPKG_5.0" 0.8.0 - (c++)"pkgSourceList::Type::GlobalList@APTPKG_5.0" 0.8.0 - (c++)"pkgSourceList::Type::GlobalListLen@APTPKG_5.0" 0.8.0 - (c++)"pkgSourceList::Type::GetType(char const*)@APTPKG_5.0" 0.8.0 - (c++)"pkgSourceList::ReadMainList()@APTPKG_5.0" 0.8.0 - (c++)"pkgSourceList::Reset()@APTPKG_5.0" 0.8.0 - (c++)"pkgSourceList::pkgSourceList()@APTPKG_5.0" 0.8.0 - (c++)"pkgSourceList::~pkgSourceList()@APTPKG_5.0" 0.8.0 - (c++)"pkgSrcRecords::Find(char const*, bool const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgSrcRecords::Parser::BuildDepType(unsigned char const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgSrcRecords::Restart()@APTPKG_5.0" 0.8.0 - (c++)"pkgSrcRecords::pkgSrcRecords(pkgSourceList&)@APTPKG_5.0" 0.8.0 - (c++)"pkgSrcRecords::~pkgSrcRecords()@APTPKG_5.0" 0.8.0 - (c++)"pkgTagSection::TrimRecord(bool, char const*&)@APTPKG_5.0" 0.8.0 - (c++)"pkgTagSection::Trim()@APTPKG_5.0" 0.8.0 - (c++)"OpTextProgress::Done()@APTPKG_5.0" 0.8.0 - (c++)"OpTextProgress::Write(char const*)@APTPKG_5.0" 0.8.0 - (c++)"OpTextProgress::Update()@APTPKG_5.0" 0.8.0 - (c++)"OpTextProgress::OpTextProgress(Configuration&)@APTPKG_5.0" 0.8.0 - (c++)"pkgVersionMatch::ExpressionMatches(char const*, char const*)@APTPKG_5.0" 0.8.0 - (c++)"pkgVersionMatch::ExpressionMatches(std::__cxx11::basic_string, std::allocator > const&, char const*)@APTPKG_5.0" 0.8.0 - (c++)"pkgVersionMatch::Find(pkgCache::PkgIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgVersionMatch::MatchVer(char const*, std::__cxx11::basic_string, std::allocator >, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgVersionMatch::FileMatch(pkgCache::PkgFileIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgVersionMatch::pkgVersionMatch(std::__cxx11::basic_string, std::allocator >, pkgVersionMatch::MatchType)@APTPKG_5.0" 0.8.0 - (c++)"TranslationsCopy::CopyTranslations(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&, pkgCdromStatus*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquireStatus::Stop()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquireStatus::Pulse(pkgAcquire*)@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquireStatus::Start()@APTPKG_5.0" 0.8.0 - (c++)"pkgAcquireStatus::pkgAcquireStatus()@APTPKG_5.0" 0.8.0 - (c++)"pkgArchiveCleaner::Go(std::__cxx11::basic_string, std::allocator >, pkgCache&)@APTPKG_5.0" 0.8.0 - (c++)"pkgCacheGenerator::MakeStatusCache(pkgSourceList&, OpProgress*, MMap**, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgCacheGenerator::MakeOnlyStatusCache(OpProgress*, DynamicMMap**)@APTPKG_5.0" 0.8.0 - (c++)"pkgPackageManager::FixMissing()@APTPKG_5.0" 0.8.0 - (c++)"pkgPackageManager::EarlyRemove(pkgCache::PkgIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgPackageManager::GetArchives(pkgAcquire*, pkgSourceList*, pkgRecords*)@APTPKG_5.0" 0.8.0 - (c++)"pkgPackageManager::SmartRemove(pkgCache::PkgIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgPackageManager::SmartUnPack(pkgCache::PkgIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgPackageManager::ConfigureAll()@APTPKG_5.0" 0.8.0 - (c++)"pkgPackageManager::ImmediateAdd(pkgCache::PkgIterator, bool, unsigned int const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgPackageManager::OrderInstall()@APTPKG_5.0" 0.8.0 - (c++)"pkgPackageManager::DepAlwaysTrue(pkgCache::DepIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgPackageManager::CheckRConflicts(pkgCache::PkgIterator, pkgCache::DepIterator, char const*)@APTPKG_5.0" 0.8.0 - (c++)"pkgPackageManager::CreateOrderList()@APTPKG_5.0" 0.8.0 - (c++)"pkgPackageManager::DoInstallPostFork(int)@APTPKG_5.0" 0.8.0 - (c++)"pkgPackageManager::DoInstall(int)@APTPKG_5.0" 0.8.0 - (c++)"pkgPackageManager::pkgPackageManager(pkgDepCache*)@APTPKG_5.0" 0.8.0 - (c++)"pkgPackageManager::~pkgPackageManager()@APTPKG_5.0" 0.8.0 - (c++)"pkgProblemResolver::InstallProtect()@APTPKG_5.0" 0.8.0 - (c++)"pkgProblemResolver::pkgProblemResolver(pkgDepCache*)@APTPKG_5.0" 0.8.0 - (c++)"pkgProblemResolver::~pkgProblemResolver()@APTPKG_5.0" 0.8.0 - (c++)"debVersioningSystem::CmpFragment(char const*, char const*, char const*, char const*)@APTPKG_5.0" 0.8.0 - (c++)"debVersioningSystem::DoCmpVersion(char const*, char const*, char const*, char const*)@APTPKG_5.0" 0.8.0 - (c++)"debVersioningSystem::UpstreamVersion[abi:cxx11](char const*)@APTPKG_5.0" 0.8.0 - (c++)"debVersioningSystem::CheckDep(char const*, int, char const*)@APTPKG_5.0" 0.8.0 - (c++)"debVersioningSystem::debVersioningSystem()@APTPKG_5.0" 0.8.0 - (c++)"pkgUdevCdromDevices::Scan()@APTPKG_5.0" 0.8.0 - (c++)"pkgUdevCdromDevices::Dlopen()@APTPKG_5.0" 0.8.0 - (c++)"pkgUdevCdromDevices::pkgUdevCdromDevices()@APTPKG_5.0" 0.8.0 - (c++)"pkgUdevCdromDevices::~pkgUdevCdromDevices()@APTPKG_5.0" 0.8.0 - (c++)"pkgVersioningSystem::GlobalList@APTPKG_5.0" 0.8.0 - (c++)"pkgVersioningSystem::GlobalListLen@APTPKG_5.0" 0.8.0 - (c++)"pkgVersioningSystem::GetVS(char const*)@APTPKG_5.0" 0.8.0 - (c++)"pkgVersioningSystem::pkgVersioningSystem()@APTPKG_5.0" 0.8.0 - (c++)"APT::CacheFilter::PackageNameMatchesRegEx::PackageNameMatchesRegEx(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"APT::CacheFilter::PackageNameMatchesRegEx::~PackageNameMatchesRegEx()@APTPKG_5.0" 0.8.0 - (c++)"APT::CacheFilter::PackageNameMatchesRegEx::operator()(pkgCache::GrpIterator const&)@APTPKG_5.0" 0.8.0 - (c++)"APT::CacheFilter::PackageNameMatchesRegEx::operator()(pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.0 - (c++)"APT::Configuration::checkArchitecture(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"APT::CacheSetHelper::canNotFindPkgName(pkgCacheFile&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"APT::CacheSetHelper::canNotFindNewestVer(pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.0 - (c++)"APT::CacheSetHelper::canNotFindCandidateVer(pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.0 - (c++)"APT::CacheSetHelper::canNotFindInstalledVer(pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.0 - (c++)"APT::CacheSetHelper::~CacheSetHelper()@APTPKG_5.0" 0.8.0 - (c++)"URI::NoUserPassword(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"URI::CopyFrom(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"URI::SiteOnly(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"URI::operator std::__cxx11::basic_string, std::allocator >()@APTPKG_5.0" 0.8.0 - (c++)"MMap::Map(FileFd&)@APTPKG_5.0" 0.8.0 - (c++)"MMap::Sync(unsigned long, unsigned long)@APTPKG_5.0" 0.8.0 - (c++)"MMap::Sync()@APTPKG_5.0" 0.8.0 - (c++)"MMap::Close(bool)@APTPKG_5.0" 0.8.0 - (c++)"MMap::MMap(FileFd&, unsigned long)@APTPKG_5.0" 0.8.0 - (c++)"MMap::MMap(unsigned long)@APTPKG_5.0" 0.8.0 - (c++)"MMap::~MMap()@APTPKG_5.0" 0.8.0 - (c++)"FileFd::Size()@APTPKG_5.0" 0.8.0 - (c++)"FileFd::Sync()@APTPKG_5.0" 0.8.0 - (c++)"FileFd::Tell()@APTPKG_5.0" 0.8.0 - (c++)"FileFd::Close()@APTPKG_5.0" 0.8.0 - (c++)"FileFd::~FileFd()@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::CompTypeDeb(unsigned char)@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::DepIterator::GlobOr(pkgCache::DepIterator&, pkgCache::DepIterator&)@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::DepIterator::operator++()@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::GrpIterator::operator++()@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::PkgIterator::operator++()@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::PkgFileIterator::IsOk()@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::PkgFileIterator::RelStr[abi:cxx11]()@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::ReMap(bool const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::Header::Header()@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::DepType(unsigned char)@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::FindGrp(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::FindPkg(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::FindPkg(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::CompType(unsigned char)@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::Priority(unsigned char)@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::pkgCache(MMap*, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::~pkgCache()@APTPKG_5.0" 0.8.0 - (c++)"pkgCdrom::DropRepeats(std::vector, std::allocator >, std::allocator, std::allocator > > >&, char const*)@APTPKG_5.0" 0.8.0 - (c++)"pkgCdrom::FindPackages(std::__cxx11::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&, std::vector, std::allocator >, std::allocator, std::allocator > > >&, std::vector, std::allocator >, std::allocator, std::allocator > > >&, std::vector, std::allocator >, std::allocator, std::allocator > > >&, std::__cxx11::basic_string, std::allocator >&, pkgCdromStatus*, unsigned int)@APTPKG_5.0" 0.8.0 - (c++)"pkgCdrom::WriteDatabase(Configuration&)@APTPKG_5.0" 0.8.0 - (c++)"pkgCdrom::DropBinaryArch(std::vector, std::allocator >, std::allocator, std::allocator > > >&)@APTPKG_5.0" 0.8.0 - (c++)"pkgCdrom::WriteSourceList(std::__cxx11::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgCdrom::ReduceSourcelist(std::__cxx11::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&)@APTPKG_5.0" 0.8.0 - (c++)"pkgCdrom::Add(pkgCdromStatus*)@APTPKG_5.0" 0.8.0 - (c++)"pkgCdrom::Ident(std::__cxx11::basic_string, std::allocator >&, pkgCdromStatus*)@APTPKG_5.0" 0.8.0 - (c++)"pkgCdrom::Score(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"IndexCopy::CopyPackages(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&, pkgCdromStatus*)@APTPKG_5.0" 0.8.0 - (c++)"IndexCopy::ReconstructChop(unsigned long&, std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"IndexCopy::ReconstructPrefix(std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"IndexCopy::ConvertToSourceList(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >&)@APTPKG_5.0" 0.8.0 - (c++)"IndexCopy::ChopDirs(std::__cxx11::basic_string, std::allocator >, unsigned int)@APTPKG_5.0" 0.8.0 - (c++)"IndexCopy::GrabFirst(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >&, unsigned int)@APTPKG_5.0" 0.8.0 - (c++)"SigVerify::CopyAndVerify(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&, std::vector, std::allocator >, std::allocator, std::allocator > > >, std::vector, std::allocator >, std::allocator, std::allocator > > >)@APTPKG_5.0" 0.8.0 - (c++)"SigVerify::RunGPGV(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, int const&, int*)@APTPKG_5.0" 0.8.0 - (c++)"debSystem::Initialize(Configuration&)@APTPKG_5.0" 0.8.0 - (c++)"debSystem::AddStatusFiles(std::vector >&)@APTPKG_5.0" 0.8.0 - (c++)"debSystem::ArchiveSupported(char const*)@APTPKG_5.0" 0.8.0 - (c++)"debSystem::Lock()@APTPKG_5.0" 0.8.0 - (c++)"debSystem::Score(Configuration const&)@APTPKG_5.0" 0.8.0 - (c++)"debSystem::UnLock(bool)@APTPKG_5.0" 0.8.0 - (c++)"debSystem::debSystem()@APTPKG_5.0" 0.8.0 - (c++)"debSystem::~debSystem()@APTPKG_5.0" 0.8.0 - (c++)"pkgDPkgPM::SendV2Pkgs(_IO_FILE*)@APTPKG_5.0" 0.8.0 - (c++)"pkgDPkgPM::DoTerminalPty(int)@APTPKG_5.0" 0.8.0 - (c++)"pkgDPkgPM::WriteHistoryTag(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"pkgDPkgPM::WriteApportReport(char const*, char const*)@APTPKG_5.0" 0.8.0 - (c++)"pkgDPkgPM::RunScriptsWithPkgs(char const*)@APTPKG_5.0" 0.8.0 - (c++)"pkgDPkgPM::Go(int)@APTPKG_5.0" 0.8.0 - (c++)"pkgDPkgPM::Reset()@APTPKG_5.0" 0.8.0 - (c++)"pkgDPkgPM::Remove(pkgCache::PkgIterator, bool)@APTPKG_5.0" 0.8.0 - (c++)"pkgDPkgPM::DoStdin(int)@APTPKG_5.0" 0.8.0 - (c++)"pkgDPkgPM::Install(pkgCache::PkgIterator, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.0 - (c++)"pkgDPkgPM::OpenLog()@APTPKG_5.0" 0.8.0 - (c++)"pkgDPkgPM::CloseLog()@APTPKG_5.0" 0.8.0 - (c++)"pkgDPkgPM::Configure(pkgCache::PkgIterator)@APTPKG_5.0" 0.8.0 - (c++)"pkgDPkgPM::pkgDPkgPM(pkgDepCache*)@APTPKG_5.0" 0.8.0 - (c++)"pkgDPkgPM::~pkgDPkgPM()@APTPKG_5.0" 0.8.0 - (c++)"pkgPolicy::GetPriority(pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgPolicy::InitDefaults()@APTPKG_5.0" 0.8.0 - (c++)"pkgPolicy::GetCandidateVer(pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgPolicy::GetMatch(pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.0 - (c++)"pkgPolicy::CreatePin(pkgVersionMatch::MatchType, std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >, short)@APTPKG_5.0" 0.8.0 - (c++)"pkgPolicy::pkgPolicy(pkgCache*)@APTPKG_5.0" 0.8.0 - (c++)"pkgPolicy::~pkgPolicy()@APTPKG_5.0" 0.8.0 - (c++)"pkgSystem::GlobalList@APTPKG_5.0" 0.8.0 - (c++)"pkgSystem::GlobalListLen@APTPKG_5.0" 0.8.0 - (c++)"pkgSystem::GetSystem(char const*)@APTPKG_5.0" 0.8.0 - (c++)"HashString::VerifyFile(std::__cxx11::basic_string, std::allocator >) const@APTPKG_5.0" 0.8.0 - (c++)"HashString::empty() const@APTPKG_5.0" 0.8.0 - (c++)"HashString::toStr[abi:cxx11]() const@APTPKG_5.0" 0.8.0 - (c++)"CommandLine::FileSize() const@APTPKG_5.0" 0.8.0 - (c++)"GlobalError::empty(GlobalError::MsgType const&) const@APTPKG_5.0" 0.8.0 - (c++)"pkgIndexFile::FindInCache(pkgCache&) const@APTPKG_5.0" 0.8.0 - (c++)"Configuration::MatchAgainstConfig::Match(char const*) const@APTPKG_5.0" 0.8.0 - (c++)"Configuration::Find[abi:cxx11](char const*, char const*) const@APTPKG_5.0" 0.8.0 - (c++)"Configuration::Item::FullTag[abi:cxx11](Configuration::Item const*) const@APTPKG_5.0" 0.8.0 - (c++)"Configuration::FindB(char const*, bool const&) const@APTPKG_5.0" 0.8.0 - (c++)"Configuration::FindI(char const*, int const&) const@APTPKG_5.0" 0.8.0 - (c++)"Configuration::Exists(char const*) const@APTPKG_5.0" 0.8.0 - (c++)"Configuration::FindAny[abi:cxx11](char const*, char const*) const@APTPKG_5.0" 0.8.0 - (c++)"Configuration::FindDir[abi:cxx11](char const*, char const*) const@APTPKG_5.0" 0.8.0 - (c++)"Configuration::FindFile[abi:cxx11](char const*, char const*) const@APTPKG_5.0" 0.8.0 - (c++)"Configuration::ExistsAny(char const*) const@APTPKG_5.0" 0.8.0 - (c++)"pkgSourceList::GetIndexes(pkgAcquire*, bool) const@APTPKG_5.0" 0.8.0 - (c++)"pkgSourceList::Type::FixupURI(std::__cxx11::basic_string, std::allocator >&) const@APTPKG_5.0" 0.8.0 - (c++)"pkgSourceList::FindIndex(pkgCache::PkgFileIterator, pkgIndexFile*&) const@APTPKG_5.0" 0.8.0 - (c++)"pkgTagSection::Find(char const*, char const*&, char const*&) const@APTPKG_5.0" 0.8.0 - (c++)"pkgTagSection::Find(char const*, unsigned int&) const@APTPKG_5.0" 0.8.0 - (c++)"pkgTagSection::FindI(char const*, long) const@APTPKG_5.0" 0.8.0 - (c++)"pkgTagSection::FindS[abi:cxx11](char const*) const@APTPKG_5.0" 0.8.0 - (c++)"pkgTagSection::FindULL(char const*, unsigned long long const&) const@APTPKG_5.0" 0.8.0 - (c++)"pkgTagSection::FindFlag(char const*, unsigned long&, unsigned long) const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::DepIterator::AllTargets() const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::DepIterator::IsCritical() const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::DepIterator::SmartTargetPkg(pkgCache::PkgIterator&) const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::GrpIterator::FindPreferredPkg(bool const&) const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::GrpIterator::FindPkg(std::__cxx11::basic_string, std::allocator >) const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::GrpIterator::NextPkg(pkgCache::PkgIterator const&) const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::PkgIterator::CurVersion() const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::PkgIterator::CandVersion() const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::PkgIterator::State() const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::VerIterator::CompareVer(pkgCache::VerIterator const&) const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::VerIterator::NewestFile() const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::VerIterator::Downloadable() const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::VerIterator::TranslatedDescription() const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::VerIterator::RelStr[abi:cxx11]() const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::VerIterator::Automatic() const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::sHash(char const*) const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::sHash(std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_5.0" 0.8.0 - (c++)"pkgCache::Header::CheckSizes(pkgCache::Header&) const@APTPKG_5.0" 0.8.0 - (c++)"debSystem::CreatePM(pkgDepCache*) const@APTPKG_5.0" 0.8.0 - (c++)"debSystem::FindIndex(pkgCache::PkgFileIterator, pkgIndexFile*&) const@APTPKG_5.0" 0.8.0 - (c++)"metaIndex::GetURI[abi:cxx11]() const@APTPKG_5.0" 0.8.0 - (c++)"metaIndex::GetDist[abi:cxx11]() const@APTPKG_5.0" 0.8.0 - (c++)"metaIndex::GetType() const@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for OpProgress@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for SourceCopy@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgAcqFile@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgAcquire@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for DynamicMMap@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for PackageCopy@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgDepCache@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgSimulate@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgAcqMethod@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgCacheFile@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgIndexFile@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for WeakPointable@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgAcqArchive@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgTagSection@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for OpTextProgress@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgAcquireStatus@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgPackageManager@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for debVersioningSystem@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgUdevCdromDevices@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgVersioningSystem@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for MMap@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for FileFd@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgCache@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for IndexCopy@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for debSystem@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for metaIndex@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgDPkgPM@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgPolicy@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgSystem@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgAcquire::Item@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgRecords::Parser@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgDepCache::InRootSetFunc@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgDepCache::DefaultRootSetFunc@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgDepCache::Policy@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgSimulate::Policy@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgIndexFile::Type@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for Configuration::MatchAgainstConfig@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgSourceList::Type@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgSrcRecords::Parser@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for APT::CacheSetHelper@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgCache::Namespace@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for OpProgress@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for SourceCopy@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgAcqFile@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgAcquire@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for DynamicMMap@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for PackageCopy@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgDepCache@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgSimulate@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgAcqMethod@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgCacheFile@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgIndexFile@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for WeakPointable@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgAcqArchive@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgTagSection@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for OpTextProgress@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgAcquireStatus@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgPackageManager@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for debVersioningSystem@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgUdevCdromDevices@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgVersioningSystem@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for MMap@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for FileFd@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgCache@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for IndexCopy@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for debSystem@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for metaIndex@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgDPkgPM@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgPolicy@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgSystem@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgAcquire::Item@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgRecords::Parser@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgDepCache::InRootSetFunc@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgDepCache::DefaultRootSetFunc@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgDepCache::Policy@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgSimulate::Policy@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgIndexFile::Type@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for Configuration::MatchAgainstConfig@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgSourceList::Type@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgSrcRecords::Parser@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for APT::CacheSetHelper@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgCache::Namespace@APTPKG_5.0" 0.8.0 - (c++)"vtable for OpProgress@APTPKG_5.0" 0.8.0 - (c++)"vtable for SourceCopy@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgAcqFile@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgAcquire@APTPKG_5.0" 0.8.0 - (c++)"vtable for DynamicMMap@APTPKG_5.0" 0.8.0 - (c++)"vtable for PackageCopy@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgDepCache@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgSimulate@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgAcqMethod@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgCacheFile@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgIndexFile@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgAcqArchive@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgTagSection@APTPKG_5.0" 0.8.0 - (c++)"vtable for OpTextProgress@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgAcquireStatus@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgPackageManager@APTPKG_5.0" 0.8.0 - (c++)"vtable for debVersioningSystem@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgUdevCdromDevices@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgVersioningSystem@APTPKG_5.0" 0.8.0 - (c++)"vtable for MMap@APTPKG_5.0" 0.8.0 - (c++)"vtable for FileFd@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgCache@APTPKG_5.0" 0.8.0 - (c++)"vtable for IndexCopy@APTPKG_5.0" 0.8.0 - (c++)"vtable for debSystem@APTPKG_5.0" 0.8.0 - (c++)"vtable for metaIndex@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgDPkgPM@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgPolicy@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgSystem@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgAcquire::Item@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgRecords::Parser@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgDepCache::InRootSetFunc@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgDepCache::DefaultRootSetFunc@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgDepCache::Policy@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgSimulate::Policy@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgIndexFile::Type@APTPKG_5.0" 0.8.0 - (c++)"vtable for Configuration::MatchAgainstConfig@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgSourceList::Type@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgSrcRecords::Parser@APTPKG_5.0" 0.8.0 - (c++)"vtable for APT::CacheSetHelper@APTPKG_5.0" 0.8.0 - (c++)"operator<<(std::basic_ostream >&, pkgCache::DepIterator)@APTPKG_5.0" 0.8.0 - (c++)"operator<<(std::basic_ostream >&, pkgCache::PkgIterator)@APTPKG_5.0" 0.8.0 - _config@APTPKG_5.0 0.8.0 - _system@APTPKG_5.0 0.8.0 - debSys@APTPKG_5.0 0.8.0 - debVS@APTPKG_5.0 0.8.0 - pkgLibVersion@APTPKG_5.0 0.8.0 - pkgVersion@APTPKG_5.0 0.8.0 - (c++)"pkgAcquireStatus::~pkgAcquireStatus()@APTPKG_5.0" 0.8.0 - (c++)"IndexCopy::~IndexCopy()@APTPKG_5.0" 0.8.0 - (c++)"pkgArchiveCleaner::~pkgArchiveCleaner()@APTPKG_5.0" 0.8.0 - (c++)"typeinfo for pkgArchiveCleaner@APTPKG_5.0" 0.8.0 - (c++)"typeinfo name for pkgArchiveCleaner@APTPKG_5.0" 0.8.0 - (c++)"vtable for pkgArchiveCleaner@APTPKG_5.0" 0.8.0 + TFRewritePackageOrder@APTPKG_6.0 0.8.0 + TFRewriteSourceOrder@APTPKG_6.0 0.8.0 + (c++)"FileExists(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"IdentCdrom(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >&, unsigned int)@APTPKG_6.0" 0.8.0 + (c++)"ListUpdate(pkgAcquireStatus&, pkgSourceList&, int)@APTPKG_6.0" 0.8.0 + (c++)"MountCdrom(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"ParseCWord(char const*&, std::__cxx11::basic_string, std::allocator >&)@APTPKG_6.0" 0.8.0 + (c++)"ReadPinDir(pkgPolicy&, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"RunScripts(char const*)@APTPKG_6.0" 0.8.0 + (c++)"SafeGetCWD[abi:cxx11]()@APTPKG_6.0" 0.8.0 + (c++)"QuoteString(std::__cxx11::basic_string, std::allocator > const&, char const*)@APTPKG_6.0" 0.8.0 + (c++)"ReadPinFile(pkgPolicy&, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"RegexChoice(RxChoiceList*, char const**, char const**)@APTPKG_6.0" 0.8.0 + (c++)"SetNonBlock(int, bool)@APTPKG_6.0" 0.8.0 + (c++)"flExtension(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"Base64Encode(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"ReadMessages(int, std::vector, std::allocator >, std::allocator, std::allocator > > >&)@APTPKG_6.0" 0.8.0 + (c++)"SetCloseExec(int, bool)@APTPKG_6.0" 0.8.0 + (c++)"StringToBool(std::__cxx11::basic_string, std::allocator > const&, int)@APTPKG_6.0" 0.8.0 + (c++)"UnmountCdrom(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"_GetErrorObj()@APTPKG_6.0" 0.8.0 + (c++)"Base256ToNum(char const*, unsigned long long&, unsigned int)@APTPKG_6.0" 1.0.5 + (c++)"pkgFixBroken(pkgDepCache&)@APTPKG_6.0" 0.8.0 + (c++)"DeQuoteString(__gnu_cxx::__normal_iterator, std::allocator > > const&, __gnu_cxx::__normal_iterator, std::allocator > > const&)@APTPKG_6.0" 0.8.0 + (c++)"DeQuoteString(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"OutputInDepth[abi:cxx11](unsigned long, char const*)@APTPKG_6.0" 0.8.0 + (c++)"ReadConfigDir(Configuration&, std::__cxx11::basic_string, std::allocator > const&, bool const&, unsigned int const&)@APTPKG_6.0" 0.8.0 + (c++)"URItoFileName(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"UTF8ToCodeset(char const*, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator >*)@APTPKG_6.0" 0.8.0 + (c++)"pkgInitConfig(Configuration&)@APTPKG_6.0" 0.8.0 + (c++)"pkgInitSystem(Configuration&, pkgSystem*&)@APTPKG_6.0" 0.8.0 + (c++)"safe_snprintf(char*, char*, char const*, ...)@APTPKG_6.0" 0.8.0 + (c++)"stringcasecmp(__gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, char const*, char const*)@APTPKG_6.0" 0.8.0 + (c++)"stringcasecmp(__gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >)@APTPKG_6.0" 0.8.0 + (c++)"stringcasecmp(char const*, char const*, char const*, char const*)@APTPKG_6.0" 0.8.0 + (c++)"tolower_ascii(int)@APTPKG_6.0" 0.8.0 + (c++)"ParseQuoteWord(char const*&, std::__cxx11::basic_string, std::allocator >&)@APTPKG_6.0" 0.8.0 + (c++)"ReadConfigFile(Configuration&, std::__cxx11::basic_string, std::allocator > const&, bool const&, unsigned int const&)@APTPKG_6.0" 0.8.0 + (c++)"TokSplitString(char, char*, char**, unsigned long)@APTPKG_6.0" 0.8.0 + (c++)"pkgApplyStatus(pkgDepCache&)@APTPKG_6.0" 0.8.0 + (c++)"CheckDomainList(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"CreateDirectory(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"DirectoryExists(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"VectorizeString(std::__cxx11::basic_string, std::allocator > const&, char const&)@APTPKG_6.0" 0.8.0 + (c++)"pkgPrioSortList(pkgCache&, pkgCache::Version**)@APTPKG_6.0" 0.8.0 + (c++)"pkgMinimizeUpgrade(pkgDepCache&)@APTPKG_6.0" 0.8.0 + (c++)"GetListOfFilesInDir(std::__cxx11::basic_string, std::allocator > const&, std::vector, std::allocator >, std::allocator, std::allocator > > > const&, bool const&)@APTPKG_6.0" 0.8.0 + (c++)"GetListOfFilesInDir(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, bool const&, bool const&)@APTPKG_6.0" 0.8.0 + (c++)"WaitFd(int, bool, unsigned long)@APTPKG_6.0" 0.8.0 + (c++)"GetLock(std::__cxx11::basic_string, std::allocator >, bool)@APTPKG_6.0" 0.8.0 + (c++)"Hex2Num(APT::StringView, unsigned char*, unsigned int)@APTPKG_6.0" 1.9~ + (c++)"CopyFile(FileFd&, FileFd&)@APTPKG_6.0" 0.8.0 + (c++)"ExecFork()@APTPKG_6.0" 0.8.0 + (c++)"ExecWait(int, char const*, bool)@APTPKG_6.0" 0.8.0 + (c++)"StrToNum(char const*, unsigned long&, unsigned int, unsigned int)@APTPKG_6.0" 0.8.0 + (c++)"SubstVar(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"SubstVar(std::__cxx11::basic_string, std::allocator >, SubstVar const*)@APTPKG_6.0" 0.8.0 + (c++)"flNoLink(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"flNotDir(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"ioprintf(std::basic_ostream >&, char const*, ...)@APTPKG_6.0" 0.8.0 + (c++)"IsMounted(std::__cxx11::basic_string, std::allocator >&)@APTPKG_6.0" 0.8.0 + (c++)"LookupTag(std::__cxx11::basic_string, std::allocator > const&, char const*, char const*)@APTPKG_6.0" 0.8.0 + (c++)"SizeToStr[abi:cxx11](double)@APTPKG_6.0" 0.8.0 + (c++)"TimeToStr[abi:cxx11](unsigned long)@APTPKG_6.0" 0.8.0 + (c++)"_strstrip(char*)@APTPKG_6.0" 0.8.0 + (c++)"flCombine(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"flNotFile(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"stringcmp(__gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, char const*, char const*)@APTPKG_6.0" 0.8.0 + (c++)"stringcmp(__gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >, __gnu_cxx::__normal_iterator, std::allocator > >)@APTPKG_6.0" 0.8.0 + (c++)"stringcmp(char const*, char const*, char const*, char const*)@APTPKG_6.0" 0.8.0 + (c++)"strprintf(std::__cxx11::basic_string, std::allocator >&, char const*, ...)@APTPKG_6.0" 0.8.0 + (c++)"HashString::SupportedHashes()@APTPKG_6.0" 0.8.0 + (c++)"HashString::_SupportedHashes@APTPKG_6.0" 0.8.0 + (c++)"HashString::HashString(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"HashString::HashString(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"HashString::HashString()@APTPKG_6.0" 0.8.0 + (c++)"OpProgress::CheckChange(float)@APTPKG_6.0" 0.8.0 + (c++)"OpProgress::OpProgress()@APTPKG_6.0" 0.8.0 + (c++)"SourceCopy::~SourceCopy()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqFile::~pkgAcqFile()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::WorkerStep(pkgAcquire::Worker*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::FetchNeeded()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::TotalNeeded()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::MethodConfig::MethodConfig()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::PartialPresent()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Add(pkgAcquire::Item*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Add(pkgAcquire::Worker*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Run(int)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Bump()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Item::Finished()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Item::~Item()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Clean(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Queue::Bump()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Queue::Cycle()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Queue::Dequeue(pkgAcquire::Item*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Queue::Enqueue(pkgAcquire::ItemDesc&)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Queue::Startup()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Queue::FindItem(std::__cxx11::basic_string, std::allocator >, pkgAcquire::Worker*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Queue::ItemDone(pkgAcquire::Queue::QItem*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Queue::Shutdown(bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Queue::~Queue()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Remove(pkgAcquire::Item*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Remove(pkgAcquire::Worker*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::RunFds(fd_set*, fd_set*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::SetFds(int&, fd_set*, fd_set*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::UriEnd()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Worker::OutFdReady()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Worker::MediaChange(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Worker::RunMessages()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Worker::Capabilities(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Worker::ReadMessages()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Worker::MethodFailure()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Worker::SendConfiguration()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Worker::Pulse()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Worker::Start()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Worker::ItemDone()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Worker::Construct()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Worker::InFdReady()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Worker::QueueItem(pkgAcquire::Queue::QItem*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Worker::Worker(pkgAcquire::MethodConfig*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Worker::Worker(pkgAcquire::Queue*, pkgAcquire::MethodConfig*, pkgAcquireStatus*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Worker::~Worker()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Dequeue(pkgAcquire::Item*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Enqueue(pkgAcquire::ItemDesc&)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::Shutdown()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::UriBegin()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::GetConfig(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::QueueName(std::__cxx11::basic_string, std::allocator >, pkgAcquire::MethodConfig const*&)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::pkgAcquire(pkgAcquireStatus*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::pkgAcquire()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquire::~pkgAcquire()@APTPKG_6.0" 0.8.0 + (c++)"pkgRecords::Lookup(pkgCache::VerFileIterator const&)@APTPKG_6.0" 0.8.0 + (c++)"pkgRecords::Lookup(pkgCache::DescFileIterator const&)@APTPKG_6.0" 0.8.0 + (c++)"pkgRecords::pkgRecords(pkgCache&)@APTPKG_6.0" 0.8.0 + (c++)"pkgRecords::~pkgRecords()@APTPKG_6.0" 0.8.0 + (c++)"pkgTagFile::Step(pkgTagSection&)@APTPKG_6.0" 0.8.0 + (c++)"pkgTagFile::~pkgTagFile()@APTPKG_6.0" 0.8.0 + (c++)"CommandLine::SaveInConfig(unsigned int const&, char const* const*)@APTPKG_6.0" 0.8.0 + (c++)"CommandLine::Parse(int, char const**)@APTPKG_6.0" 0.8.0 + (c++)"CommandLine::HandleOpt(int&, int, char const**, char const*&, CommandLine::Args*, bool)@APTPKG_6.0" 0.8.0 + (c++)"CommandLine::CommandLine(CommandLine::Args*, Configuration*)@APTPKG_6.0" 0.8.0 + (c++)"CommandLine::~CommandLine()@APTPKG_6.0" 0.8.0 + (c++)"DynamicMMap::WriteString(char const*, unsigned long)@APTPKG_6.0" 0.8.0 + (c++)"DynamicMMap::Grow()@APTPKG_6.0" 0.8.0 + (c++)"DynamicMMap::Allocate(unsigned long)@APTPKG_6.0" 0.8.0 + (c++)"DynamicMMap::DynamicMMap(FileFd&, unsigned long, unsigned long const&, unsigned long const&, unsigned long const&)@APTPKG_6.0" 0.8.0 + (c++)"DynamicMMap::DynamicMMap(unsigned long, unsigned long const&, unsigned long const&, unsigned long const&)@APTPKG_6.0" 0.8.0 + (c++)"DynamicMMap::~DynamicMMap()@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::DumpErrors(std::basic_ostream >&, GlobalError::MsgType const&, bool const&)@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::PopMessage(std::__cxx11::basic_string, std::allocator >&)@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::InsertErrno(GlobalError::MsgType const&, char const*, char const*, ...)@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::PushToStack()@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::RevertToStack()@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::MergeWithStack()@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::Debug(char const*, ...)@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::Errno(char const*, char const*, ...)@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::Error(char const*, ...)@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::Fatal(char const*, ...)@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::DebugE(char const*, char const*, ...)@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::FatalE(char const*, char const*, ...)@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::Insert(GlobalError::MsgType const&, char const*, ...)@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::Notice(char const*, ...)@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::Discard()@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::NoticeE(char const*, char const*, ...)@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::Warning(char const*, ...)@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::WarningE(char const*, char const*, ...)@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::GlobalError()@APTPKG_6.0" 0.8.0 + (c++)"PackageCopy::~PackageCopy()@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::IsDeleteOk(pkgCache::PkgIterator const&, bool, unsigned long, bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::MarkDelete(pkgCache::PkgIterator const&, bool, unsigned long, bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::StateCache::Update(pkgCache::PkgIterator, pkgCache&)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::ActionGroup::release()@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::ActionGroup::ActionGroup(pkgDepCache&)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::ActionGroup::~ActionGroup()@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::IsInstallOk(pkgCache::PkgIterator const&, bool, unsigned long, bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::MarkInstall(pkgCache::PkgIterator const&, bool, unsigned long, bool, bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::SetReInstall(pkgCache::PkgIterator const&, bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::BuildGroupOrs(pkgCache::VerIterator const&)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::readStateFile(OpProgress*)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::GetRootSetFunc()@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::writeStateFile(OpProgress*, bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::MarkFollowsSuggests()@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::MarkFollowsRecommends()@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::Init(OpProgress*)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::Policy::GetCandidateVer(pkgCache::PkgIterator const&)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::Update(pkgCache::DepIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::Update(OpProgress*)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::Update(pkgCache::PkgIterator const&)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::MarkAuto(pkgCache::PkgIterator const&, bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::MarkKeep(pkgCache::PkgIterator const&, bool, bool, unsigned long)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::MarkRequired(pkgDepCache::InRootSetFunc&)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::Sweep()@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::pkgDepCache(pkgCache*, pkgDepCache::Policy*)@APTPKG_6.0" 0.8.0 + (c++)"pkgDepCache::~pkgDepCache()@APTPKG_6.0" 0.8.0 + (c++)"pkgSimulate::Remove(pkgCache::PkgIterator, bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgSimulate::Install(pkgCache::PkgIterator, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"pkgSimulate::Configure(pkgCache::PkgIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgSimulate::Go(APT::Progress::PackageManager*)@APTPKG_6.0" 1.9.11~ + (c++)"pkgSimulate::pkgSimulate(pkgDepCache*)@APTPKG_6.0" 0.8.0 + (c++)"pkgSimulate::~pkgSimulate()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqMethod::FetchResult::TakeHashes(Hashes&)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqMethod::FetchResult::FetchResult()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqMethod::Configuration(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqMethod::Log(char const*, ...)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqMethod::Run(bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqMethod::Fail(std::__cxx11::basic_string, std::allocator >, bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqMethod::Fail(bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqMethod::Status(char const*, ...)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqMethod::URIDone(pkgAcqMethod::FetchResult&, pkgAcqMethod::FetchResult*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqMethod::Redirect(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqMethod::URIStart(pkgAcqMethod::FetchResult&)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqMethod::MediaFail(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqMethod::pkgAcqMethod(char const*, unsigned long)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqMethod::~pkgAcqMethod()@APTPKG_6.0" 0.8.0 + (c++)"pkgCacheFile::BuildCaches(OpProgress*, bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgCacheFile::BuildPolicy(OpProgress*)@APTPKG_6.0" 0.8.0 + (c++)"pkgCacheFile::BuildDepCache(OpProgress*)@APTPKG_6.0" 0.8.0 + (c++)"pkgCacheFile::BuildSourceList(OpProgress*)@APTPKG_6.0" 0.8.0 + (c++)"pkgCacheFile::Open(OpProgress*, bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgCacheFile::Close()@APTPKG_6.0" 0.8.0 + (c++)"pkgCacheFile::pkgCacheFile()@APTPKG_6.0" 0.8.0 + (c++)"pkgCacheFile::~pkgCacheFile()@APTPKG_6.0" 0.8.0 + (c++)"pkgIndexFile::Type::GlobalList@APTPKG_6.0" 0.8.0 + (c++)"pkgIndexFile::Type::GlobalListLen@APTPKG_6.0" 0.8.0 + (c++)"pkgIndexFile::Type::GetType(char const*)@APTPKG_6.0" 0.8.0 + (c++)"pkgIndexFile::Type::Type()@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::VisitRDeps(bool (pkgOrderList::*)(pkgCache::DepIterator), pkgCache::PkgIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::OrderUnpack(std::__cxx11::basic_string, std::allocator >*)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::DepConfigure(pkgCache::DepIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::DepUnPackDep(pkgCache::DepIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::DepUnPackPre(pkgCache::DepIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::DepUnPackCrit(pkgCache::DepIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::DepUnPackPreD(pkgCache::DepIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::OrderCritical()@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::VisitProvides(pkgCache::DepIterator, bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::OrderConfigure()@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::VisitRProvides(bool (pkgOrderList::*)(pkgCache::DepIterator), pkgCache::VerIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::DoRun()@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::Score(pkgCache::PkgIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::AddLoop(pkgCache::DepIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::FileCmp(pkgCache::PkgIterator, pkgCache::PkgIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::CheckDep(pkgCache::DepIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::DepRemove(pkgCache::DepIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::IsMissing(pkgCache::PkgIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::VisitDeps(bool (pkgOrderList::*)(pkgCache::DepIterator), pkgCache::PkgIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::WipeFlags(unsigned long)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::pkgOrderList(pkgDepCache*)@APTPKG_6.0" 0.8.0 + (c++)"pkgOrderList::~pkgOrderList()@APTPKG_6.0" 0.8.0 + (c++)"Configuration::MatchAgainstConfig::MatchAgainstConfig(char const*)@APTPKG_6.0" 0.8.0 + (c++)"Configuration::MatchAgainstConfig::~MatchAgainstConfig()@APTPKG_6.0" 0.8.0 + (c++)"Configuration::Set(char const*, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"Configuration::Set(char const*, int const&)@APTPKG_6.0" 0.8.0 + (c++)"Configuration::Dump(std::basic_ostream >&)@APTPKG_6.0" 0.8.0 + (c++)"Configuration::Clear(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"Configuration::Clear(std::__cxx11::basic_string, std::allocator > const&, int const&)@APTPKG_6.0" 0.8.0 + (c++)"Configuration::Clear(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"Configuration::CndSet(char const*, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"Configuration::Lookup(char const*, bool const&)@APTPKG_6.0" 0.8.0 + (c++)"Configuration::Lookup(Configuration::Item*, char const*, unsigned long const&, bool const&)@APTPKG_6.0" 0.8.0 + (c++)"Configuration::Configuration(Configuration::Item const*)@APTPKG_6.0" 0.8.0 + (c++)"Configuration::Configuration()@APTPKG_6.0" 0.8.0 + (c++)"Configuration::~Configuration()@APTPKG_6.0" 0.8.0 + (c++)"debListParser::ConvertRelation(char const*, unsigned int&)@APTPKG_6.0" 0.8.0 + (c++)"debListParser::GetPrio(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqArchive::Finished()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqArchive::QueueNext()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqArchive::pkgAcqArchive(pkgAcquire*, pkgSourceList*, pkgRecords*, pkgCache::VerIterator const&, std::__cxx11::basic_string, std::allocator >&)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcqArchive::~pkgAcqArchive()@APTPKG_6.0" 0.8.0 + (c++)"pkgSourceList::Type::GlobalList@APTPKG_6.0" 0.8.0 + (c++)"pkgSourceList::Type::GlobalListLen@APTPKG_6.0" 0.8.0 + (c++)"pkgSourceList::Type::GetType(char const*)@APTPKG_6.0" 0.8.0 + (c++)"pkgSourceList::ReadMainList()@APTPKG_6.0" 0.8.0 + (c++)"pkgSourceList::Reset()@APTPKG_6.0" 0.8.0 + (c++)"pkgSourceList::pkgSourceList()@APTPKG_6.0" 0.8.0 + (c++)"pkgSourceList::~pkgSourceList()@APTPKG_6.0" 0.8.0 + (c++)"pkgSrcRecords::Find(char const*, bool const&)@APTPKG_6.0" 0.8.0 + (c++)"pkgSrcRecords::Parser::BuildDepType(unsigned char const&)@APTPKG_6.0" 0.8.0 + (c++)"pkgSrcRecords::Restart()@APTPKG_6.0" 0.8.0 + (c++)"pkgSrcRecords::pkgSrcRecords(pkgSourceList&)@APTPKG_6.0" 0.8.0 + (c++)"pkgSrcRecords::~pkgSrcRecords()@APTPKG_6.0" 0.8.0 + (c++)"pkgTagSection::TrimRecord(bool, char const*&)@APTPKG_6.0" 0.8.0 + (c++)"pkgTagSection::Trim()@APTPKG_6.0" 0.8.0 + (c++)"OpTextProgress::Done()@APTPKG_6.0" 0.8.0 + (c++)"OpTextProgress::Write(char const*)@APTPKG_6.0" 0.8.0 + (c++)"OpTextProgress::Update()@APTPKG_6.0" 0.8.0 + (c++)"OpTextProgress::OpTextProgress(Configuration&)@APTPKG_6.0" 0.8.0 + (c++)"pkgVersionMatch::ExpressionMatches(char const*, char const*)@APTPKG_6.0" 0.8.0 + (c++)"pkgVersionMatch::ExpressionMatches(std::__cxx11::basic_string, std::allocator > const&, char const*)@APTPKG_6.0" 0.8.0 + (c++)"pkgVersionMatch::Find(pkgCache::PkgIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgVersionMatch::MatchVer(char const*, std::__cxx11::basic_string, std::allocator >, bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgVersionMatch::FileMatch(pkgCache::PkgFileIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgVersionMatch::pkgVersionMatch(std::__cxx11::basic_string, std::allocator >, pkgVersionMatch::MatchType)@APTPKG_6.0" 0.8.0 + (c++)"TranslationsCopy::CopyTranslations(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&, pkgCdromStatus*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquireStatus::Stop()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquireStatus::Pulse(pkgAcquire*)@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquireStatus::Start()@APTPKG_6.0" 0.8.0 + (c++)"pkgAcquireStatus::pkgAcquireStatus()@APTPKG_6.0" 0.8.0 + (c++)"pkgArchiveCleaner::Go(std::__cxx11::basic_string, std::allocator >, pkgCache&)@APTPKG_6.0" 0.8.0 + (c++)"pkgCacheGenerator::MakeStatusCache(pkgSourceList&, OpProgress*, MMap**, bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgCacheGenerator::MakeOnlyStatusCache(OpProgress*, DynamicMMap**)@APTPKG_6.0" 0.8.0 + (c++)"pkgPackageManager::FixMissing()@APTPKG_6.0" 0.8.0 + (c++)"pkgPackageManager::GetArchives(pkgAcquire*, pkgSourceList*, pkgRecords*)@APTPKG_6.0" 0.8.0 + (c++)"pkgPackageManager::SmartRemove(pkgCache::PkgIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgPackageManager::ConfigureAll()@APTPKG_6.0" 0.8.0 + (c++)"pkgPackageManager::ImmediateAdd(pkgCache::PkgIterator, bool, unsigned int const&)@APTPKG_6.0" 0.8.0 + (c++)"pkgPackageManager::OrderInstall()@APTPKG_6.0" 0.8.0 + (c++)"pkgPackageManager::DepAlwaysTrue(pkgCache::DepIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgPackageManager::CheckRConflicts(pkgCache::PkgIterator, pkgCache::DepIterator, char const*)@APTPKG_6.0" 0.8.0 + (c++)"pkgPackageManager::CreateOrderList()@APTPKG_6.0" 0.8.0 + (c++)"pkgPackageManager::pkgPackageManager(pkgDepCache*)@APTPKG_6.0" 0.8.0 + (c++)"pkgPackageManager::~pkgPackageManager()@APTPKG_6.0" 0.8.0 + (c++)"pkgProblemResolver::pkgProblemResolver(pkgDepCache*)@APTPKG_6.0" 0.8.0 + (c++)"pkgProblemResolver::~pkgProblemResolver()@APTPKG_6.0" 0.8.0 + (c++)"debVersioningSystem::CmpFragment(char const*, char const*, char const*, char const*)@APTPKG_6.0" 0.8.0 + (c++)"debVersioningSystem::DoCmpVersion(char const*, char const*, char const*, char const*)@APTPKG_6.0" 0.8.0 + (c++)"debVersioningSystem::UpstreamVersion[abi:cxx11](char const*)@APTPKG_6.0" 0.8.0 + (c++)"debVersioningSystem::CheckDep(char const*, int, char const*)@APTPKG_6.0" 0.8.0 + (c++)"debVersioningSystem::debVersioningSystem()@APTPKG_6.0" 0.8.0 + (c++)"pkgUdevCdromDevices::Scan()@APTPKG_6.0" 0.8.0 + (c++)"pkgUdevCdromDevices::pkgUdevCdromDevices()@APTPKG_6.0" 0.8.0 + (c++)"pkgUdevCdromDevices::~pkgUdevCdromDevices()@APTPKG_6.0" 0.8.0 + (c++)"pkgVersioningSystem::GlobalList@APTPKG_6.0" 0.8.0 + (c++)"pkgVersioningSystem::GlobalListLen@APTPKG_6.0" 0.8.0 + (c++)"pkgVersioningSystem::GetVS(char const*)@APTPKG_6.0" 0.8.0 + (c++)"pkgVersioningSystem::pkgVersioningSystem()@APTPKG_6.0" 0.8.0 + (c++)"APT::CacheFilter::PackageNameMatchesRegEx::PackageNameMatchesRegEx(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"APT::CacheFilter::PackageNameMatchesRegEx::~PackageNameMatchesRegEx()@APTPKG_6.0" 0.8.0 + (c++)"APT::CacheFilter::PackageNameMatchesRegEx::operator()(pkgCache::GrpIterator const&)@APTPKG_6.0" 0.8.0 + (c++)"APT::CacheFilter::PackageNameMatchesRegEx::operator()(pkgCache::PkgIterator const&)@APTPKG_6.0" 0.8.0 + (c++)"APT::Configuration::checkArchitecture(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"APT::CacheSetHelper::canNotFindPkgName(pkgCacheFile&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"APT::CacheSetHelper::canNotFindNewestVer(pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_6.0" 0.8.0 + (c++)"APT::CacheSetHelper::canNotFindCandidateVer(pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_6.0" 0.8.0 + (c++)"APT::CacheSetHelper::canNotFindInstalledVer(pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_6.0" 0.8.0 + (c++)"APT::CacheSetHelper::~CacheSetHelper()@APTPKG_6.0" 0.8.0 + (c++)"URI::NoUserPassword(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"URI::CopyFrom(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"URI::SiteOnly(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.0 + (c++)"URI::operator std::__cxx11::basic_string, std::allocator >()@APTPKG_6.0" 0.8.0 + (c++)"MMap::Map(FileFd&)@APTPKG_6.0" 0.8.0 + (c++)"MMap::Sync(unsigned long, unsigned long)@APTPKG_6.0" 0.8.0 + (c++)"MMap::Sync()@APTPKG_6.0" 0.8.0 + (c++)"MMap::Close(bool)@APTPKG_6.0" 0.8.0 + (c++)"MMap::MMap(FileFd&, unsigned long)@APTPKG_6.0" 0.8.0 + (c++)"MMap::MMap(unsigned long)@APTPKG_6.0" 0.8.0 + (c++)"MMap::~MMap()@APTPKG_6.0" 0.8.0 + (c++)"FileFd::Size()@APTPKG_6.0" 0.8.0 + (c++)"FileFd::Sync()@APTPKG_6.0" 0.8.0 + (c++)"FileFd::Tell()@APTPKG_6.0" 0.8.0 + (c++)"FileFd::Close()@APTPKG_6.0" 0.8.0 + (c++)"FileFd::~FileFd()@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::CompTypeDeb(unsigned char)@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::DepIterator::GlobOr(pkgCache::DepIterator&, pkgCache::DepIterator&)@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::DepIterator::operator++()@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::GrpIterator::operator++()@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::PkgIterator::operator++()@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::PkgFileIterator::RelStr[abi:cxx11]()@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::ReMap(bool const&)@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::Header::Header()@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::DepType(unsigned char)@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::FindGrp(APT::StringView)@APTPKG_6.0" 1.9~ + (c++)"pkgCache::FindPkg(APT::StringView)@APTPKG_6.0" 1.9~ + (c++)"pkgCache::FindPkg(APT::StringView, APT::StringView)@APTPKG_6.0" 1.9~ + (c++)"pkgCache::CompType(unsigned char)@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::Priority(unsigned char)@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::pkgCache(MMap*, bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::~pkgCache()@APTPKG_6.0" 0.8.0 + (c++)"pkgCdrom::DropRepeats(std::vector, std::allocator >, std::allocator, std::allocator > > >&, char const*)@APTPKG_6.0" 0.8.0 + (c++)"pkgCdrom::FindPackages(std::__cxx11::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&, std::vector, std::allocator >, std::allocator, std::allocator > > >&, std::vector, std::allocator >, std::allocator, std::allocator > > >&, std::vector, std::allocator >, std::allocator, std::allocator > > >&, std::__cxx11::basic_string, std::allocator >&, pkgCdromStatus*, unsigned int)@APTPKG_6.0" 0.8.0 + (c++)"pkgCdrom::WriteDatabase(Configuration&)@APTPKG_6.0" 0.8.0 + (c++)"pkgCdrom::DropBinaryArch(std::vector, std::allocator >, std::allocator, std::allocator > > >&)@APTPKG_6.0" 0.8.0 + (c++)"pkgCdrom::WriteSourceList(std::__cxx11::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&, bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgCdrom::ReduceSourcelist(std::__cxx11::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&)@APTPKG_6.0" 0.8.0 + (c++)"pkgCdrom::Add(pkgCdromStatus*)@APTPKG_6.0" 0.8.0 + (c++)"pkgCdrom::Ident(std::__cxx11::basic_string, std::allocator >&, pkgCdromStatus*)@APTPKG_6.0" 0.8.0 + (c++)"pkgCdrom::Score(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"IndexCopy::CopyPackages(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&, pkgCdromStatus*)@APTPKG_6.0" 0.8.0 + (c++)"IndexCopy::ReconstructChop(unsigned long&, std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"IndexCopy::ReconstructPrefix(std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"IndexCopy::ConvertToSourceList(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >&)@APTPKG_6.0" 0.8.0 + (c++)"IndexCopy::ChopDirs(std::__cxx11::basic_string, std::allocator >, unsigned int)@APTPKG_6.0" 0.8.0 + (c++)"IndexCopy::GrabFirst(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >&, unsigned int)@APTPKG_6.0" 0.8.0 + (c++)"SigVerify::CopyAndVerify(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >&, std::vector, std::allocator >, std::allocator, std::allocator > > >, std::vector, std::allocator >, std::allocator, std::allocator > > >)@APTPKG_6.0" 0.8.0 + (c++)"debSystem::Initialize(Configuration&)@APTPKG_6.0" 0.8.0 + (c++)"debSystem::AddStatusFiles(std::vector >&)@APTPKG_6.0" 0.8.0 + (c++)"debSystem::ArchiveSupported(char const*)@APTPKG_6.0" 0.8.0 + (c++)"debSystem::Lock()@APTPKG_6.0" 0.8.0 + (c++)"debSystem::Score(Configuration const&)@APTPKG_6.0" 0.8.0 + (c++)"debSystem::UnLock(bool)@APTPKG_6.0" 0.8.0 + (c++)"debSystem::debSystem()@APTPKG_6.0" 0.8.0 + (c++)"debSystem::~debSystem()@APTPKG_6.0" 0.8.0 + (c++)"pkgDPkgPM::DoTerminalPty(int)@APTPKG_6.0" 0.8.0 + (c++)"pkgDPkgPM::WriteHistoryTag(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"pkgDPkgPM::WriteApportReport(char const*, char const*)@APTPKG_6.0" 0.8.0 + (c++)"pkgDPkgPM::RunScriptsWithPkgs(char const*)@APTPKG_6.0" 0.8.0 + (c++)"pkgDPkgPM::Reset()@APTPKG_6.0" 0.8.0 + (c++)"pkgDPkgPM::Remove(pkgCache::PkgIterator, bool)@APTPKG_6.0" 0.8.0 + (c++)"pkgDPkgPM::DoStdin(int)@APTPKG_6.0" 0.8.0 + (c++)"pkgDPkgPM::Install(pkgCache::PkgIterator, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.0 + (c++)"pkgDPkgPM::OpenLog()@APTPKG_6.0" 0.8.0 + (c++)"pkgDPkgPM::CloseLog()@APTPKG_6.0" 0.8.0 + (c++)"pkgDPkgPM::Configure(pkgCache::PkgIterator)@APTPKG_6.0" 0.8.0 + (c++)"pkgDPkgPM::pkgDPkgPM(pkgDepCache*)@APTPKG_6.0" 0.8.0 + (c++)"pkgDPkgPM::~pkgDPkgPM()@APTPKG_6.0" 0.8.0 + (c++)"pkgPolicy::InitDefaults()@APTPKG_6.0" 0.8.0 + (c++)"pkgPolicy::GetCandidateVer(pkgCache::PkgIterator const&)@APTPKG_6.0" 0.8.0 + (c++)"pkgPolicy::CreatePin(pkgVersionMatch::MatchType, std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >, short)@APTPKG_6.0" 0.8.0 + (c++)"pkgPolicy::pkgPolicy(pkgCache*)@APTPKG_6.0" 0.8.0 + (c++)"pkgPolicy::~pkgPolicy()@APTPKG_6.0" 0.8.0 + (c++)"pkgSystem::GlobalList@APTPKG_6.0" 0.8.0 + (c++)"pkgSystem::GlobalListLen@APTPKG_6.0" 0.8.0 + (c++)"pkgSystem::GetSystem(char const*)@APTPKG_6.0" 0.8.0 + (c++)"HashString::VerifyFile(std::__cxx11::basic_string, std::allocator >) const@APTPKG_6.0" 0.8.0 + (c++)"HashString::empty() const@APTPKG_6.0" 0.8.0 + (c++)"HashString::toStr[abi:cxx11]() const@APTPKG_6.0" 0.8.0 + (c++)"CommandLine::FileSize() const@APTPKG_6.0" 0.8.0 + (c++)"GlobalError::empty(GlobalError::MsgType const&) const@APTPKG_6.0" 0.8.0 + (c++)"pkgIndexFile::FindInCache(pkgCache&) const@APTPKG_6.0" 0.8.0 + (c++)"Configuration::MatchAgainstConfig::Match(char const*) const@APTPKG_6.0" 0.8.0 + (c++)"Configuration::Find[abi:cxx11](char const*, char const*) const@APTPKG_6.0" 0.8.0 + (c++)"Configuration::Item::FullTag[abi:cxx11](Configuration::Item const*) const@APTPKG_6.0" 0.8.0 + (c++)"Configuration::FindB(char const*, bool const&) const@APTPKG_6.0" 0.8.0 + (c++)"Configuration::FindI(char const*, int const&) const@APTPKG_6.0" 0.8.0 + (c++)"Configuration::Exists(char const*) const@APTPKG_6.0" 0.8.0 + (c++)"Configuration::FindAny[abi:cxx11](char const*, char const*) const@APTPKG_6.0" 0.8.0 + (c++)"Configuration::FindDir[abi:cxx11](char const*, char const*) const@APTPKG_6.0" 0.8.0 + (c++)"Configuration::FindFile[abi:cxx11](char const*, char const*) const@APTPKG_6.0" 0.8.0 + (c++)"Configuration::ExistsAny(char const*) const@APTPKG_6.0" 0.8.0 + (c++)"pkgSourceList::GetIndexes(pkgAcquire*, bool) const@APTPKG_6.0" 0.8.0 + (c++)"pkgSourceList::Type::FixupURI(std::__cxx11::basic_string, std::allocator >&) const@APTPKG_6.0" 0.8.0 + (c++)"pkgSourceList::FindIndex(pkgCache::PkgFileIterator, pkgIndexFile*&) const@APTPKG_6.0" 0.8.0 + (c++)"pkgTagSection::Find(APT::StringView, char const*&, char const*&) const@APTPKG_6.0" 1.9~ + (c++)"pkgTagSection::Find(APT::StringView, unsigned int&) const@APTPKG_6.0" 1.9~ + (c++)"pkgTagSection::FindI(APT::StringView, long) const@APTPKG_6.0" 1.9~ + (c++)"pkgTagSection::Find(APT::StringView) const@APTPKG_6.0" 1.9~ + (c++)"pkgTagSection::FindULL(APT::StringView, unsigned long long const&) const@APTPKG_6.0" 1.9~ + (c++)"pkgTagSection::FindFlag(APT::StringView, unsigned long&, unsigned long) const@APTPKG_6.0" 1.9~ + (c++)"pkgCache::DepIterator::AllTargets() const@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::DepIterator::IsCritical() const@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::DepIterator::SmartTargetPkg(pkgCache::PkgIterator&) const@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::GrpIterator::FindPreferredPkg(bool const&) const@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::GrpIterator::FindPkg(APT::StringView) const@APTPKG_6.0" 1.9~ + (c++)"pkgCache::GrpIterator::NextPkg(pkgCache::PkgIterator const&) const@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::PkgIterator::CurVersion() const@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::PkgIterator::State() const@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::VerIterator::CompareVer(pkgCache::VerIterator const&) const@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::VerIterator::NewestFile() const@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::VerIterator::Downloadable() const@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::VerIterator::TranslatedDescription() const@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::VerIterator::RelStr[abi:cxx11]() const@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::VerIterator::Automatic() const@APTPKG_6.0" 0.8.0 + (c++)"pkgCache::sHash(APT::StringView) const@APTPKG_6.0" 1.9~ + (c++)"pkgCache::Header::CheckSizes(pkgCache::Header&) const@APTPKG_6.0" 0.8.0 + (c++)"debSystem::CreatePM(pkgDepCache*) const@APTPKG_6.0" 0.8.0 + (c++)"debSystem::FindIndex(pkgCache::PkgFileIterator, pkgIndexFile*&) const@APTPKG_6.0" 0.8.0 + (c++)"metaIndex::GetURI[abi:cxx11]() const@APTPKG_6.0" 0.8.0 + (c++)"metaIndex::GetDist[abi:cxx11]() const@APTPKG_6.0" 0.8.0 + (c++)"metaIndex::GetType() const@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for OpProgress@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for SourceCopy@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgAcqFile@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgAcquire@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for DynamicMMap@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for PackageCopy@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgDepCache@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgSimulate@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgAcqMethod@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgCacheFile@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgIndexFile@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for WeakPointable@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgAcqArchive@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgTagSection@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for OpTextProgress@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgAcquireStatus@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgPackageManager@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for debVersioningSystem@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgUdevCdromDevices@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgVersioningSystem@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for MMap@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for FileFd@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgCache@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for IndexCopy@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for debSystem@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for metaIndex@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgDPkgPM@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgPolicy@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgSystem@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgAcquire::Item@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgRecords::Parser@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgDepCache::InRootSetFunc@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgDepCache::DefaultRootSetFunc@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgDepCache::Policy@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgSimulate::Policy@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgIndexFile::Type@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for Configuration::MatchAgainstConfig@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgSourceList::Type@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgSrcRecords::Parser@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for APT::CacheSetHelper@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgCache::Namespace@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for OpProgress@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for SourceCopy@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgAcqFile@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgAcquire@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for DynamicMMap@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for PackageCopy@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgDepCache@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgSimulate@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgAcqMethod@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgCacheFile@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgIndexFile@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for WeakPointable@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgAcqArchive@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgTagSection@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for OpTextProgress@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgAcquireStatus@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgPackageManager@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for debVersioningSystem@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgUdevCdromDevices@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgVersioningSystem@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for MMap@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for FileFd@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgCache@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for IndexCopy@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for debSystem@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for metaIndex@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgDPkgPM@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgPolicy@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgSystem@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgAcquire::Item@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgRecords::Parser@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgDepCache::InRootSetFunc@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgDepCache::DefaultRootSetFunc@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgDepCache::Policy@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgSimulate::Policy@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgIndexFile::Type@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for Configuration::MatchAgainstConfig@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgSourceList::Type@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgSrcRecords::Parser@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for APT::CacheSetHelper@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgCache::Namespace@APTPKG_6.0" 0.8.0 + (c++)"vtable for OpProgress@APTPKG_6.0" 0.8.0 + (c++)"vtable for SourceCopy@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgAcqFile@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgAcquire@APTPKG_6.0" 0.8.0 + (c++)"vtable for DynamicMMap@APTPKG_6.0" 0.8.0 + (c++)"vtable for PackageCopy@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgDepCache@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgSimulate@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgAcqMethod@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgCacheFile@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgIndexFile@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgAcqArchive@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgTagSection@APTPKG_6.0" 0.8.0 + (c++)"vtable for OpTextProgress@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgAcquireStatus@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgPackageManager@APTPKG_6.0" 0.8.0 + (c++)"vtable for debVersioningSystem@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgUdevCdromDevices@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgVersioningSystem@APTPKG_6.0" 0.8.0 + (c++)"vtable for MMap@APTPKG_6.0" 0.8.0 + (c++)"vtable for FileFd@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgCache@APTPKG_6.0" 0.8.0 + (c++)"vtable for IndexCopy@APTPKG_6.0" 0.8.0 + (c++)"vtable for debSystem@APTPKG_6.0" 0.8.0 + (c++)"vtable for metaIndex@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgDPkgPM@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgPolicy@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgSystem@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgAcquire::Item@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgRecords::Parser@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgDepCache::InRootSetFunc@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgDepCache::DefaultRootSetFunc@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgDepCache::Policy@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgSimulate::Policy@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgIndexFile::Type@APTPKG_6.0" 0.8.0 + (c++)"vtable for Configuration::MatchAgainstConfig@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgSourceList::Type@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgSrcRecords::Parser@APTPKG_6.0" 0.8.0 + (c++)"vtable for APT::CacheSetHelper@APTPKG_6.0" 0.8.0 + (c++)"operator<<(std::basic_ostream >&, pkgCache::DepIterator)@APTPKG_6.0" 0.8.0 + (c++)"operator<<(std::basic_ostream >&, pkgCache::PkgIterator)@APTPKG_6.0" 0.8.0 + _config@APTPKG_6.0 0.8.0 + _system@APTPKG_6.0 0.8.0 + debSys@APTPKG_6.0 0.8.0 + debVS@APTPKG_6.0 0.8.0 + pkgLibVersion@APTPKG_6.0 0.8.0 + pkgVersion@APTPKG_6.0 0.8.0 + (c++)"pkgAcquireStatus::~pkgAcquireStatus()@APTPKG_6.0" 0.8.0 + (c++)"IndexCopy::~IndexCopy()@APTPKG_6.0" 0.8.0 + (c++)"pkgArchiveCleaner::~pkgArchiveCleaner()@APTPKG_6.0" 0.8.0 + (c++)"typeinfo for pkgArchiveCleaner@APTPKG_6.0" 0.8.0 + (c++)"typeinfo name for pkgArchiveCleaner@APTPKG_6.0" 0.8.0 + (c++)"vtable for pkgArchiveCleaner@APTPKG_6.0" 0.8.0 ### architecture specific: va_list - (arch=armel armhf arm64|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, std::__va_list&) const@APTPKG_5.0" 0.8.15~exp1 - (arch=i386 hurd-i386 kfreebsd-i386 ppc64 ppc64el|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, char*&) const@APTPKG_5.0" 0.8.15~exp1 - (arch=hppa ia64 mips mipsel mips64el sparc sparc64|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, void*&) const@APTPKG_5.0" 0.8.15~exp1 - (arch=amd64 kfreebsd-amd64 powerpc powerpcspe s390 s390x x32|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, __va_list_tag (&) [1]) const@APTPKG_5.0" 0.8.15~exp1 - (arch=sh4|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, __builtin_va_list&) const@APTPKG_5.0" 0.8.15~exp1 - (arch=alpha|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, __va_list_tag&) const@APTPKG_5.0" 0.8.15~exp1 + (arch=armel armhf arm64|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, std::__va_list&) const@APTPKG_6.0" 0.8.15~exp1 + (arch=i386 hurd-i386 kfreebsd-i386 ppc64 ppc64el|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, char*&) const@APTPKG_6.0" 0.8.15~exp1 + (arch=hppa ia64 mips mipsel mips64el sparc sparc64|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, void*&) const@APTPKG_6.0" 0.8.15~exp1 + (arch=amd64 kfreebsd-amd64 powerpc powerpcspe s390 s390x x32|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, __va_list_tag (&) [1]) const@APTPKG_6.0" 0.8.15~exp1 + (arch=sh4|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, __builtin_va_list&) const@APTPKG_6.0" 0.8.15~exp1 + (arch=alpha|c++)"pkgAcqMethod::PrintStatus(char const*, char const*, __va_list_tag&) const@APTPKG_6.0" 0.8.15~exp1 ### architecture specific: va_list & size_t - (arch=i386 hurd-i386 kfreebsd-i386|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, char*&, unsigned int&)@APTPKG_5.0" 0.8.11.4 - (arch=armel armhf|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, std::__va_list&, unsigned int&)@APTPKG_5.0" 0.8.11.4 - (arch=arm64|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, std::__va_list&, unsigned long&)@APTPKG_5.0" 0.8.11.4 - (arch=alpha|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag&, unsigned long&)@APTPKG_5.0" 0.8.11.4 - (arch=powerpc powerpcspe x32|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag (&) [1], unsigned int&)@APTPKG_5.0" 0.8.11.4 - (arch=amd64 kfreebsd-amd64 s390 s390x|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag (&) [1], unsigned long&)@APTPKG_5.0" 0.8.11.4 - (arch=hppa mips mipsel sparc|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, void*&, unsigned int&)@APTPKG_5.0" 0.8.11.4 - (arch=ia64 sparc64 mips64el|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, void*&, unsigned long&)@APTPKG_5.0" 0.8.11.4 - (arch=sh4|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __builtin_va_list&, unsigned int&)@APTPKG_5.0" 0.8.11.4 - (arch=ppc64 ppc64el|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, char*&, unsigned long&)@APTPKG_5.0" 0.8.11.4 - (arch=i386 hurd-i386 kfreebsd-i386|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, char*&, int, unsigned int&)@APTPKG_5.0" 0.8.11.4 - (arch=armel armhf|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, std::__va_list&, int, unsigned int&)@APTPKG_5.0" 0.8.11.4 - (arch=arm64|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, std::__va_list&, int, unsigned long&)@APTPKG_5.0" 0.8.11.4 - (arch=alpha|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag&, int, unsigned long&)@APTPKG_5.0" 0.8.11.4 - (arch=powerpc powerpcspe x32|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag (&) [1], int, unsigned int&)@APTPKG_5.0" 0.8.11.4 - (arch=amd64 kfreebsd-amd64 s390 s390x|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag (&) [1], int, unsigned long&)@APTPKG_5.0" 0.8.11.4 - (arch=hppa mips mipsel sparc|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, void*&, int, unsigned int&)@APTPKG_5.0" 0.8.11.4 - (arch=ia64 sparc64 mips64el|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, void*&, int, unsigned long&)@APTPKG_5.0" 0.8.11.4 1 - (arch=sh4|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __builtin_va_list&, int, unsigned int&)@APTPKG_5.0" 0.8.11.4 - (arch=ppc64 ppc64el|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, char*&, int, unsigned long&)@APTPKG_5.0" 0.8.11.4 + (arch=i386 hurd-i386 kfreebsd-i386|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, char*&, unsigned int&)@APTPKG_6.0" 0.8.11.4 + (arch=armel armhf|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, std::__va_list&, unsigned int&)@APTPKG_6.0" 0.8.11.4 + (arch=arm64|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, std::__va_list&, unsigned long&)@APTPKG_6.0" 0.8.11.4 + (arch=alpha|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag&, unsigned long&)@APTPKG_6.0" 0.8.11.4 + (arch=powerpc powerpcspe x32|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag (&) [1], unsigned int&)@APTPKG_6.0" 0.8.11.4 + (arch=amd64 kfreebsd-amd64 s390 s390x|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __va_list_tag (&) [1], unsigned long&)@APTPKG_6.0" 0.8.11.4 + (arch=hppa mips mipsel sparc|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, void*&, unsigned int&)@APTPKG_6.0" 0.8.11.4 + (arch=ia64 sparc64 mips64el|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, void*&, unsigned long&)@APTPKG_6.0" 0.8.11.4 + (arch=sh4|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, __builtin_va_list&, unsigned int&)@APTPKG_6.0" 0.8.11.4 + (arch=ppc64 ppc64el|c++)"GlobalError::Insert(GlobalError::MsgType, char const*, char*&, unsigned long&)@APTPKG_6.0" 0.8.11.4 + (arch=i386 hurd-i386 kfreebsd-i386|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, char*&, int, unsigned int&)@APTPKG_6.0" 0.8.11.4 + (arch=armel armhf|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, std::__va_list&, int, unsigned int&)@APTPKG_6.0" 0.8.11.4 + (arch=arm64|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, std::__va_list&, int, unsigned long&)@APTPKG_6.0" 0.8.11.4 + (arch=alpha|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag&, int, unsigned long&)@APTPKG_6.0" 0.8.11.4 + (arch=powerpc powerpcspe x32|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag (&) [1], int, unsigned int&)@APTPKG_6.0" 0.8.11.4 + (arch=amd64 kfreebsd-amd64 s390 s390x|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __va_list_tag (&) [1], int, unsigned long&)@APTPKG_6.0" 0.8.11.4 + (arch=hppa mips mipsel sparc|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, void*&, int, unsigned int&)@APTPKG_6.0" 0.8.11.4 + (arch=ia64 sparc64 mips64el|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, void*&, int, unsigned long&)@APTPKG_6.0" 0.8.11.4 1 + (arch=sh4|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, __builtin_va_list&, int, unsigned int&)@APTPKG_6.0" 0.8.11.4 + (arch=ppc64 ppc64el|c++)"GlobalError::InsertErrno(GlobalError::MsgType, char const*, char const*, char*&, int, unsigned long&)@APTPKG_6.0" 0.8.11.4 ### architecture specific: size_t - (arch=i386 armel armhf hppa hurd-i386 kfreebsd-i386 mips mipsel powerpc powerpcspe sh4 sparc x32|c++)"_strtabexpand(char*, unsigned int)@APTPKG_5.0" 0.8.0 - (arch=alpha amd64 arm64 ia64 kfreebsd-amd64 mips64el s390 s390x sparc64 ppc64 ppc64el|c++)"_strtabexpand(char*, unsigned long)@APTPKG_5.0" 0.8.0 + (arch=i386 armel armhf hppa hurd-i386 kfreebsd-i386 mips mipsel powerpc powerpcspe sh4 sparc x32|c++)"_strtabexpand(char*, unsigned int)@APTPKG_6.0" 0.8.0 + (arch=alpha amd64 arm64 ia64 kfreebsd-amd64 mips64el s390 s390x sparc64 ppc64 ppc64el|c++)"_strtabexpand(char*, unsigned long)@APTPKG_6.0" 0.8.0 ### architecture specific: time_t - (arch=!x32|c++)"TimeRFC1123[abi:cxx11](long)@APTPKG_5.0" 0.8.0 - (arch=x32|c++)"TimeRFC1123[abi:cxx11](long long)@APTPKG_5.0" 0.8.0 - (arch=!x32|c++)"FTPMDTMStrToTime(char const*, long&)@APTPKG_5.0" 0.8.0 - (arch=x32|c++)"FTPMDTMStrToTime(char const*, long long&)@APTPKG_5.0" 0.8.0 - (arch=!x32|c++)"StrToTime(std::__cxx11::basic_string, std::allocator > const&, long&)@APTPKG_5.0" 0.8.0 - (arch=x32|c++)"StrToTime(std::__cxx11::basic_string, std::allocator > const&, long long&)@APTPKG_5.0" 0.8.0 - (arch=!x32|c++)"RFC1123StrToTime(char const*, long&)@APTPKG_5.0" 0.8.0 - (arch=x32|c++)"RFC1123StrToTime(char const*, long long&)@APTPKG_5.0" 0.8.0 + (arch=!x32|c++)"FTPMDTMStrToTime(char const*, long&)@APTPKG_6.0" 0.8.0 + (arch=x32|c++)"FTPMDTMStrToTime(char const*, long long&)@APTPKG_6.0" 0.8.0 + (arch=x32|c++)"RFC1123StrToTime(char const*, long long&)@APTPKG_6.0" 0.8.0 + (arch=!x32|c++)"RFC1123StrToTime(std::__cxx11::basic_string, std::allocator > const&, long&)@APTPKG_6.0" 1.9.0 + (arch=x32|c++)"RFC1123StrToTime(std::__cxx11::basic_string, std::allocator > const&, long long&)@APTPKG_6.0" 1.9.0 ### architecture specific: mode_t - (arch=!kfreebsd-i386 !kfreebsd-amd64|c++)"ChangeOwnerAndPermissionOfFile(char const*, char const*, char const*, char const*, unsigned int)@APTPKG_5.0" 1.1~exp9 - (arch=kfreebsd-i386 kfreebsd-amd64|c++)"ChangeOwnerAndPermissionOfFile(char const*, char const*, char const*, char const*, unsigned short)@APTPKG_5.0" 1.1~exp9 + (arch=!kfreebsd-i386 !kfreebsd-amd64|c++)"ChangeOwnerAndPermissionOfFile(char const*, char const*, char const*, char const*, unsigned int)@APTPKG_6.0" 1.1~exp9 + (arch=kfreebsd-i386 kfreebsd-amd64|c++)"ChangeOwnerAndPermissionOfFile(char const*, char const*, char const*, char const*, unsigned short)@APTPKG_6.0" 1.1~exp9 ### - (c++)"CreateAPTDirectoryIfNeeded(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.2 - (c++)"FileFd::FileSize()@APTPKG_5.0" 0.8.8 - (c++)"Base256ToNum(char const*, unsigned long&, unsigned int)@APTPKG_5.0" 0.8.11 - (c++)"pkgDepCache::SetCandidateRelease(pkgCache::VerIterator, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::list, std::allocator > >&)@APTPKG_5.0" 0.8.11 - (c++)"pkgDepCache::SetCandidateRelease(pkgCache::VerIterator, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.11 - (c++)"RealFileExists(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.11 - (c++)"StripEpoch(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.11 - (c++)"pkgTagSection::FindFlag(unsigned long&, unsigned long, char const*, char const*)@APTPKG_5.0" 0.8.11 - (c++)"FindMountPointForDevice[abi:cxx11](char const*)@APTPKG_5.0" 0.8.12 - (c++)"pkgUdevCdromDevices::ScanForRemovable(bool)@APTPKG_5.0" 0.8.12 - (c++)"APT::Configuration::Compressor::Compressor(char const*, char const*, char const*, char const*, char const*, unsigned short)@APTPKG_5.0" 0.8.12 - (c++)"APT::Configuration::getCompressors(bool)@APTPKG_5.0" 0.8.12 - (c++)"APT::Configuration::getCompressorExtensions[abi:cxx11]()@APTPKG_5.0" 0.8.12 - (c++)"pkgCache::DepIterator::IsNegative() const@APTPKG_5.0" 0.8.15~exp1 - (c++)"Configuration::CndSet(char const*, int)@APTPKG_5.0" 0.8.15.3 - (c++)"pkgProblemResolver::InstOrNewPolicyBroken(pkgCache::PkgIterator)@APTPKG_5.0" 0.8.15.3 - (c++)"DeEscapeString(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.15.4 - (c++)"GetModificationTime(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.15.6 - (c++)"pkgSourceList::GetLastModifiedTime()@APTPKG_5.0" 0.8.15.6 - (c++)"pkgCacheFile::RemoveCaches()@APTPKG_5.0" 0.8.15.7 - (c++)"pkgOrderList::VisitNode(pkgCache::PkgIterator, char const*)@APTPKG_5.0" 0.8.15.7 + (c++)"CreateAPTDirectoryIfNeeded(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.2 + (c++)"FileFd::FileSize()@APTPKG_6.0" 0.8.8 + (c++)"Base256ToNum(char const*, unsigned long&, unsigned int)@APTPKG_6.0" 0.8.11 + (c++)"pkgDepCache::SetCandidateRelease(pkgCache::VerIterator, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::list, std::allocator > >&)@APTPKG_6.0" 0.8.11 + (c++)"pkgDepCache::SetCandidateRelease(pkgCache::VerIterator, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.11 + (c++)"RealFileExists(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.11 + (c++)"StripEpoch(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.11 + (c++)"pkgTagSection::FindFlag(unsigned long&, unsigned long, char const*, char const*)@APTPKG_6.0" 0.8.11 + (c++)"FindMountPointForDevice[abi:cxx11](char const*)@APTPKG_6.0" 0.8.12 + (c++)"pkgUdevCdromDevices::ScanForRemovable(bool)@APTPKG_6.0" 0.8.12 + (c++)"APT::Configuration::Compressor::Compressor(char const*, char const*, char const*, char const*, char const*, unsigned short)@APTPKG_6.0" 0.8.12 + (c++)"APT::Configuration::getCompressors(bool)@APTPKG_6.0" 0.8.12 + (c++)"APT::Configuration::getCompressorExtensions[abi:cxx11]()@APTPKG_6.0" 0.8.12 + (c++)"pkgCache::DepIterator::IsNegative() const@APTPKG_6.0" 0.8.15~exp1 + (c++)"Configuration::CndSet(char const*, int)@APTPKG_6.0" 0.8.15.3 + (c++)"pkgProblemResolver::InstOrNewPolicyBroken(pkgCache::PkgIterator)@APTPKG_6.0" 0.8.15.3 + (c++)"DeEscapeString(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.15.4 + (c++)"GetModificationTime(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.15.6 + (c++)"pkgSourceList::GetLastModifiedTime()@APTPKG_6.0" 0.8.15.6 + (c++)"pkgCacheFile::RemoveCaches()@APTPKG_6.0" 0.8.15.7 + (c++)"pkgOrderList::VisitNode(pkgCache::PkgIterator, char const*)@APTPKG_6.0" 0.8.15.7 ### external dependency resolver ### - (c++)"EDSP::WriteError(char const*, std::__cxx11::basic_string, std::allocator > const&, _IO_FILE*)@APTPKG_5.0" 0.8.16~exp2 - (c++)"EDSP::ReadRequest(int, std::__cxx11::list, std::allocator >, std::allocator, std::allocator > > >&, std::__cxx11::list, std::allocator >, std::allocator, std::allocator > > >&, bool&, bool&, bool&)@APTPKG_5.0" 0.8.16~exp2 - (c++)"EDSP::ApplyRequest(std::__cxx11::list, std::allocator >, std::allocator, std::allocator > > > const&, std::__cxx11::list, std::allocator >, std::allocator, std::allocator > > > const&, pkgDepCache&)@APTPKG_5.0" 0.8.16~exp2 - (c++)"EDSP::ReadResponse(int, pkgDepCache&, OpProgress*)@APTPKG_5.0" 0.8.16~exp2 - (c++)"EDSP::WriteRequest(pkgDepCache&, _IO_FILE*, bool, bool, bool, OpProgress*)@APTPKG_5.0" 0.8.16~exp2 - (c++)"EDSP::ExecuteSolver(char const*, int*, int*)@APTPKG_5.0" 0.8.16~exp2 - (c++)"EDSP::WriteProgress(unsigned short, char const*, _IO_FILE*)@APTPKG_5.0" 0.8.16~exp2 - (c++)"EDSP::WriteScenario(pkgDepCache&, _IO_FILE*, OpProgress*)@APTPKG_5.0" 0.8.16~exp2 - (c++)"EDSP::WriteSolution(pkgDepCache&, _IO_FILE*)@APTPKG_5.0" 0.8.16~exp2 - (c++)"EDSP::ResolveExternal(char const*, pkgDepCache&, bool, bool, bool, OpProgress*)@APTPKG_5.0" 0.8.16~exp2 - (c++)"pkgDepCache::Policy::GetPriority(pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.16~exp6 - (c++)"pkgDepCache::Policy::GetPriority(pkgCache::PkgFileIterator const&)@APTPKG_5.0" 0.8.16~exp6 + (c++)"EDSP::ApplyRequest(std::__cxx11::list, std::allocator >, std::allocator, std::allocator > > > const&, std::__cxx11::list, std::allocator >, std::allocator, std::allocator > > > const&, pkgDepCache&)@APTPKG_6.0" 0.8.16~exp2 + (c++)"EDSP::ReadResponse(int, pkgDepCache&, OpProgress*)@APTPKG_6.0" 0.8.16~exp2 + (c++)"pkgDepCache::Policy::GetPriority(pkgCache::PkgIterator const&)@APTPKG_6.0" 0.8.16~exp6 + (c++)"pkgDepCache::Policy::GetPriority(pkgCache::PkgFileIterator const&)@APTPKG_6.0" 0.8.16~exp6 ### generalisation of checksums (with lfs) -- mostly api-compatible available (without sha512 in previous versions) - (c++)"AddCRC16(unsigned short, void const*, unsigned long long)@APTPKG_5.0" 0.8.16~exp2 - (c++)"MD5Summation::Add(unsigned char const*, unsigned long long)@APTPKG_5.0" 0.8.16~exp6 - (c++)"MD5Summation::Result()@APTPKG_5.0" 0.8.16~exp2 - (c++)"MD5Summation::MD5Summation()@APTPKG_5.0" 0.8.16~exp2 - (c++)"SHA1Summation::SHA1Summation()@APTPKG_5.0" 0.8.16~exp2 - (c++)"SHA1Summation::Add(unsigned char const*, unsigned long long)@APTPKG_5.0" 0.8.16~exp6 - (c++)"SHA1Summation::Result()@APTPKG_5.0" 0.8.16~exp2 - (c++)"SummationImplementation::AddFD(int, unsigned long long)@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo for MD5Summation@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo for SHA1Summation@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo for SHA256Summation@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo for SHA512Summation@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo for SHA2SummationBase@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo for SummationImplementation@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo name for MD5Summation@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo name for SHA1Summation@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo name for SHA256Summation@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo name for SHA512Summation@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo name for SHA2SummationBase@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo name for SummationImplementation@APTPKG_5.0" 0.8.16~exp6 - (c++)"vtable for MD5Summation@APTPKG_5.0" 0.8.16~exp6 - (c++)"vtable for SHA1Summation@APTPKG_5.0" 0.8.16~exp6 - (c++)"vtable for SHA256Summation@APTPKG_5.0" 0.8.16~exp6 - (c++)"vtable for SHA512Summation@APTPKG_5.0" 0.8.16~exp6 ### large file support - available in older api-compatible versions without lfs ### - (c++)"StrToNum(char const*, unsigned long long&, unsigned int, unsigned int)@APTPKG_5.0" 0.8.16~exp6 - (c++)"OpProgress::SubProgress(unsigned long long, std::__cxx11::basic_string, std::allocator > const&, float)@APTPKG_5.0" 0.8.16~exp6 - (c++)"OpProgress::OverallProgress(unsigned long long, unsigned long long, unsigned long long, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.16~exp6 - (c++)"OpProgress::Progress(unsigned long long)@APTPKG_5.0" 0.8.16~exp6 - (c++)"SourceCopy::GetFile(std::__cxx11::basic_string, std::allocator >&, unsigned long long&)@APTPKG_5.0" 0.8.16~exp6 - (c++)"pkgAcquire::UriIterator::~UriIterator()@APTPKG_5.0" 0.8.16~exp6 - (c++)"pkgAcquire::MethodConfig::~MethodConfig()@APTPKG_5.0" 0.8.16~exp6 - (c++)"pkgTagFile::Jump(pkgTagSection&, unsigned long long)@APTPKG_5.0" 0.8.16~exp6 - (c++)"pkgTagFile::Offset()@APTPKG_5.0" 0.8.16~exp6 - (c++)"pkgTagFile::pkgTagFile(FileFd*, unsigned long long)@APTPKG_5.0" 0.8.16~exp6 - (c++)"DynamicMMap::RawAllocate(unsigned long long, unsigned long)@APTPKG_5.0" 0.8.16~exp6 - (c++)"PackageCopy::GetFile(std::__cxx11::basic_string, std::allocator >&, unsigned long long&)@APTPKG_5.0" 0.8.16~exp6 - (c++)"pkgTagSection::~pkgTagSection()@APTPKG_5.0" 0.8.16~exp6 - (c++)"pkgAcquireStatus::Fetched(unsigned long long, unsigned long long)@APTPKG_5.0" 0.8.16~exp6 - (c++)"FileFd::Read(void*, unsigned long long, unsigned long long*)@APTPKG_5.0" 0.8.16~exp6 - (c++)"FileFd::Seek(unsigned long long)@APTPKG_5.0" 0.8.16~exp6 - (c++)"FileFd::Skip(unsigned long long)@APTPKG_5.0" 0.8.16~exp6 - (c++)"FileFd::Write(void const*, unsigned long long)@APTPKG_5.0" 0.8.16~exp6 - (c++)"FileFd::Truncate(unsigned long long)@APTPKG_5.0" 0.8.16~exp6 - (c++)"pkgPolicy::GetPriority(pkgCache::PkgFileIterator const&)@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo for pkgTagFile@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo for pkgSrcRecords@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo for pkgAcquire::UriIterator@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo for pkgAcquire::MethodConfig@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo for pkgAcquire::Queue@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo for pkgAcquire::Worker@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo name for pkgTagFile@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo name for pkgSrcRecords@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo name for pkgAcquire::UriIterator@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo name for pkgAcquire::MethodConfig@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo name for pkgAcquire::Queue@APTPKG_5.0" 0.8.16~exp6 - (c++)"typeinfo name for pkgAcquire::Worker@APTPKG_5.0" 0.8.16~exp6 - (c++)"vtable for pkgTagFile@APTPKG_5.0" 0.8.16~exp6 - (c++)"vtable for pkgSrcRecords@APTPKG_5.0" 0.8.16~exp6 - (c++)"vtable for pkgAcquire::UriIterator@APTPKG_5.0" 0.8.16~exp6 - (c++)"vtable for pkgAcquire::MethodConfig@APTPKG_5.0" 0.8.16~exp6 - (c++)"vtable for pkgAcquire::Queue@APTPKG_5.0" 0.8.16~exp6 - (c++)"vtable for pkgAcquire::Worker@APTPKG_5.0" 0.8.16~exp6 + (c++)"StrToNum(char const*, unsigned long long&, unsigned int, unsigned int)@APTPKG_6.0" 0.8.16~exp6 + (c++)"OpProgress::SubProgress(unsigned long long, std::__cxx11::basic_string, std::allocator > const&, float)@APTPKG_6.0" 0.8.16~exp6 + (c++)"OpProgress::OverallProgress(unsigned long long, unsigned long long, unsigned long long, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.16~exp6 + (c++)"OpProgress::Progress(unsigned long long)@APTPKG_6.0" 0.8.16~exp6 + (c++)"SourceCopy::GetFile(std::__cxx11::basic_string, std::allocator >&, unsigned long long&)@APTPKG_6.0" 0.8.16~exp6 + (c++)"pkgAcquire::UriIterator::~UriIterator()@APTPKG_6.0" 0.8.16~exp6 + (c++)"pkgAcquire::MethodConfig::~MethodConfig()@APTPKG_6.0" 0.8.16~exp6 + (c++)"pkgTagFile::Jump(pkgTagSection&, unsigned long long)@APTPKG_6.0" 0.8.16~exp6 + (c++)"pkgTagFile::Offset()@APTPKG_6.0" 0.8.16~exp6 + (c++)"pkgTagFile::pkgTagFile(FileFd*, unsigned long long)@APTPKG_6.0" 0.8.16~exp6 + (c++)"DynamicMMap::RawAllocate(unsigned long long, unsigned long)@APTPKG_6.0" 0.8.16~exp6 + (c++)"PackageCopy::GetFile(std::__cxx11::basic_string, std::allocator >&, unsigned long long&)@APTPKG_6.0" 0.8.16~exp6 + (c++)"pkgTagSection::~pkgTagSection()@APTPKG_6.0" 0.8.16~exp6 + (c++)"pkgAcquireStatus::Fetched(unsigned long long, unsigned long long)@APTPKG_6.0" 0.8.16~exp6 + (c++)"FileFd::Read(void*, unsigned long long, unsigned long long*)@APTPKG_6.0" 0.8.16~exp6 + (c++)"FileFd::Seek(unsigned long long)@APTPKG_6.0" 0.8.16~exp6 + (c++)"FileFd::Skip(unsigned long long)@APTPKG_6.0" 0.8.16~exp6 + (c++)"FileFd::Write(void const*, unsigned long long)@APTPKG_6.0" 0.8.16~exp6 + (c++)"FileFd::Truncate(unsigned long long)@APTPKG_6.0" 0.8.16~exp6 + (c++)"pkgPolicy::GetPriority(pkgCache::PkgFileIterator const&)@APTPKG_6.0" 0.8.16~exp6 + (c++)"typeinfo for pkgTagFile@APTPKG_6.0" 0.8.16~exp6 + (c++)"typeinfo for pkgSrcRecords@APTPKG_6.0" 0.8.16~exp6 + (c++)"typeinfo for pkgAcquire::UriIterator@APTPKG_6.0" 0.8.16~exp6 + (c++)"typeinfo for pkgAcquire::MethodConfig@APTPKG_6.0" 0.8.16~exp6 + (c++)"typeinfo for pkgAcquire::Queue@APTPKG_6.0" 0.8.16~exp6 + (c++)"typeinfo for pkgAcquire::Worker@APTPKG_6.0" 0.8.16~exp6 + (c++)"typeinfo name for pkgTagFile@APTPKG_6.0" 0.8.16~exp6 + (c++)"typeinfo name for pkgSrcRecords@APTPKG_6.0" 0.8.16~exp6 + (c++)"typeinfo name for pkgAcquire::UriIterator@APTPKG_6.0" 0.8.16~exp6 + (c++)"typeinfo name for pkgAcquire::MethodConfig@APTPKG_6.0" 0.8.16~exp6 + (c++)"typeinfo name for pkgAcquire::Queue@APTPKG_6.0" 0.8.16~exp6 + (c++)"typeinfo name for pkgAcquire::Worker@APTPKG_6.0" 0.8.16~exp6 + (c++)"vtable for pkgTagFile@APTPKG_6.0" 0.8.16~exp6 + (c++)"vtable for pkgSrcRecords@APTPKG_6.0" 0.8.16~exp6 + (c++)"vtable for pkgAcquire::UriIterator@APTPKG_6.0" 0.8.16~exp6 + (c++)"vtable for pkgAcquire::MethodConfig@APTPKG_6.0" 0.8.16~exp6 + (c++)"vtable for pkgAcquire::Queue@APTPKG_6.0" 0.8.16~exp6 + (c++)"vtable for pkgAcquire::Worker@APTPKG_6.0" 0.8.16~exp6 ### remove deprecated parameter - (c++)"pkgDepCache::SetCandidateVersion(pkgCache::VerIterator)@APTPKG_5.0" 0.8.16~exp6 - (c++)"pkgDepCache::AddSizes(pkgCache::PkgIterator const&, bool)@APTPKG_5.0" 0.8.16~exp6 - (c++)"pkgDepCache::AddStates(pkgCache::PkgIterator const&, bool)@APTPKG_5.0" 0.8.16~exp6 + (c++)"pkgDepCache::SetCandidateVersion(pkgCache::VerIterator)@APTPKG_6.0" 0.8.16~exp6 + (c++)"pkgDepCache::AddSizes(pkgCache::PkgIterator const&, bool)@APTPKG_6.0" 0.8.16~exp6 + (c++)"pkgDepCache::AddStates(pkgCache::PkgIterator const&, bool)@APTPKG_6.0" 0.8.16~exp6 ### used internally by public interfaces - if you use them directly, you can keep the pieces - (c++|optional=internal|regex)"^SHA256_.*@APTPKG_5.0$" 0.8.16~exp2 - (c++|optional=internal|regex)"^SHA384_.*@APTPKG_5.0$" 0.8.16~exp2 - (c++|optional=internal|regex)"^SHA512_.*@APTPKG_5.0$" 0.8.16~exp2 ### orderlist rework: the touched methods are protected - (c++)"SigINT(int)@APTPKG_5.0" 0.8.16~exp14 - (c++)"pkgPackageManager::SigINTStop@APTPKG_5.0" 0.8.16~exp14 - (c++)"pkgPackageManager::SmartUnPack(pkgCache::PkgIterator, bool, int)@APTPKG_5.0" 0.8.16~exp14 - (c++)"pkgPackageManager::SmartConfigure(pkgCache::PkgIterator, int)@APTPKG_5.0" 0.8.16~exp14 + (c++)"SigINT(int)@APTPKG_6.0" 0.8.16~exp14 + (c++)"pkgPackageManager::SigINTStop@APTPKG_6.0" 0.8.16~exp14 + (c++)"pkgPackageManager::SmartUnPack(pkgCache::PkgIterator, bool, int)@APTPKG_6.0" 0.8.16~exp14 + (c++)"pkgPackageManager::SmartConfigure(pkgCache::PkgIterator, int)@APTPKG_6.0" 0.8.16~exp14 ### FileFd rework: supporting different on-the-fly (de)compressing needs more parameter (abi), but the api is stable - (c++)"FileFd::OpenDescriptor(int, unsigned int, FileFd::CompressMode, bool)@APTPKG_5.0" 0.8.16~exp9 - (c++)"FileFd::OpenDescriptor(int, unsigned int, APT::Configuration::Compressor const&, bool)@APTPKG_5.0" 0.8.16~exp9 - (c++)"FileFd::ModificationTime()@APTPKG_5.0" 0.8.16~exp9 - (c++)"FileFd::Open(std::__cxx11::basic_string, std::allocator >, unsigned int, FileFd::CompressMode, unsigned long)@APTPKG_5.0" 0.8.16~exp9 - (c++)"FileFd::Open(std::__cxx11::basic_string, std::allocator >, unsigned int, APT::Configuration::Compressor const&, unsigned long)@APTPKG_5.0" 0.8.16~exp9 - (c++)"FileFd::ReadLine(char*, unsigned long long)@APTPKG_5.0" 0.8.16~exp9 - (c++)"SummationImplementation::AddFD(FileFd&, unsigned long long)@APTPKG_5.0" 0.8.16~exp9 - (c++|optional=deprecated,previous-inline)"FileFd::gzFd()@APTPKG_5.0" 0.8.0 + (c++)"FileFd::OpenDescriptor(int, unsigned int, FileFd::CompressMode, bool)@APTPKG_6.0" 0.8.16~exp9 + (c++)"FileFd::OpenDescriptor(int, unsigned int, APT::Configuration::Compressor const&, bool)@APTPKG_6.0" 0.8.16~exp9 + (c++)"FileFd::ModificationTime()@APTPKG_6.0" 0.8.16~exp9 + (c++)"FileFd::Open(std::__cxx11::basic_string, std::allocator >, unsigned int, FileFd::CompressMode, unsigned long)@APTPKG_6.0" 0.8.16~exp9 + (c++)"FileFd::Open(std::__cxx11::basic_string, std::allocator >, unsigned int, APT::Configuration::Compressor const&, unsigned long)@APTPKG_6.0" 0.8.16~exp9 + (c++)"FileFd::ReadLine(char*, unsigned long long)@APTPKG_6.0" 0.8.16~exp9 ### CacheSet rework: making them real containers breaks bigtime the API (for the CacheSetHelper) - (c++)"APT::CacheSetHelper::canNotFindTask(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::CacheSetHelper::canNotFindRegEx(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::CacheSetHelper::canNotFindAllVer(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::CacheSetHelper::canNotFindPackage(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::CacheSetHelper::showTaskSelection(pkgCache::PkgIterator const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::CacheSetHelper::showRegExSelection(pkgCache::PkgIterator const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::CacheSetHelper::showSelectedVersion(pkgCache::PkgIterator const&, pkgCache::VerIterator, std::__cxx11::basic_string, std::allocator > const&, bool)@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::CacheSetHelper::canNotFindCandInstVer(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::CacheSetHelper::canNotFindInstCandVer(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::VersionContainerInterface::getCandidateVer(pkgCacheFile&, pkgCache::PkgIterator const&, APT::CacheSetHelper&)@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::VersionContainerInterface::getInstalledVer(pkgCacheFile&, pkgCache::PkgIterator const&, APT::CacheSetHelper&)@APTPKG_5.0" 0.8.16~exp9 - (c++)"APT::VersionContainerInterface::FromModifierCommandLine(unsigned short&, APT::VersionContainerInterface*, pkgCacheFile&, char const*, std::__cxx11::list > const&, APT::CacheSetHelper&)@APTPKG_5.0" 0.8.16~exp9 - (c++)"EDSP::WriteLimitedScenario(pkgDepCache&, _IO_FILE*, APT::PackageContainer, std::allocator > > const&, OpProgress*)@APTPKG_5.0" 0.8.16~exp9 - (c++)"typeinfo for APT::PackageContainerInterface@APTPKG_5.0" 0.8.16~exp9 - (c++)"typeinfo for APT::VersionContainerInterface@APTPKG_5.0" 0.8.16~exp9 - (c++)"typeinfo name for APT::PackageContainerInterface@APTPKG_5.0" 0.8.16~exp9 - (c++)"typeinfo name for APT::VersionContainerInterface@APTPKG_5.0" 0.8.16~exp9 - (c++)"vtable for APT::PackageContainerInterface@APTPKG_5.0" 0.8.16~exp9 - (c++)"vtable for APT::VersionContainerInterface@APTPKG_5.0" 0.8.16~exp9 + (c++)"APT::CacheSetHelper::canNotFindTask(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.16~exp9 + (c++)"APT::CacheSetHelper::canNotFindRegEx(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.8.16~exp9 + (c++)"APT::CacheSetHelper::canNotFindAllVer(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_6.0" 0.8.16~exp9 + (c++)"APT::CacheSetHelper::canNotFindPackage(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.16~exp9 + (c++)"APT::CacheSetHelper::showTaskSelection(pkgCache::PkgIterator const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.16~exp9 + (c++)"APT::CacheSetHelper::showRegExSelection(pkgCache::PkgIterator const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.8.16~exp9 + (c++)"APT::CacheSetHelper::showSelectedVersion(pkgCache::PkgIterator const&, pkgCache::VerIterator, std::__cxx11::basic_string, std::allocator > const&, bool)@APTPKG_6.0" 0.8.16~exp9 + (c++)"APT::CacheSetHelper::canNotFindCandInstVer(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_6.0" 0.8.16~exp9 + (c++)"APT::CacheSetHelper::canNotFindInstCandVer(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_6.0" 0.8.16~exp9 + (c++)"APT::VersionContainerInterface::getCandidateVer(pkgCacheFile&, pkgCache::PkgIterator const&, APT::CacheSetHelper&)@APTPKG_6.0" 0.8.16~exp9 + (c++)"APT::VersionContainerInterface::getInstalledVer(pkgCacheFile&, pkgCache::PkgIterator const&, APT::CacheSetHelper&)@APTPKG_6.0" 0.8.16~exp9 + (c++)"APT::VersionContainerInterface::FromModifierCommandLine(unsigned short&, APT::VersionContainerInterface*, pkgCacheFile&, char const*, std::__cxx11::list > const&, APT::CacheSetHelper&)@APTPKG_6.0" 0.8.16~exp9 + (c++)"typeinfo for APT::PackageContainerInterface@APTPKG_6.0" 0.8.16~exp9 + (c++)"typeinfo for APT::VersionContainerInterface@APTPKG_6.0" 0.8.16~exp9 + (c++)"typeinfo name for APT::PackageContainerInterface@APTPKG_6.0" 0.8.16~exp9 + (c++)"typeinfo name for APT::VersionContainerInterface@APTPKG_6.0" 0.8.16~exp9 + (c++)"vtable for APT::PackageContainerInterface@APTPKG_6.0" 0.8.16~exp9 + (c++)"vtable for APT::VersionContainerInterface@APTPKG_6.0" 0.8.16~exp9 ### rework of the packagemanager rework - (c++)"APT::Progress::PackageManagerFancy::HandleSIGWINCH(int)@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerFancy::~PackageManagerFancy()@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerFancy::PackageManagerFancy()@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerFancy::SetupTerminalScrollArea(int)@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerFancy::StatusChanged(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerFancy::Stop()@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManager::~PackageManager()@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerProgressDeb822Fd::ConffilePrompt(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerProgressDeb822Fd::Error(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerProgressDeb822Fd::~PackageManagerProgressDeb822Fd()@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerProgressDeb822Fd::PackageManagerProgressDeb822Fd(int)@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerProgressDeb822Fd::StartDpkg()@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerProgressDeb822Fd::StatusChanged(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerProgressDeb822Fd::Stop()@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerProgressDeb822Fd::WriteToStatusFd(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerProgressFactory()@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerProgressFd::ConffilePrompt(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerProgressFd::Error(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerProgressFd::~PackageManagerProgressFd()@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerProgressFd::PackageManagerProgressFd(int)@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerProgressFd::StartDpkg()@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerProgressFd::StatusChanged(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerProgressFd::Stop()@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerProgressFd::WriteToStatusFd(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManager::StatusChanged(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerText::~PackageManagerText()@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerText::StatusChanged(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::String::Strip(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.9.13~exp1 - (c++)"pkgDPkgPM::BuildPackagesProgressMap()@APTPKG_5.0" 0.9.13~exp1 - (c++)"pkgDPkgPM::DoDpkgStatusFd(int)@APTPKG_5.0" 0.9.13~exp1 - (c++)"pkgDPkgPM::ProcessDpkgStatusLine(char*)@APTPKG_5.0" 0.9.13~exp1 - (c++)"pkgDPkgPM::StartPtyMagic()@APTPKG_5.0" 0.9.13~exp1 - (c++)"pkgDPkgPM::StopPtyMagic()@APTPKG_5.0" 0.9.13~exp1 - (c++)"typeinfo for APT::Progress::PackageManager@APTPKG_5.0" 0.9.13~exp1 - (c++)"typeinfo for APT::Progress::PackageManagerFancy@APTPKG_5.0" 0.9.13~exp1 - (c++)"typeinfo for APT::Progress::PackageManagerProgressDeb822Fd@APTPKG_5.0" 0.9.13~exp1 - (c++)"typeinfo for APT::Progress::PackageManagerProgressFd@APTPKG_5.0" 0.9.13~exp1 - (c++)"typeinfo for APT::Progress::PackageManagerText@APTPKG_5.0" 0.9.13~exp1 - (c++)"typeinfo name for APT::Progress::PackageManager@APTPKG_5.0" 0.9.13~exp1 - (c++)"typeinfo name for APT::Progress::PackageManagerFancy@APTPKG_5.0" 0.9.13~exp1 - (c++)"typeinfo name for APT::Progress::PackageManagerProgressDeb822Fd@APTPKG_5.0" 0.9.13~exp1 - (c++)"typeinfo name for APT::Progress::PackageManagerProgressFd@APTPKG_5.0" 0.9.13~exp1 - (c++)"typeinfo name for APT::Progress::PackageManagerText@APTPKG_5.0" 0.9.13~exp1 - (c++)"vtable for APT::Progress::PackageManager@APTPKG_5.0" 0.9.13~exp1 - (c++)"vtable for APT::Progress::PackageManagerFancy@APTPKG_5.0" 0.9.13~exp1 - (c++)"vtable for APT::Progress::PackageManagerProgressDeb822Fd@APTPKG_5.0" 0.9.13~exp1 - (c++)"vtable for APT::Progress::PackageManagerProgressFd@APTPKG_5.0" 0.9.13~exp1 - (c++)"vtable for APT::Progress::PackageManagerText@APTPKG_5.0" 0.9.13~exp1 - (c++)"APT::Progress::PackageManagerFancy::instances@APTPKG_5.0" 0.9.14.2 - (c++)"APT::Progress::PackageManagerFancy::Start(int)@APTPKG_5.0" 0.9.14.2 + (c++)"APT::Progress::PackageManagerFancy::HandleSIGWINCH(int)@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerFancy::~PackageManagerFancy()@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerFancy::PackageManagerFancy()@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerFancy::SetupTerminalScrollArea(int)@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerFancy::StatusChanged(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerFancy::Stop()@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManager::~PackageManager()@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerProgressDeb822Fd::ConffilePrompt(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerProgressDeb822Fd::Error(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerProgressDeb822Fd::~PackageManagerProgressDeb822Fd()@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerProgressDeb822Fd::PackageManagerProgressDeb822Fd(int)@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerProgressDeb822Fd::StartDpkg()@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerProgressDeb822Fd::StatusChanged(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerProgressDeb822Fd::Stop()@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerProgressDeb822Fd::WriteToStatusFd(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerProgressFactory()@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerProgressFd::ConffilePrompt(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerProgressFd::Error(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerProgressFd::~PackageManagerProgressFd()@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerProgressFd::PackageManagerProgressFd(int)@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerProgressFd::StartDpkg()@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerProgressFd::StatusChanged(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerProgressFd::Stop()@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerProgressFd::WriteToStatusFd(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManager::StatusChanged(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerText::~PackageManagerText()@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerText::StatusChanged(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned int, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::String::Strip(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.9.13~exp1 + (c++)"pkgDPkgPM::BuildPackagesProgressMap()@APTPKG_6.0" 0.9.13~exp1 + (c++)"pkgDPkgPM::DoDpkgStatusFd(int)@APTPKG_6.0" 0.9.13~exp1 + (c++)"pkgDPkgPM::ProcessDpkgStatusLine(char*)@APTPKG_6.0" 0.9.13~exp1 + (c++)"pkgDPkgPM::StartPtyMagic()@APTPKG_6.0" 0.9.13~exp1 + (c++)"pkgDPkgPM::StopPtyMagic()@APTPKG_6.0" 0.9.13~exp1 + (c++)"typeinfo for APT::Progress::PackageManager@APTPKG_6.0" 0.9.13~exp1 + (c++)"typeinfo for APT::Progress::PackageManagerFancy@APTPKG_6.0" 0.9.13~exp1 + (c++)"typeinfo for APT::Progress::PackageManagerProgressDeb822Fd@APTPKG_6.0" 0.9.13~exp1 + (c++)"typeinfo for APT::Progress::PackageManagerProgressFd@APTPKG_6.0" 0.9.13~exp1 + (c++)"typeinfo for APT::Progress::PackageManagerText@APTPKG_6.0" 0.9.13~exp1 + (c++)"typeinfo name for APT::Progress::PackageManager@APTPKG_6.0" 0.9.13~exp1 + (c++)"typeinfo name for APT::Progress::PackageManagerFancy@APTPKG_6.0" 0.9.13~exp1 + (c++)"typeinfo name for APT::Progress::PackageManagerProgressDeb822Fd@APTPKG_6.0" 0.9.13~exp1 + (c++)"typeinfo name for APT::Progress::PackageManagerProgressFd@APTPKG_6.0" 0.9.13~exp1 + (c++)"typeinfo name for APT::Progress::PackageManagerText@APTPKG_6.0" 0.9.13~exp1 + (c++)"vtable for APT::Progress::PackageManager@APTPKG_6.0" 0.9.13~exp1 + (c++)"vtable for APT::Progress::PackageManagerFancy@APTPKG_6.0" 0.9.13~exp1 + (c++)"vtable for APT::Progress::PackageManagerProgressDeb822Fd@APTPKG_6.0" 0.9.13~exp1 + (c++)"vtable for APT::Progress::PackageManagerProgressFd@APTPKG_6.0" 0.9.13~exp1 + (c++)"vtable for APT::Progress::PackageManagerText@APTPKG_6.0" 0.9.13~exp1 + (c++)"APT::Progress::PackageManagerFancy::instances@APTPKG_6.0" 0.9.14.2 + (c++)"APT::Progress::PackageManagerFancy::Start(int)@APTPKG_6.0" 0.9.14.2 ### install foo.deb support - (c++)"flAbsPath(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 1.1~exp1 - (c++)"metaIndex::~metaIndex()@APTPKG_5.0" 1.1~exp1 + (c++)"flAbsPath(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 1.1~exp1 + (c++)"metaIndex::~metaIndex()@APTPKG_6.0" 1.1~exp1 ### CacheFilter functors - (c++)"APT::CacheFilter::ANDMatcher::AND(APT::CacheFilter::Matcher*)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ANDMatcher::ANDMatcher(APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ANDMatcher::ANDMatcher(APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ANDMatcher::ANDMatcher(APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ANDMatcher::ANDMatcher(APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ANDMatcher::ANDMatcher(APT::CacheFilter::Matcher*)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ANDMatcher::ANDMatcher()@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ANDMatcher::~ANDMatcher()@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ANDMatcher::operator()(pkgCache::GrpIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ANDMatcher::operator()(pkgCache::PkgIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ANDMatcher::operator()(pkgCache::VerIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::FalseMatcher::operator()(pkgCache::GrpIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::FalseMatcher::operator()(pkgCache::PkgIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::FalseMatcher::operator()(pkgCache::VerIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::Matcher::~Matcher()@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::NOTMatcher::NOTMatcher(APT::CacheFilter::Matcher*)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::NOTMatcher::~NOTMatcher()@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::NOTMatcher::operator()(pkgCache::GrpIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::NOTMatcher::operator()(pkgCache::PkgIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::NOTMatcher::operator()(pkgCache::VerIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ORMatcher::operator()(pkgCache::GrpIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ORMatcher::operator()(pkgCache::PkgIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ORMatcher::operator()(pkgCache::VerIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ORMatcher::OR(APT::CacheFilter::Matcher*)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ORMatcher::ORMatcher(APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ORMatcher::ORMatcher(APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ORMatcher::ORMatcher(APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ORMatcher::ORMatcher(APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ORMatcher::ORMatcher(APT::CacheFilter::Matcher*)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ORMatcher::~ORMatcher()@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::ORMatcher::ORMatcher()@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::PackageIsNewInstall::operator()(pkgCache::PkgIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::PackageIsNewInstall::~PackageIsNewInstall()@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::PackageIsNewInstall::PackageIsNewInstall(pkgCacheFile*)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::PackageMatcher::~PackageMatcher()@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::PackageNameMatchesFnmatch::PackageNameMatchesFnmatch(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::TrueMatcher::operator()(pkgCache::GrpIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::TrueMatcher::operator()(pkgCache::PkgIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheFilter::TrueMatcher::operator()(pkgCache::VerIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo for APT::CacheFilter::ANDMatcher@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo for APT::CacheFilter::FalseMatcher@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo for APT::CacheFilter::Matcher@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo for APT::CacheFilter::NOTMatcher@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo for APT::CacheFilter::ORMatcher@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo for APT::CacheFilter::PackageArchitectureMatchesSpecification@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo for APT::CacheFilter::PackageIsNewInstall@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo for APT::CacheFilter::PackageMatcher@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo for APT::CacheFilter::PackageNameMatchesFnmatch@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo for APT::CacheFilter::PackageNameMatchesRegEx@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo for APT::CacheFilter::TrueMatcher@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo name for APT::CacheFilter::ANDMatcher@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo name for APT::CacheFilter::FalseMatcher@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo name for APT::CacheFilter::Matcher@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo name for APT::CacheFilter::NOTMatcher@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo name for APT::CacheFilter::ORMatcher@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo name for APT::CacheFilter::PackageArchitectureMatchesSpecification@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo name for APT::CacheFilter::PackageIsNewInstall@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo name for APT::CacheFilter::PackageMatcher@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo name for APT::CacheFilter::PackageNameMatchesFnmatch@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo name for APT::CacheFilter::PackageNameMatchesRegEx@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo name for APT::CacheFilter::TrueMatcher@APTPKG_5.0" 1.1~exp4 - (c++)"vtable for APT::CacheFilter::ANDMatcher@APTPKG_5.0" 1.1~exp4 - (c++)"vtable for APT::CacheFilter::FalseMatcher@APTPKG_5.0" 1.1~exp4 - (c++)"vtable for APT::CacheFilter::Matcher@APTPKG_5.0" 1.1~exp4 - (c++)"vtable for APT::CacheFilter::NOTMatcher@APTPKG_5.0" 1.1~exp4 - (c++)"vtable for APT::CacheFilter::ORMatcher@APTPKG_5.0" 1.1~exp4 - (c++)"vtable for APT::CacheFilter::PackageArchitectureMatchesSpecification@APTPKG_5.0" 1.1~exp4 - (c++)"vtable for APT::CacheFilter::PackageIsNewInstall@APTPKG_5.0" 1.1~exp4 - (c++)"vtable for APT::CacheFilter::PackageMatcher@APTPKG_5.0" 1.1~exp4 - (c++)"vtable for APT::CacheFilter::PackageNameMatchesFnmatch@APTPKG_5.0" 1.1~exp4 - (c++)"vtable for APT::CacheFilter::PackageNameMatchesRegEx@APTPKG_5.0" 1.1~exp4 - (c++)"vtable for APT::CacheFilter::TrueMatcher@APTPKG_5.0" 1.1~exp4 + (c++)"APT::CacheFilter::ANDMatcher::AND(APT::CacheFilter::Matcher*)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ANDMatcher::ANDMatcher(APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ANDMatcher::ANDMatcher(APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ANDMatcher::ANDMatcher(APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ANDMatcher::ANDMatcher(APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ANDMatcher::ANDMatcher(APT::CacheFilter::Matcher*)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ANDMatcher::ANDMatcher()@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ANDMatcher::~ANDMatcher()@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ANDMatcher::operator()(pkgCache::GrpIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ANDMatcher::operator()(pkgCache::PkgIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ANDMatcher::operator()(pkgCache::VerIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::FalseMatcher::operator()(pkgCache::GrpIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::FalseMatcher::operator()(pkgCache::PkgIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::FalseMatcher::operator()(pkgCache::VerIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::Matcher::~Matcher()@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::NOTMatcher::NOTMatcher(APT::CacheFilter::Matcher*)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::NOTMatcher::~NOTMatcher()@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::NOTMatcher::operator()(pkgCache::GrpIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::NOTMatcher::operator()(pkgCache::PkgIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::NOTMatcher::operator()(pkgCache::VerIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ORMatcher::operator()(pkgCache::GrpIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ORMatcher::operator()(pkgCache::PkgIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ORMatcher::operator()(pkgCache::VerIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ORMatcher::OR(APT::CacheFilter::Matcher*)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ORMatcher::ORMatcher(APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ORMatcher::ORMatcher(APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ORMatcher::ORMatcher(APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ORMatcher::ORMatcher(APT::CacheFilter::Matcher*, APT::CacheFilter::Matcher*)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ORMatcher::ORMatcher(APT::CacheFilter::Matcher*)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ORMatcher::~ORMatcher()@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::ORMatcher::ORMatcher()@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::PackageIsNewInstall::operator()(pkgCache::PkgIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::PackageIsNewInstall::~PackageIsNewInstall()@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::PackageIsNewInstall::PackageIsNewInstall(pkgCacheFile*)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::PackageMatcher::~PackageMatcher()@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::PackageNameMatchesFnmatch::PackageNameMatchesFnmatch(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::TrueMatcher::operator()(pkgCache::GrpIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::TrueMatcher::operator()(pkgCache::PkgIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheFilter::TrueMatcher::operator()(pkgCache::VerIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo for APT::CacheFilter::ANDMatcher@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo for APT::CacheFilter::FalseMatcher@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo for APT::CacheFilter::Matcher@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo for APT::CacheFilter::NOTMatcher@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo for APT::CacheFilter::ORMatcher@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo for APT::CacheFilter::PackageArchitectureMatchesSpecification@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo for APT::CacheFilter::PackageIsNewInstall@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo for APT::CacheFilter::PackageMatcher@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo for APT::CacheFilter::PackageNameMatchesFnmatch@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo for APT::CacheFilter::PackageNameMatchesRegEx@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo for APT::CacheFilter::TrueMatcher@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo name for APT::CacheFilter::ANDMatcher@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo name for APT::CacheFilter::FalseMatcher@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo name for APT::CacheFilter::Matcher@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo name for APT::CacheFilter::NOTMatcher@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo name for APT::CacheFilter::ORMatcher@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo name for APT::CacheFilter::PackageArchitectureMatchesSpecification@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo name for APT::CacheFilter::PackageIsNewInstall@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo name for APT::CacheFilter::PackageMatcher@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo name for APT::CacheFilter::PackageNameMatchesFnmatch@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo name for APT::CacheFilter::PackageNameMatchesRegEx@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo name for APT::CacheFilter::TrueMatcher@APTPKG_6.0" 1.1~exp4 + (c++)"vtable for APT::CacheFilter::ANDMatcher@APTPKG_6.0" 1.1~exp4 + (c++)"vtable for APT::CacheFilter::FalseMatcher@APTPKG_6.0" 1.1~exp4 + (c++)"vtable for APT::CacheFilter::Matcher@APTPKG_6.0" 1.1~exp4 + (c++)"vtable for APT::CacheFilter::NOTMatcher@APTPKG_6.0" 1.1~exp4 + (c++)"vtable for APT::CacheFilter::ORMatcher@APTPKG_6.0" 1.1~exp4 + (c++)"vtable for APT::CacheFilter::PackageArchitectureMatchesSpecification@APTPKG_6.0" 1.1~exp4 + (c++)"vtable for APT::CacheFilter::PackageIsNewInstall@APTPKG_6.0" 1.1~exp4 + (c++)"vtable for APT::CacheFilter::PackageMatcher@APTPKG_6.0" 1.1~exp4 + (c++)"vtable for APT::CacheFilter::PackageNameMatchesFnmatch@APTPKG_6.0" 1.1~exp4 + (c++)"vtable for APT::CacheFilter::PackageNameMatchesRegEx@APTPKG_6.0" 1.1~exp4 + (c++)"vtable for APT::CacheFilter::TrueMatcher@APTPKG_6.0" 1.1~exp4 ### cacheset redesign (API, but not ABI compatible) -# (c++|optional=inline)"APT::PackageContainerInterface::FromCommandLine(APT::PackageContainerInterface*, pkgCacheFile&, char const**, APT::CacheSetHelper&)@APTPKG_5.0" 0.8.16~exp9 -# (c++|optional=inline)"APT::PackageContainerInterface::FromModifierCommandLine(unsigned short&, APT::PackageContainerInterface*, pkgCacheFile&, char const*, std::__cxx11::list > const&, APT::CacheSetHelper&)@APTPKG_5.0" 0.8.16~exp9 -# (c++|optional=inline)"APT::PackageContainerInterface::FromName(pkgCacheFile&, std::__cxx11::basic_string, std::allocator > const&, APT::CacheSetHelper&)@APTPKG_5.0" 0.8.16~exp9 -# (c++|optional=inline)"APT::PackageContainerInterface::FromTask(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >, APT::CacheSetHelper&)@APTPKG_5.0" 0.8.16~exp9 -# (c++|optional=inline)"APT::PackageContainerInterface::FromRegEx(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >, APT::CacheSetHelper&)@APTPKG_5.0" 0.8.16~exp9 -# (c++|optional=inline)"APT::VersionContainerInterface::FromString(APT::VersionContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >, APT::VersionContainerInterface::Version const&, APT::CacheSetHelper&, bool)@APTPKG_5.0" 0.8.16~exp9 -# (c++|optional=inline)"APT::VersionContainerInterface::FromPackage(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&, APT::VersionContainerInterface::Version const&, APT::CacheSetHelper&)@APTPKG_5.0" 0.8.16~exp9 -# (c++|optional=inline)"APT::VersionContainerInterface::FromCommandLine(APT::VersionContainerInterface*, pkgCacheFile&, char const**, APT::VersionContainerInterface::Version const&, APT::CacheSetHelper&)@APTPKG_5.0" 0.8.16~exp9 -# (c++)"APT::PackageContainerInterface::FromString(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator > const&, APT::CacheSetHelper&)@APTPKG_5.0" 0.8.16~exp9 -# (c++)"APT::PackageContainerInterface::FromGroup(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >, APT::CacheSetHelper&)@APTPKG_5.0" 0.9.7 -# (c++)"APT::PackageContainerInterface::FromFnmatch(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >, APT::CacheSetHelper&)@APTPKG_5.0" 0.9.11 - (c++)"APT::CacheSetHelper::canNotFindFnmatch(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheSetHelper::canNotFindPackage(APT::CacheSetHelper::PkgSelector, APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheSetHelper::canNotFindVersion(APT::CacheSetHelper::VerSelector, APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheSetHelper::canNotGetCandInstVer(pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheSetHelper::canNotGetInstCandVer(pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheSetHelper::canNotGetVersion(APT::CacheSetHelper::VerSelector, pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheSetHelper::PackageFrom(APT::CacheSetHelper::PkgSelector, APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheSetHelper::PackageFromCommandLine(APT::PackageContainerInterface*, pkgCacheFile&, char const**)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheSetHelper::PackageFromFnmatch(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheSetHelper::PackageFromModifierCommandLine(unsigned short&, APT::PackageContainerInterface*, pkgCacheFile&, char const*, std::__cxx11::list > const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheSetHelper::PackageFromName(pkgCacheFile&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheSetHelper::PackageFromPackageName(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheSetHelper::PackageFromRegEx(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheSetHelper::PackageFromString(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheSetHelper::PackageFromTask(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheSetHelper::showFnmatchSelection(pkgCache::PkgIterator const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheSetHelper::showPackageSelection(pkgCache::PkgIterator const&, APT::CacheSetHelper::PkgSelector, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::CacheSetHelper::showVersionSelection(pkgCache::PkgIterator const&, pkgCache::VerIterator const&, APT::CacheSetHelper::VerSelector, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::VersionContainerInterface::FromCommandLine(APT::VersionContainerInterface*, pkgCacheFile&, char const**, APT::CacheSetHelper::VerSelector, APT::CacheSetHelper&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::VersionContainerInterface::FromPackage(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&, APT::CacheSetHelper::VerSelector, APT::CacheSetHelper&)@APTPKG_5.0" 1.1~exp4 - (c++)"APT::VersionContainerInterface::FromString(APT::VersionContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >, APT::CacheSetHelper::VerSelector, APT::CacheSetHelper&, bool)@APTPKG_5.0" 1.1~exp4 - (c++)"typeinfo for APT::PackageContainer, std::allocator > >@APTPKG_5.0" 0.8.16~exp9 - (c++)"typeinfo for APT::PackageContainer > >@APTPKG_5.0" 0.8.16~exp9 - (c++)"typeinfo for APT::VersionContainer > >@APTPKG_5.0" 0.8.16~exp9 - (c++)"typeinfo name for APT::PackageContainer, std::allocator > >@APTPKG_5.0" 0.8.16~exp9 - (c++)"typeinfo name for APT::PackageContainer > >@APTPKG_5.0" 0.8.16~exp9 - (c++)"typeinfo name for APT::VersionContainer > >@APTPKG_5.0" 0.8.16~exp9 - (c++)"vtable for APT::PackageContainer, std::allocator > >@APTPKG_5.0" 0.8.16~exp9 - (c++)"vtable for APT::PackageContainer > >@APTPKG_5.0" 0.8.16~exp9 - (c++)"vtable for APT::VersionContainer > >@APTPKG_5.0" 0.8.16~exp9 - (c++)"typeinfo for APT::VersionContainer > >@APTPKG_5.0" 1.1~exp15 - (c++)"typeinfo name for APT::VersionContainer > >@APTPKG_5.0" 1.1~exp15 - (c++)"vtable for APT::VersionContainer > >@APTPKG_5.0" 1.1~exp15 +# (c++|optional=inline)"APT::PackageContainerInterface::FromCommandLine(APT::PackageContainerInterface*, pkgCacheFile&, char const**, APT::CacheSetHelper&)@APTPKG_6.0" 0.8.16~exp9 +# (c++|optional=inline)"APT::PackageContainerInterface::FromModifierCommandLine(unsigned short&, APT::PackageContainerInterface*, pkgCacheFile&, char const*, std::__cxx11::list > const&, APT::CacheSetHelper&)@APTPKG_6.0" 0.8.16~exp9 +# (c++|optional=inline)"APT::PackageContainerInterface::FromName(pkgCacheFile&, std::__cxx11::basic_string, std::allocator > const&, APT::CacheSetHelper&)@APTPKG_6.0" 0.8.16~exp9 +# (c++|optional=inline)"APT::PackageContainerInterface::FromTask(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >, APT::CacheSetHelper&)@APTPKG_6.0" 0.8.16~exp9 +# (c++|optional=inline)"APT::PackageContainerInterface::FromRegEx(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >, APT::CacheSetHelper&)@APTPKG_6.0" 0.8.16~exp9 +# (c++|optional=inline)"APT::VersionContainerInterface::FromString(APT::VersionContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >, APT::VersionContainerInterface::Version const&, APT::CacheSetHelper&, bool)@APTPKG_6.0" 0.8.16~exp9 +# (c++|optional=inline)"APT::VersionContainerInterface::FromPackage(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&, APT::VersionContainerInterface::Version const&, APT::CacheSetHelper&)@APTPKG_6.0" 0.8.16~exp9 +# (c++|optional=inline)"APT::VersionContainerInterface::FromCommandLine(APT::VersionContainerInterface*, pkgCacheFile&, char const**, APT::VersionContainerInterface::Version const&, APT::CacheSetHelper&)@APTPKG_6.0" 0.8.16~exp9 +# (c++)"APT::PackageContainerInterface::FromString(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator > const&, APT::CacheSetHelper&)@APTPKG_6.0" 0.8.16~exp9 +# (c++)"APT::PackageContainerInterface::FromGroup(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >, APT::CacheSetHelper&)@APTPKG_6.0" 0.9.7 +# (c++)"APT::PackageContainerInterface::FromFnmatch(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >, APT::CacheSetHelper&)@APTPKG_6.0" 0.9.11 + (c++)"APT::CacheSetHelper::canNotFindFnmatch(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheSetHelper::canNotFindPackage(APT::CacheSetHelper::PkgSelector, APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheSetHelper::canNotFindVersion(APT::CacheSetHelper::VerSelector, APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheSetHelper::canNotGetCandInstVer(pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheSetHelper::canNotGetInstCandVer(pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheSetHelper::canNotGetVersion(APT::CacheSetHelper::VerSelector, pkgCacheFile&, pkgCache::PkgIterator const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheSetHelper::PackageFrom(APT::CacheSetHelper::PkgSelector, APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheSetHelper::PackageFromCommandLine(APT::PackageContainerInterface*, pkgCacheFile&, char const**)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheSetHelper::PackageFromFnmatch(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheSetHelper::PackageFromModifierCommandLine(unsigned short&, APT::PackageContainerInterface*, pkgCacheFile&, char const*, std::__cxx11::list > const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheSetHelper::PackageFromPackageName(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheSetHelper::PackageFromRegEx(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheSetHelper::PackageFromString(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheSetHelper::PackageFromTask(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheSetHelper::showFnmatchSelection(pkgCache::PkgIterator const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheSetHelper::showPackageSelection(pkgCache::PkgIterator const&, APT::CacheSetHelper::PkgSelector, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::CacheSetHelper::showVersionSelection(pkgCache::PkgIterator const&, pkgCache::VerIterator const&, APT::CacheSetHelper::VerSelector, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::VersionContainerInterface::FromCommandLine(APT::VersionContainerInterface*, pkgCacheFile&, char const**, APT::CacheSetHelper::VerSelector, APT::CacheSetHelper&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::VersionContainerInterface::FromPackage(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::PkgIterator const&, APT::CacheSetHelper::VerSelector, APT::CacheSetHelper&)@APTPKG_6.0" 1.1~exp4 + (c++)"APT::VersionContainerInterface::FromString(APT::VersionContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator >, APT::CacheSetHelper::VerSelector, APT::CacheSetHelper&, bool)@APTPKG_6.0" 1.1~exp4 + (c++)"typeinfo for APT::PackageContainer, std::allocator > >@APTPKG_6.0" 0.8.16~exp9 + (c++)"typeinfo for APT::PackageContainer > >@APTPKG_6.0" 0.8.16~exp9 + (c++)"typeinfo for APT::VersionContainer > >@APTPKG_6.0" 0.8.16~exp9 + (c++)"typeinfo name for APT::PackageContainer, std::allocator > >@APTPKG_6.0" 0.8.16~exp9 + (c++)"typeinfo name for APT::PackageContainer > >@APTPKG_6.0" 0.8.16~exp9 + (c++)"typeinfo name for APT::VersionContainer > >@APTPKG_6.0" 0.8.16~exp9 + (c++)"vtable for APT::PackageContainer, std::allocator > >@APTPKG_6.0" 0.8.16~exp9 + (c++)"vtable for APT::PackageContainer > >@APTPKG_6.0" 0.8.16~exp9 + (c++)"vtable for APT::VersionContainer > >@APTPKG_6.0" 0.8.16~exp9 + (c++)"typeinfo for APT::VersionContainer > >@APTPKG_6.0" 1.1~exp15 + (c++)"typeinfo name for APT::VersionContainer > >@APTPKG_6.0" 1.1~exp15 + (c++)"vtable for APT::VersionContainer > >@APTPKG_6.0" 1.1~exp15 ### all the hashes are belong to us -# (c++|optional=inline)"Hashes::AddFD(int, unsigned long long, bool, bool, bool, bool)@APTPKG_5.0" 0.8.16~exp6 -# (c++|optional=inline)"Hashes::AddFD(FileFd&, unsigned long long, bool, bool, bool, bool)@APTPKG_5.0" 0.8.16~exp9 -# (c++|optional=inline)"pkgRecords::Parser::MD5Hash()@APTPKG_5.0" 0.8.0 -# (c++|optional=inline)"pkgRecords::Parser::SHA1Hash()@APTPKG_5.0" 0.8.0 -# (c++|optional=inline)"pkgRecords::Parser::SHA256Hash()@APTPKG_5.0" 0.8.0 -# (c++|optional=inline)"pkgRecords::Parser::SHA512Hash()@APTPKG_5.0" 0.8.16~exp6 - (c++)"Hashes::AddFD(FileFd&, unsigned long long, unsigned int)@APTPKG_5.0" 1.1~exp1 - (c++)"Hashes::AddFD(int, unsigned long long, unsigned int)@APTPKG_5.0" 1.1~exp1 - (c++)"Hashes::Add(unsigned char const*, unsigned long long, unsigned int)@APTPKG_5.0" 1.1~exp1 - (c++)"Hashes::GetHashStringList()@APTPKG_5.0" 1.1~exp1 - (c++)"Hashes::Hashes()@APTPKG_5.0" 1.1~exp1 - (c++)"Hashes::~Hashes()@APTPKG_5.0" 1.1~exp1 - (c++)"HashStringList::find(char const*) const@APTPKG_5.0" 1.1~exp1 - (c++)"HashStringList::operator==(HashStringList const&) const@APTPKG_5.0" 1.1~exp1 - (c++)"HashStringList::operator!=(HashStringList const&) const@APTPKG_5.0" 1.1~exp1 - (c++)"HashStringList::push_back(HashString const&)@APTPKG_5.0" 1.1~exp1 - (c++)"HashStringList::supported(char const*)@APTPKG_5.0" 1.1~exp1 - (c++)"HashStringList::usable() const@APTPKG_5.0" 1.1~exp1 - (c++)"HashStringList::VerifyFile(std::__cxx11::basic_string, std::allocator >) const@APTPKG_5.0" 1.1~exp1 - (c++)"HashString::operator==(HashString const&) const@APTPKG_5.0" 1.1~exp1 - (c++)"HashString::operator!=(HashString const&) const@APTPKG_5.0" 1.1~exp1 - (c++)"pkgAcqArchive::IsTrusted() const@APTPKG_5.0" 1.1~exp1 - (c++)"pkgAcqFile::Custom600Headers[abi:cxx11]() const@APTPKG_5.0" 1.1~exp1 - (c++)"pkgAcqMethod::DropPrivsOrDie()@APTPKG_5.0" 1.1~exp1 - (c++)"pkgAcquire::Item::Custom600Headers[abi:cxx11]() const@APTPKG_5.0" 1.1~exp1 - (c++)"pkgAcquire::Item::IsTrusted() const@APTPKG_5.0" 1.1~exp1 - (c++)"typeinfo for Hashes@APTPKG_5.0" 1.1~exp1 - (c++)"typeinfo name for Hashes@APTPKG_5.0" 1.1~exp1 - (c++)"vtable for Hashes@APTPKG_5.0" 1.1~exp1 + (c++)"Hashes::GetHashStringList()@APTPKG_6.0" 1.1~exp1 + (c++)"Hashes::Hashes()@APTPKG_6.0" 1.1~exp1 + (c++)"Hashes::~Hashes()@APTPKG_6.0" 1.1~exp1 + (c++)"HashStringList::find(char const*) const@APTPKG_6.0" 1.1~exp1 + (c++)"HashStringList::operator==(HashStringList const&) const@APTPKG_6.0" 1.1~exp1 + (c++)"HashStringList::operator!=(HashStringList const&) const@APTPKG_6.0" 1.1~exp1 + (c++)"HashStringList::push_back(HashString const&)@APTPKG_6.0" 1.1~exp1 + (c++)"HashStringList::supported(char const*)@APTPKG_6.0" 1.1~exp1 + (c++)"HashStringList::usable() const@APTPKG_6.0" 1.1~exp1 + (c++)"HashStringList::VerifyFile(std::__cxx11::basic_string, std::allocator >) const@APTPKG_6.0" 1.1~exp1 + (c++)"HashString::operator==(HashString const&) const@APTPKG_6.0" 1.1~exp1 + (c++)"HashString::operator!=(HashString const&) const@APTPKG_6.0" 1.1~exp1 + (c++)"pkgAcqArchive::IsTrusted() const@APTPKG_6.0" 1.1~exp1 + (c++)"pkgAcqFile::Custom600Headers[abi:cxx11]() const@APTPKG_6.0" 1.1~exp1 + (c++)"pkgAcqMethod::DropPrivsOrDie()@APTPKG_6.0" 1.1~exp1 + (c++)"pkgAcquire::Item::Custom600Headers[abi:cxx11]() const@APTPKG_6.0" 1.1~exp1 + (c++)"pkgAcquire::Item::IsTrusted() const@APTPKG_6.0" 1.1~exp1 + (c++)"typeinfo for Hashes@APTPKG_6.0" 1.1~exp1 + (c++)"typeinfo name for Hashes@APTPKG_6.0" 1.1~exp1 + (c++)"vtable for Hashes@APTPKG_6.0" 1.1~exp1 ### more transactional update - (c++)"pkgAcquire::GetLock(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp4 - (c++)"pkgAcquire::Item::Dequeue()@APTPKG_5.0" 1.1~exp4 - (c++)"pkgAcquire::Item::QueueURI(pkgAcquire::ItemDesc&)@APTPKG_5.0" 1.1~exp4 - (c++)"pkgAcquire::Item::SetActiveSubprocess(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp4 - (c++)"pkgAcquire::Setup(pkgAcquireStatus*, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp4 - (c++)"pkgDepCache::MarkAndSweep()@APTPKG_5.0" 1.1~exp4 - (c++)"pkgDepCache::MarkAndSweep(pkgDepCache::InRootSetFunc&)@APTPKG_5.0" 1.1~exp4 + (c++)"pkgAcquire::GetLock(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp4 + (c++)"pkgAcquire::Item::Dequeue()@APTPKG_6.0" 1.1~exp4 + (c++)"pkgAcquire::Item::QueueURI(pkgAcquire::ItemDesc&)@APTPKG_6.0" 1.1~exp4 + (c++)"pkgAcquire::Item::SetActiveSubprocess(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp4 + (c++)"pkgDepCache::MarkAndSweep()@APTPKG_6.0" 1.1~exp4 + (c++)"pkgDepCache::MarkAndSweep(pkgDepCache::InRootSetFunc&)@APTPKG_6.0" 1.1~exp4 ### mixed stuff - (c++)"GetListOfFilesInDir(std::__cxx11::basic_string, std::allocator > const&, bool)@APTPKG_5.0" 0.8.16~exp13 - (c++)"pkgCache::DepIterator::IsIgnorable(pkgCache::PkgIterator const&) const@APTPKG_5.0" 0.8.16~exp10 - (c++)"pkgCache::DepIterator::IsIgnorable(pkgCache::PrvIterator const&) const@APTPKG_5.0" 0.8.16~exp10 - (c++)"FileFd::Write(int, void const*, unsigned long long)@APTPKG_5.0" 0.8.16~exp14 - (c++)"_strrstrip(char*)@APTPKG_5.0" 0.9.7.9~exp2 - (c++)"SplitClearSignedFile(std::__cxx11::basic_string, std::allocator > const&, FileFd*, std::vector, std::allocator >, std::allocator, std::allocator > > >*, FileFd*)@APTPKG_5.0" 0.9.7.9~exp2 - (c++)"OpenMaybeClearSignedFile(std::__cxx11::basic_string, std::allocator > const&, FileFd&)@APTPKG_5.0" 0.9.7.9~exp2 - (c++)"SigVerify::RunGPGV(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, int const&)@APTPKG_5.0" 0.9.7.9~exp2 - (c++)"Configuration::Dump(std::basic_ostream >&, char const*, char const*, bool)@APTPKG_5.0" 0.9.3 - (c++)"AcquireUpdate(pkgAcquire&, int, bool, bool)@APTPKG_5.0" 0.9.3 - (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::PackageArchitectureMatchesSpecification(std::__cxx11::basic_string, std::allocator > const&, bool)@APTPKG_5.0" 0.9.7 - (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::~PackageArchitectureMatchesSpecification()@APTPKG_5.0" 0.9.7 - (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::operator()(pkgCache::PkgIterator const&)@APTPKG_5.0" 0.9.7 - (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::operator()(char const* const&)@APTPKG_5.0" 0.9.7 - (c++)"APT::Configuration::checkLanguage(std::__cxx11::basic_string, std::allocator >, bool)@APTPKG_5.0" 0.9.7.5 - (c++)"pkgCdrom::DropTranslation(std::vector, std::allocator >, std::allocator, std::allocator > > >&)@APTPKG_5.0" 0.9.7.5 - (c++)"pkgCache::DepIterator::IsSatisfied(pkgCache::PrvIterator const&) const@APTPKG_5.0" 0.9.8 - (c++)"pkgCache::DepIterator::IsSatisfied(pkgCache::VerIterator const&) const@APTPKG_5.0" 0.9.8 - (c++)"pkgDepCache::IsDeleteOkProtectInstallRequests(pkgCache::PkgIterator const&, bool, unsigned long, bool)@APTPKG_5.0" 0.9.9.1 - (c++)"pkgDepCache::IsInstallOkMultiArchSameVersionSynced(pkgCache::PkgIterator const&, bool, unsigned long, bool)@APTPKG_5.0" 0.9.9.1 - (c++)"pkgDPkgPM::SendPkgsInfo(_IO_FILE*, unsigned int const&)@APTPKG_5.0" 0.9.9.1 - (c++)"pkgCache::VerIterator::MultiArchType() const@APTPKG_5.0" 0.9.9.1 - (c++)"AutoDetectProxy(URI&)@APTPKG_5.0" 0.9.10 - (c++)"CommandLine::GetCommand(CommandLine::Dispatch const*, unsigned int, char const* const*)@APTPKG_5.0" 0.9.11 - (c++)"CommandLine::MakeArgs(char, char const*, char const*, unsigned long)@APTPKG_5.0" 0.9.11 - (c++)"Configuration::Clear()@APTPKG_5.0" 0.9.11 - (c++)"Glob(std::__cxx11::basic_string, std::allocator > const&, int)@APTPKG_5.0" 0.9.11 - (c++)"APT::CacheFilter::PackageNameMatchesFnmatch::operator()(pkgCache::GrpIterator const&)@APTPKG_5.0" 0.9.11 - (c++)"APT::CacheFilter::PackageNameMatchesFnmatch::operator()(pkgCache::PkgIterator const&)@APTPKG_5.0" 0.9.11 - (c++)"pkgTagSection::pkgTagSection()@APTPKG_5.0" 0.9.11 - (c++)"strv_length(char const**)@APTPKG_5.0" 0.9.11 - (c++)"StringSplit(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)@APTPKG_5.0" 0.9.11.3 - (c++)"pkgAcquire::Item::RenameOnError(pkgAcquire::Item::RenameOnErrorState)@APTPKG_5.0" 0.9.12 - (c++)"APT::String::Endswith(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 0.9.13.1 - (c++)"ExecFork(std::set, std::allocator >)@APTPKG_5.0" 0.9.13.1 - (c++)"MergeKeepFdsFromConfiguration(std::set, std::allocator >&)@APTPKG_5.0" 0.9.13.1 - (c++)"HashString::FromFile(std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.9.13.1 - (c++)"HashString::GetHashForFile(std::__cxx11::basic_string, std::allocator >) const@APTPKG_5.0" 0.9.13.1 - (c++)"GetTempDir[abi:cxx11]()@APTPKG_5.0" 0.9.14.2 - (c++)"APT::Configuration::getBuildProfiles[abi:cxx11]()@APTPKG_5.0" 0.9.16 - (c++)"APT::Configuration::getBuildProfilesString[abi:cxx11]()@APTPKG_5.0" 0.9.16 - (c++)"debListParser::ParseDepends(char const*, char const*, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >&, unsigned int&)@APTPKG_5.0" 0.9.16 - (c++)"debListParser::ParseDepends(char const*, char const*, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >&, unsigned int&, bool const&)@APTPKG_5.0" 0.9.16 - (c++)"debListParser::ParseDepends(char const*, char const*, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >&, unsigned int&, bool const&, bool const&, bool const&)@APTPKG_5.0" 0.9.16 - (c++)"Rename(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >)@APTPKG_5.0" 0.9.16 - (c++)"pkgDepCache::IsInstallOkDependenciesSatisfiableByCandidates(pkgCache::PkgIterator const&, bool, unsigned long, bool)@APTPKG_5.0" 1.0 - (c++)"APT::Progress::PackageManagerFancy::GetTerminalSize()@APTPKG_5.0" 1.0 - (c++)"APT::Progress::PackageManagerFancy::GetTextProgressStr[abi:cxx11](float, int)@APTPKG_5.0" 1.0 - (c++)"EDSP::ExecuteSolver(char const*, int*, int*, bool)@APTPKG_5.0" 1.0.4 - (c++)"pkgPackageManager::EarlyRemove(pkgCache::PkgIterator, pkgCache::DepIterator const*)@APTPKG_5.0" 1.0.4 - (c++)"pkgSrcRecords::Step()@APTPKG_5.0" 1.0.4 - (c++)"pkgDPkgPM::SetupSlavePtyMagic()@APTPKG_5.0" 1.0.8 - (c++)"HashStringList::find(char const*) const@APTPKG_5.0" 1.0.9.4 - (c++)"HashStringList::operator==(HashStringList const&) const@APTPKG_5.0" 1.0.9.4 - (c++)"HashStringList::operator!=(HashStringList const&) const@APTPKG_5.0" 1.0.9.4 - (c++)"HashStringList::push_back(HashString const&)@APTPKG_5.0" 1.0.9.4 - (c++)"HashStringList::supported(char const*)@APTPKG_5.0" 1.0.9.4 - (c++)"HashStringList::VerifyFile(std::__cxx11::basic_string, std::allocator >) const@APTPKG_5.0" 1.0.9.4 - (c++)"HashString::operator==(HashString const&) const@APTPKG_5.0" 1.0.9.4 - (c++)"HashString::operator!=(HashString const&) const@APTPKG_5.0" 1.0.9.4 - (c++)"pkgSrcRecords::Parser::Files2(std::vector >&)@APTPKG_5.0" 1.0.9.4 - (c++)"APT::Progress::PackageManager::PackageManager()@APTPKG_5.0" 1.1~exp1 - (c++)"pkgDPkgPM::Go(APT::Progress::PackageManager*)@APTPKG_5.0" 1.1~exp1 - (c++)"pkgPackageManager::DoInstall(APT::Progress::PackageManager*)@APTPKG_5.0" 1.1~exp1 - (c++)"pkgPackageManager::DoInstallPostFork(APT::Progress::PackageManager*)@APTPKG_5.0" 1.1~exp1 - (c++)"pkgTagFile::Init(FileFd*, unsigned long long)@APTPKG_5.0" 1.1~exp1 - (c++)"pkgTagSection::Count() const@APTPKG_5.0" 1.1~exp1 - (c++)"pkgTagSection::Exists(char const*) const@APTPKG_5.0" 1.1~exp1 - (c++)"pkgTagSection::FindB(char const*, bool const&) const@APTPKG_5.0" 1.1~exp1 - (c++)"pkgTagSection::Scan(char const*, unsigned long, bool)@APTPKG_5.0" 1.1~exp1 - (c++)"StartsWithGPGClearTextSignature(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp1 - (c++)"Popen(char const**, FileFd&, int&, FileFd::OpenMode)@APTPKG_5.0" 1.1~exp1 - (c++)"APT::String::Startswith(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp2 - (c++)"APT::Upgrade::Upgrade(pkgDepCache&, int, OpProgress*)@APTPKG_5.0" 1.1~exp4 - (c++)"pkgProblemResolver::Resolve(bool, OpProgress*)@APTPKG_5.0" 1.1~exp4 - (c++)"pkgProblemResolver::ResolveByKeep(OpProgress*)@APTPKG_5.0" 1.1~exp4 - (c++)"DropPrivileges()@APTPKG_5.0" 1.1~exp4 - (c++)"FileFd::FileFd(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned long)@APTPKG_5.0" 1.1~exp4 - (c++)"metaIndex::metaIndex(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, char const*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgTagSection::Get(char const*&, char const*&, unsigned int) const@APTPKG_5.0" 1.1~exp9 + (c++)"GetListOfFilesInDir(std::__cxx11::basic_string, std::allocator > const&, bool)@APTPKG_6.0" 0.8.16~exp13 + (c++)"pkgCache::DepIterator::IsIgnorable(pkgCache::PkgIterator const&) const@APTPKG_6.0" 0.8.16~exp10 + (c++)"pkgCache::DepIterator::IsIgnorable(pkgCache::PrvIterator const&) const@APTPKG_6.0" 0.8.16~exp10 + (c++)"FileFd::Write(int, void const*, unsigned long long)@APTPKG_6.0" 0.8.16~exp14 + (c++)"_strrstrip(char*)@APTPKG_6.0" 0.9.7.9~exp2 + (c++)"SplitClearSignedFile(std::__cxx11::basic_string, std::allocator > const&, FileFd*, std::vector, std::allocator >, std::allocator, std::allocator > > >*, FileFd*)@APTPKG_6.0" 0.9.7.9~exp2 + (c++)"OpenMaybeClearSignedFile(std::__cxx11::basic_string, std::allocator > const&, FileFd&)@APTPKG_6.0" 0.9.7.9~exp2 + (c++)"Configuration::Dump(std::basic_ostream >&, char const*, char const*, bool)@APTPKG_6.0" 0.9.3 + (c++)"AcquireUpdate(pkgAcquire&, int, bool, bool)@APTPKG_6.0" 0.9.3 + (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::PackageArchitectureMatchesSpecification(std::__cxx11::basic_string, std::allocator > const&, bool)@APTPKG_6.0" 0.9.7 + (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::~PackageArchitectureMatchesSpecification()@APTPKG_6.0" 0.9.7 + (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::operator()(pkgCache::PkgIterator const&)@APTPKG_6.0" 0.9.7 + (c++)"APT::CacheFilter::PackageArchitectureMatchesSpecification::operator()(char const* const&)@APTPKG_6.0" 0.9.7 + (c++)"APT::Configuration::checkLanguage(std::__cxx11::basic_string, std::allocator >, bool)@APTPKG_6.0" 0.9.7.5 + (c++)"pkgCdrom::DropTranslation(std::vector, std::allocator >, std::allocator, std::allocator > > >&)@APTPKG_6.0" 0.9.7.5 + (c++)"pkgCache::DepIterator::IsSatisfied(pkgCache::PrvIterator const&) const@APTPKG_6.0" 0.9.8 + (c++)"pkgCache::DepIterator::IsSatisfied(pkgCache::VerIterator const&) const@APTPKG_6.0" 0.9.8 + (c++)"pkgDepCache::IsDeleteOkProtectInstallRequests(pkgCache::PkgIterator const&, bool, unsigned long, bool)@APTPKG_6.0" 0.9.9.1 + (c++)"pkgDepCache::IsInstallOkMultiArchSameVersionSynced(pkgCache::PkgIterator const&, bool, unsigned long, bool)@APTPKG_6.0" 0.9.9.1 + (c++)"pkgDPkgPM::SendPkgsInfo(_IO_FILE*, unsigned int const&)@APTPKG_6.0" 0.9.9.1 + (c++)"pkgCache::VerIterator::MultiArchType() const@APTPKG_6.0" 0.9.9.1 + (c++)"AutoDetectProxy(URI&)@APTPKG_6.0" 0.9.10 + (c++)"CommandLine::GetCommand(CommandLine::Dispatch const*, unsigned int, char const* const*)@APTPKG_6.0" 0.9.11 + (c++)"CommandLine::MakeArgs(char, char const*, char const*, unsigned long)@APTPKG_6.0" 0.9.11 + (c++)"Configuration::Clear()@APTPKG_6.0" 0.9.11 + (c++)"Glob(std::__cxx11::basic_string, std::allocator > const&, int)@APTPKG_6.0" 0.9.11 + (c++)"APT::CacheFilter::PackageNameMatchesFnmatch::operator()(pkgCache::GrpIterator const&)@APTPKG_6.0" 0.9.11 + (c++)"APT::CacheFilter::PackageNameMatchesFnmatch::operator()(pkgCache::PkgIterator const&)@APTPKG_6.0" 0.9.11 + (c++)"pkgTagSection::pkgTagSection()@APTPKG_6.0" 0.9.11 + (c++)"strv_length(char const**)@APTPKG_6.0" 0.9.11 + (c++)"StringSplit(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)@APTPKG_6.0" 0.9.11.3 + (c++)"pkgAcquire::Item::RenameOnError(pkgAcquire::Item::RenameOnErrorState)@APTPKG_6.0" 0.9.12 + (c++)"APT::String::Endswith(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 0.9.13.1 + (c++)"ExecFork(std::set, std::allocator >)@APTPKG_6.0" 0.9.13.1 + (c++)"MergeKeepFdsFromConfiguration(std::set, std::allocator >&)@APTPKG_6.0" 0.9.13.1 + (c++)"HashString::FromFile(std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.9.13.1 + (c++)"HashString::GetHashForFile(std::__cxx11::basic_string, std::allocator >) const@APTPKG_6.0" 0.9.13.1 + (c++)"GetTempDir[abi:cxx11]()@APTPKG_6.0" 0.9.14.2 + (c++)"APT::Configuration::getBuildProfiles[abi:cxx11]()@APTPKG_6.0" 0.9.16 + (c++)"APT::Configuration::getBuildProfilesString[abi:cxx11]()@APTPKG_6.0" 0.9.16 + (c++)"Rename(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 0.9.16 + (c++)"pkgDepCache::IsInstallOkDependenciesSatisfiableByCandidates(pkgCache::PkgIterator const&, bool, unsigned long, bool)@APTPKG_6.0" 1.0 + (c++)"APT::Progress::PackageManagerFancy::GetTerminalSize()@APTPKG_6.0" 1.0 + (c++)"APT::Progress::PackageManagerFancy::GetTextProgressStr[abi:cxx11](float, int)@APTPKG_6.0" 1.0 + (c++)"EDSP::ExecuteSolver(char const*, int*, int*, bool)@APTPKG_6.0" 1.0.4 + (c++)"pkgPackageManager::EarlyRemove(pkgCache::PkgIterator, pkgCache::DepIterator const*)@APTPKG_6.0" 1.0.4 + (c++)"pkgSrcRecords::Step()@APTPKG_6.0" 1.0.4 + (c++)"pkgDPkgPM::SetupSlavePtyMagic()@APTPKG_6.0" 1.0.8 + (c++)"HashStringList::find(char const*) const@APTPKG_6.0" 1.0.9.4 + (c++)"HashStringList::operator==(HashStringList const&) const@APTPKG_6.0" 1.0.9.4 + (c++)"HashStringList::operator!=(HashStringList const&) const@APTPKG_6.0" 1.0.9.4 + (c++)"HashStringList::push_back(HashString const&)@APTPKG_6.0" 1.0.9.4 + (c++)"HashStringList::supported(char const*)@APTPKG_6.0" 1.0.9.4 + (c++)"HashStringList::VerifyFile(std::__cxx11::basic_string, std::allocator >) const@APTPKG_6.0" 1.0.9.4 + (c++)"HashString::operator==(HashString const&) const@APTPKG_6.0" 1.0.9.4 + (c++)"HashString::operator!=(HashString const&) const@APTPKG_6.0" 1.0.9.4 + (c++)"APT::Progress::PackageManager::PackageManager()@APTPKG_6.0" 1.1~exp1 + (c++)"pkgDPkgPM::Go(APT::Progress::PackageManager*)@APTPKG_6.0" 1.1~exp1 + (c++)"pkgPackageManager::DoInstall(APT::Progress::PackageManager*)@APTPKG_6.0" 1.1~exp1 + (c++)"pkgPackageManager::DoInstallPostFork(APT::Progress::PackageManager*)@APTPKG_6.0" 1.1~exp1 + (c++)"pkgTagFile::Init(FileFd*, unsigned long long)@APTPKG_6.0" 1.1~exp1 + (c++)"pkgTagSection::Count() const@APTPKG_6.0" 1.1~exp1 + (c++)"pkgTagSection::Exists(APT::StringView) const@APTPKG_6.0" 1.9~ + (c++)"pkgTagSection::FindB(APT::StringView, bool) const@APTPKG_6.0" 1.9~ + (c++)"pkgTagSection::Scan(char const*, unsigned long, bool)@APTPKG_6.0" 1.1~exp1 + (c++)"StartsWithGPGClearTextSignature(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp1 + (c++)"Popen(char const**, FileFd&, int&, FileFd::OpenMode, bool, bool)@APTPKG_6.0" 1.9.0~ + (c++)"APT::String::Startswith(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp2 + (c++)"APT::Upgrade::Upgrade(pkgDepCache&, int, OpProgress*)@APTPKG_6.0" 1.1~exp4 + (c++)"pkgProblemResolver::Resolve(bool, OpProgress*)@APTPKG_6.0" 1.1~exp4 + (c++)"pkgProblemResolver::ResolveByKeep(OpProgress*)@APTPKG_6.0" 1.1~exp4 + (c++)"DropPrivileges()@APTPKG_6.0" 1.1~exp4 + (c++)"FileFd::FileFd(std::__cxx11::basic_string, std::allocator >, unsigned int, unsigned long)@APTPKG_6.0" 1.1~exp4 + (c++)"metaIndex::metaIndex(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, char const*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgTagSection::Get(char const*&, char const*&, unsigned int) const@APTPKG_6.0" 1.1~exp9 ### ABI 5 changed so much (+ abicxx11 transition) - (c++)"APT::CacheSetHelper::CacheSetHelper(bool, GlobalError::MsgType)@APTPKG_5.0" 1.1~exp9 - (c++)"APT::Configuration::getArchitectures[abi:cxx11](bool const&)@APTPKG_5.0" 1.1~exp9 - (c++)"APT::Configuration::getCompressionTypes[abi:cxx11](bool const&)@APTPKG_5.0" 1.1~exp9 - (c++)"APT::Configuration::getLanguages[abi:cxx11](bool const&, bool const&, char const**)@APTPKG_5.0" 1.1~exp9 - (c++)"APT::PackageContainerInterface::operator=(APT::PackageContainerInterface const&)@APTPKG_5.0" 1.1~exp9 - (c++)"APT::PackageContainerInterface::PackageContainerInterface(APT::CacheSetHelper::PkgSelector)@APTPKG_5.0" 1.1~exp9 - (c++)"APT::PackageContainerInterface::~PackageContainerInterface()@APTPKG_5.0" 1.1~exp9 - (c++)"APT::PackageContainerInterface::PackageContainerInterface()@APTPKG_5.0" 1.1~exp9 - (c++)"APT::PackageUniverse::~PackageUniverse()@APTPKG_5.0" 1.1~exp9 - (c++)"APT::PackageUniverse::PackageUniverse(pkgCache*)@APTPKG_5.0" 1.1~exp9 - (c++)"APT::PackageUniverse::PackageUniverse(pkgCacheFile*)@APTPKG_5.0" 1.1~exp9 - (c++)"APT::Progress::PackageManagerText::PackageManagerText()@APTPKG_5.0" 1.1~exp9 - (c++)"APT::VersionContainerInterface::FromDependency(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::DepIterator const&, APT::CacheSetHelper::VerSelector, APT::CacheSetHelper&)@APTPKG_5.0" 1.1~exp9 - (c++)"APT::VersionContainerInterface::operator=(APT::VersionContainerInterface const&)@APTPKG_5.0" 1.1~exp9 - (c++)"APT::VersionContainerInterface::~VersionContainerInterface()@APTPKG_5.0" 1.1~exp9 - (c++)"APT::VersionContainerInterface::VersionContainerInterface()@APTPKG_5.0" 1.1~exp9 - (c++)"CommandLine::CommandLine()@APTPKG_5.0" 1.1~exp9 - (c++)"Configuration::FindVector(char const*, std::__cxx11::basic_string, std::allocator > const&, bool) const@APTPKG_5.0" 1.1~exp9 - (c++)"debDebianSourceDirIndex::GetType() const@APTPKG_5.0" 1.1~exp9 - (c++)"debDebPkgFileIndex::~debDebPkgFileIndex()@APTPKG_5.0" 1.1~exp9 - (c++)"debDebPkgFileIndex::debDebPkgFileIndex(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"debDebPkgFileIndex::FindInCache(pkgCache&) const@APTPKG_5.0" 1.1~exp9 - (c++)"debDebPkgFileIndex::GetArchitecture[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"debDebPkgFileIndex::GetComponent[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"debDebPkgFileIndex::GetContent(std::basic_ostream >&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"debDebPkgFileIndex::GetIndexFlags() const@APTPKG_5.0" 1.1~exp9 - (c++)"debDebPkgFileIndex::GetType() const@APTPKG_5.0" 1.1~exp9 - (c++)"debDebPkgFileIndex::OpenListFile(FileFd&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"debDscFileIndex::CreateSrcParser() const@APTPKG_5.0" 1.1~exp9 - (c++)"debDscFileIndex::~debDscFileIndex()@APTPKG_5.0" 1.1~exp9 - (c++)"debDscFileIndex::debDscFileIndex(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"debDscFileIndex::GetType() const@APTPKG_5.0" 1.1~exp9 - (c++)"debPackagesIndex::ArchiveInfo[abi:cxx11](pkgCache::VerIterator const&) const@APTPKG_5.0" 1.1~exp9 - (c++)"debPackagesIndex::~debPackagesIndex()@APTPKG_5.0" 1.1~exp9 - (c++)"debPackagesIndex::debPackagesIndex(IndexTarget const&, bool)@APTPKG_5.0" 1.1~exp9 - (c++)"debPackagesIndex::GetIndexFlags() const@APTPKG_5.0" 1.1~exp9 - (c++)"debPackagesIndex::GetType() const@APTPKG_5.0" 1.1~exp9 - (c++)"debSourcesIndex::CreateSrcParser() const@APTPKG_5.0" 1.1~exp9 - (c++)"debSourcesIndex::~debSourcesIndex()@APTPKG_5.0" 1.1~exp9 - (c++)"debSourcesIndex::debSourcesIndex(IndexTarget const&, bool)@APTPKG_5.0" 1.1~exp9 - (c++)"debSourcesIndex::GetIndexFlags() const@APTPKG_5.0" 1.1~exp9 - (c++)"debSourcesIndex::GetType() const@APTPKG_5.0" 1.1~exp9 - (c++)"debSourcesIndex::OpenListFile(FileFd&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"debSourcesIndex::SourceInfo[abi:cxx11](pkgSrcRecords::Parser const&, pkgSrcRecords::File const&) const@APTPKG_5.0" 1.1~exp9 - (c++)"debStatusIndex::~debStatusIndex()@APTPKG_5.0" 1.1~exp9 - (c++)"debStatusIndex::debStatusIndex(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"debStatusIndex::GetArchitecture[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"debStatusIndex::GetComponent[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"debStatusIndex::GetIndexFlags() const@APTPKG_5.0" 1.1~exp9 - (c++)"debStatusIndex::GetType() const@APTPKG_5.0" 1.1~exp9 - (c++)"debTranslationsIndex::~debTranslationsIndex()@APTPKG_5.0" 1.1~exp9 - (c++)"debTranslationsIndex::debTranslationsIndex(IndexTarget const&)@APTPKG_5.0" 1.1~exp9 - (c++)"debTranslationsIndex::GetArchitecture[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"debTranslationsIndex::GetIndexFlags() const@APTPKG_5.0" 1.1~exp9 - (c++)"debTranslationsIndex::GetType() const@APTPKG_5.0" 1.1~exp9 - (c++)"debTranslationsIndex::HasPackages() const@APTPKG_5.0" 1.1~exp9 - (c++)"debTranslationsIndex::OpenListFile(FileFd&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"ExecGPGV(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, int const&, int*, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"FileFd::FileFd()@APTPKG_5.0" 1.1~exp9 - (c++)"FileFd::FileFd(int, bool)@APTPKG_5.0" 1.1~exp9 - (c++)"FileFd::FileFd(int, unsigned int, FileFd::CompressMode)@APTPKG_5.0" 1.1~exp9 - (c++)"FileFd::FileFd(std::__cxx11::basic_string, std::allocator >, unsigned int, FileFd::CompressMode, unsigned long)@APTPKG_5.0" 1.1~exp9 - (c++)"GetTempFile(std::__cxx11::basic_string, std::allocator > const&, bool, FileFd*)@APTPKG_5.0" 1.1~exp9 - (c++)"Hashes::AddFD(FileFd&, unsigned long long)@APTPKG_5.0" 1.1~exp9 - (c++)"Hashes::AddFD(int, unsigned long long)@APTPKG_5.0" 1.1~exp9 - (c++)"Hashes::Add(unsigned char const*, unsigned long long)@APTPKG_5.0" 1.1~exp9 - (c++)"Hashes::Hashes(HashStringList const&)@APTPKG_5.0" 1.1~exp9 - (c++)"Hashes::Hashes(unsigned int)@APTPKG_5.0" 1.1~exp9 - (c++)"HashStringList::FileSize() const@APTPKG_5.0" 1.1~exp9 - (c++)"HashStringList::FileSize(unsigned long long)@APTPKG_5.0" 1.1~exp9 - (c++)"IndexCopy::IndexCopy()@APTPKG_5.0" 1.1~exp9 - (c++)"IndexTarget::Format(std::__cxx11::basic_string, std::allocator >) const@APTPKG_5.0" 1.1~exp9 - (c++)"IndexTarget::IndexTarget(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, bool, bool, std::map, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"IndexTarget::Option[abi:cxx11](IndexTarget::OptionKeys) const@APTPKG_5.0" 1.1~exp9 - (c++)"metaIndex::CheckDist(std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_5.0" 1.1~exp9 - (c++)"metaIndex::Describe[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"metaIndex::Exists(std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_5.0" 1.1~exp9 - (c++)"metaIndex::FindInCache(pkgCache&, bool) const@APTPKG_5.0" 1.1~exp9 - (c++)"metaIndex::GetCodename[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"metaIndex::GetDate() const@APTPKG_5.0" 1.1~exp9 - (c++)"metaIndex::GetExpectedDist[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"metaIndex::GetLoadedSuccessfully() const@APTPKG_5.0" 1.1~exp9 - (c++)"metaIndex::GetSignedBy[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"metaIndex::GetSuite[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"metaIndex::GetSupportsAcquireByHash() const@APTPKG_5.0" 1.1~exp9 - (c++)"metaIndex::GetTrusted() const@APTPKG_5.0" 1.1~exp9 - (c++)"metaIndex::GetValidUntil() const@APTPKG_5.0" 1.1~exp9 - (c++)"metaIndex::Lookup(std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_5.0" 1.1~exp9 - (c++)"metaIndex::MetaKeys[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"metaIndex::swapLoad(metaIndex*)@APTPKG_5.0" 1.1~exp9 - (c++)"PackageCopy::PackageCopy()@APTPKG_5.0" 1.1~exp9 - (c++)"PackageCopy::RewriteEntry(FileFd&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqArchive::DescURI[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqArchive::Done(std::__cxx11::basic_string, std::allocator > const&, HashStringList const&, pkgAcquire::MethodConfig const*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqArchive::Failed(std::__cxx11::basic_string, std::allocator > const&, pkgAcquire::MethodConfig const*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqArchive::GetExpectedHashes() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqArchive::GetFinalFilename[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqArchive::HashesRequired() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqArchive::ShortDesc[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqChangelog::Done(std::__cxx11::basic_string, std::allocator > const&, HashStringList const&, pkgAcquire::MethodConfig const*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqChangelog::Failed(std::__cxx11::basic_string, std::allocator > const&, pkgAcquire::MethodConfig const*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqChangelog::~pkgAcqChangelog()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqChangelog::pkgAcqChangelog(pkgAcquire*, pkgCache::RlsFileIterator const&, char const*, char const*, char const*, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqChangelog::pkgAcqChangelog(pkgAcquire*, pkgCache::VerIterator const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqChangelog::pkgAcqChangelog(pkgAcquire*, std::__cxx11::basic_string, std::allocator > const&, char const*, char const*, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqChangelog::URI[abi:cxx11](pkgCache::RlsFileIterator const&, char const*, char const*, char const*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqChangelog::URI[abi:cxx11](pkgCache::VerIterator const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqChangelog::URI(std::__cxx11::basic_string, std::allocator > const&, char const*, char const*, char const*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqChangelog::URITemplate[abi:cxx11](pkgCache::RlsFileIterator const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqFile::Done(std::__cxx11::basic_string, std::allocator > const&, HashStringList const&, pkgAcquire::MethodConfig const*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqFile::Failed(std::__cxx11::basic_string, std::allocator > const&, pkgAcquire::MethodConfig const*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqFile::GetExpectedHashes() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqFile::HashesRequired() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqFile::pkgAcqFile(pkgAcquire*, std::__cxx11::basic_string, std::allocator > const&, HashStringList const&, unsigned long long, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, bool)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqMethod::FetchItem::FetchItem()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqMethod::FetchItem::~FetchItem()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcqMethod::FetchResult::~FetchResult()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::Item::Done(std::__cxx11::basic_string, std::allocator > const&, HashStringList const&, pkgAcquire::MethodConfig const*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::Item::Failed(std::__cxx11::basic_string, std::allocator > const&, pkgAcquire::MethodConfig const*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::Item::GetFinalFilename[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::Item::GetItemDesc()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::Item::GetOwner() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::Item::HashSum[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::Item::Item(pkgAcquire*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::Item::Rename(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::Item::ReportMirrorFailure(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::Item::ShortDesc[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::Item::Start(std::__cxx11::basic_string, std::allocator > const&, unsigned long long)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::Item::VerifyDone(std::__cxx11::basic_string, std::allocator > const&, pkgAcquire::MethodConfig const*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::Queue::QItem::Custom600Headers[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::Queue::QItem::GetExpectedHashes() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::Queue::QItem::GetMaximumSize() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::Queue::QItem::SyncDestinationFiles() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::Queue::Queue(std::__cxx11::basic_string, std::allocator > const&, pkgAcquire*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgAcquire::UriIterator::UriIterator(pkgAcquire::Queue*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgArchiveCleaner::pkgArchiveCleaner()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgCache::DepIterator::IsImplicit() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgCacheFile::pkgCacheFile(pkgDepCache*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgCache::PkgIterator::FullName[abi:cxx11](bool const&) const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgCache::RlsFileIterator::IsOk()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgCache::RlsFileIterator::RelStr[abi:cxx11]()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgCdrom::~pkgCdrom()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgCdrom::pkgCdrom()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgCdromStatus::~pkgCdromStatus()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgCdromStatus::pkgCdromStatus()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexFile::FindInCache(pkgCache&) const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexFile::~pkgDebianIndexFile()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexFile::pkgDebianIndexFile(bool)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexRealFile::ArchiveURI(std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexRealFile::Describe[abi:cxx11](bool) const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexRealFile::Exists() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexRealFile::GetProgressDescription[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexRealFile::IndexFileName[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexRealFile::OpenListFile(FileFd&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexRealFile::~pkgDebianIndexRealFile()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexRealFile::pkgDebianIndexRealFile(std::__cxx11::basic_string, std::allocator > const&, bool)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexRealFile::Size() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexTargetFile::ArchiveURI(std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexTargetFile::Describe[abi:cxx11](bool) const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexTargetFile::Exists() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexTargetFile::GetArchitecture[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexTargetFile::GetComponent[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexTargetFile::GetProgressDescription[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexTargetFile::IndexFileName[abi:cxx11]() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexTargetFile::OpenListFile(FileFd&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexTargetFile::~pkgDebianIndexTargetFile()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexTargetFile::pkgDebianIndexTargetFile(IndexTarget const&, bool)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDebianIndexTargetFile::Size() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDepCache::CheckDep(pkgCache::DepIterator const&, int, pkgCache::PkgIterator&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDepCache::DependencyState(pkgCache::DepIterator const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDepCache::Policy::IsImportantDep(pkgCache::DepIterator const&) const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDepCache::UpdateVerState(pkgCache::PkgIterator const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgDepCache::VersionState(pkgCache::DepIterator, unsigned char, unsigned char, unsigned char) const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgIndexFile::ArchiveInfo[abi:cxx11](pkgCache::VerIterator const&) const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgIndexFile::~pkgIndexFile()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgIndexFile::pkgIndexFile(bool)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgIndexFile::SourceInfo[abi:cxx11](pkgSrcRecords::Parser const&, pkgSrcRecords::File const&) const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgRecords::Parser::~Parser()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgRecords::Parser::Parser()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgSourceList::AddVolatileFile(pkgIndexFile*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgSourceList::GetVolatileFiles() const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgSourceList::ReadAppend(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgSourceList::ReadSourceDir(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgSourceList::Read(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgSourceList::Type::ParseLine(std::vector >&, char const*, unsigned int, std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgSourceList::Type::ParseStanza(std::vector >&, pkgTagSection&, unsigned int, FileFd&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgSourceList::Type::~Type()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgSourceList::Type::Type(char const*, char const*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgSrcRecords::Parser::~Parser()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgSrcRecords::Parser::Parser(pkgIndexFile const*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgSystem::~pkgSystem()@APTPKG_5.0" 1.1~exp9 - (c++)"pkgSystem::pkgSystem(char const*, pkgVersioningSystem*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgTagSection::FindFlag(char const*, unsigned char&, unsigned char) const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgTagSection::FindFlag(unsigned char&, unsigned char, char const*, char const*)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgTagSection::FindRawS[abi:cxx11](char const*) const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgTagSection::Tag::Remove(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgTagSection::Tag::Rename(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgTagSection::Tag::Rewrite(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgTagSection::Write(FileFd&, char const* const*, std::vector > const&) const@APTPKG_5.0" 1.1~exp9 - (c++)"pkgUserTagSection::TrimRecord(bool, char const*&)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgVersioningSystem::~pkgVersioningSystem()@APTPKG_5.0" 1.1~exp9 - (c++)"SigVerify::~SigVerify()@APTPKG_5.0" 1.1~exp9 - (c++)"SigVerify::SigVerify()@APTPKG_5.0" 1.1~exp9 - (c++)"SourceCopy::RewriteEntry(FileFd&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"SourceCopy::SourceCopy()@APTPKG_5.0" 1.1~exp9 - (c++)"TranslationsCopy::~TranslationsCopy()@APTPKG_5.0" 1.1~exp9 - (c++)"TranslationsCopy::TranslationsCopy()@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for APT::PackageUniverse@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for debDebianSourceDirIndex@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for debDebPkgFileIndex@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for debDscFileIndex@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for debPackagesIndex@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for debSourcesIndex@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for debStatusIndex@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for debTranslationsIndex@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for pkgAcqChangelog@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for pkgAcqMethod::FetchItem@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for pkgAcqMethod::FetchResult@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for pkgCdrom@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for pkgCdromStatus@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for pkgDebianIndexFile@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for pkgDebianIndexRealFile@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for pkgDebianIndexTargetFile@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for pkgDepCache::ActionGroup@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for pkgOrderList@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for pkgProblemResolver@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for pkgRecords@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for pkgSourceList@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for pkgUserTagSection@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for SigVerify@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo for TranslationsCopy@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for APT::PackageUniverse@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for debDebianSourceDirIndex@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for debDebPkgFileIndex@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for debDscFileIndex@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for debPackagesIndex@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for debSourcesIndex@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for debStatusIndex@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for debTranslationsIndex@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for pkgAcqChangelog@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for pkgAcqMethod::FetchItem@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for pkgAcqMethod::FetchResult@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for pkgCdrom@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for pkgCdromStatus@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for pkgDebianIndexFile@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for pkgDebianIndexRealFile@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for pkgDebianIndexTargetFile@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for pkgDepCache::ActionGroup@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for pkgOrderList@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for pkgProblemResolver@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for pkgRecords@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for pkgSourceList@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for pkgUserTagSection@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for SigVerify@APTPKG_5.0" 1.1~exp9 - (c++)"typeinfo name for TranslationsCopy@APTPKG_5.0" 1.1~exp9 - (c++)"URI::ArchiveOnly(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for APT::PackageUniverse@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for debDebianSourceDirIndex@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for debDebPkgFileIndex@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for debDscFileIndex@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for debPackagesIndex@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for debSourcesIndex@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for debStatusIndex@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for debTranslationsIndex@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for pkgAcqChangelog@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for pkgAcqMethod::FetchItem@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for pkgAcqMethod::FetchResult@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for pkgCdrom@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for pkgCdromStatus@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for pkgDebianIndexFile@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for pkgDebianIndexRealFile@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for pkgDebianIndexTargetFile@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for pkgDepCache::ActionGroup@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for pkgOrderList@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for pkgProblemResolver@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for pkgRecords@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for pkgSourceList@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for pkgUserTagSection@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for SigVerify@APTPKG_5.0" 1.1~exp9 - (c++)"vtable for TranslationsCopy@APTPKG_5.0" 1.1~exp9 + (c++)"APT::CacheSetHelper::CacheSetHelper(bool, GlobalError::MsgType)@APTPKG_6.0" 1.1~exp9 + (c++)"APT::Configuration::getArchitectures[abi:cxx11](bool const&)@APTPKG_6.0" 1.1~exp9 + (c++)"APT::Configuration::getCompressionTypes[abi:cxx11](bool const&)@APTPKG_6.0" 1.1~exp9 + (c++)"APT::Configuration::getLanguages[abi:cxx11](bool const&, bool const&, char const**)@APTPKG_6.0" 1.1~exp9 + (c++)"APT::PackageContainerInterface::operator=(APT::PackageContainerInterface const&)@APTPKG_6.0" 1.1~exp9 + (c++)"APT::PackageContainerInterface::PackageContainerInterface(APT::CacheSetHelper::PkgSelector)@APTPKG_6.0" 1.1~exp9 + (c++)"APT::PackageContainerInterface::PackageContainerInterface(APT::PackageContainerInterface const&)@APTPKG_6.0" 1.9.11~ + (c++)"APT::PackageContainerInterface::~PackageContainerInterface()@APTPKG_6.0" 1.1~exp9 + (c++)"APT::PackageContainerInterface::PackageContainerInterface()@APTPKG_6.0" 1.1~exp9 + (c++)"APT::PackageUniverse::~PackageUniverse()@APTPKG_6.0" 1.1~exp9 + (c++)"APT::PackageUniverse::PackageUniverse(pkgCache*)@APTPKG_6.0" 1.1~exp9 + (c++)"APT::PackageUniverse::PackageUniverse(pkgCacheFile*)@APTPKG_6.0" 1.1~exp9 + (c++)"APT::Progress::PackageManagerText::PackageManagerText()@APTPKG_6.0" 1.1~exp9 + (c++)"APT::VersionContainerInterface::FromDependency(APT::VersionContainerInterface*, pkgCacheFile&, pkgCache::DepIterator const&, APT::CacheSetHelper::VerSelector, APT::CacheSetHelper&)@APTPKG_6.0" 1.1~exp9 + (c++)"APT::VersionContainerInterface::operator=(APT::VersionContainerInterface const&)@APTPKG_6.0" 1.1~exp9 + (c++)"APT::VersionContainerInterface::~VersionContainerInterface()@APTPKG_6.0" 1.1~exp9 + (c++)"APT::VersionContainerInterface::VersionContainerInterface()@APTPKG_6.0" 1.1~exp9 + (c++)"APT::VersionContainerInterface::VersionContainerInterface(APT::VersionContainerInterface const&)@APTPKG_6.0" 1.9.11~ + (c++)"CommandLine::CommandLine()@APTPKG_6.0" 1.1~exp9 + (c++)"Configuration::FindVector(char const*, std::__cxx11::basic_string, std::allocator > const&, bool) const@APTPKG_6.0" 1.1~exp9 + (c++)"debDebianSourceDirIndex::GetType() const@APTPKG_6.0" 1.1~exp9 + (c++)"debDebPkgFileIndex::~debDebPkgFileIndex()@APTPKG_6.0" 1.1~exp9 + (c++)"debDebPkgFileIndex::debDebPkgFileIndex(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"debDebPkgFileIndex::ArchiveInfo[abi:cxx11](pkgCache::VerIterator const&) const@APTPKG_6.0" 1.1~exp9 + (c++)"debDebPkgFileIndex::FindInCache(pkgCache&) const@APTPKG_6.0" 1.1~exp9 + (c++)"debDebPkgFileIndex::GetArchitecture[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"debDebPkgFileIndex::GetComponent[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"debDebPkgFileIndex::GetContent(std::basic_ostream >&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"debDebPkgFileIndex::GetIndexFlags() const@APTPKG_6.0" 1.1~exp9 + (c++)"debDebPkgFileIndex::GetType() const@APTPKG_6.0" 1.1~exp9 + (c++)"debDebPkgFileIndex::OpenListFile(FileFd&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"debDscFileIndex::CreateSrcParser() const@APTPKG_6.0" 1.1~exp9 + (c++)"debDscFileIndex::~debDscFileIndex()@APTPKG_6.0" 1.1~exp9 + (c++)"debDscFileIndex::debDscFileIndex(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"debDscFileIndex::GetType() const@APTPKG_6.0" 1.1~exp9 + (c++)"debPackagesIndex::ArchiveInfo[abi:cxx11](pkgCache::VerIterator const&) const@APTPKG_6.0" 1.1~exp9 + (c++)"debPackagesIndex::~debPackagesIndex()@APTPKG_6.0" 1.1~exp9 + (c++)"debPackagesIndex::debPackagesIndex(IndexTarget const&, bool)@APTPKG_6.0" 1.1~exp9 + (c++)"debPackagesIndex::GetIndexFlags() const@APTPKG_6.0" 1.1~exp9 + (c++)"debPackagesIndex::GetType() const@APTPKG_6.0" 1.1~exp9 + (c++)"debSourcesIndex::CreateSrcParser() const@APTPKG_6.0" 1.1~exp9 + (c++)"debSourcesIndex::~debSourcesIndex()@APTPKG_6.0" 1.1~exp9 + (c++)"debSourcesIndex::debSourcesIndex(IndexTarget const&, bool)@APTPKG_6.0" 1.1~exp9 + (c++)"debSourcesIndex::GetIndexFlags() const@APTPKG_6.0" 1.1~exp9 + (c++)"debSourcesIndex::GetType() const@APTPKG_6.0" 1.1~exp9 + (c++)"debSourcesIndex::OpenListFile(FileFd&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"debSourcesIndex::SourceInfo[abi:cxx11](pkgSrcRecords::Parser const&, pkgSrcRecords::File const&) const@APTPKG_6.0" 1.1~exp9 + (c++)"debStatusIndex::~debStatusIndex()@APTPKG_6.0" 1.1~exp9 + (c++)"debStatusIndex::debStatusIndex(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"debStatusIndex::GetArchitecture[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"debStatusIndex::GetComponent[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"debStatusIndex::GetIndexFlags() const@APTPKG_6.0" 1.1~exp9 + (c++)"debStatusIndex::GetType() const@APTPKG_6.0" 1.1~exp9 + (c++)"debTranslationsIndex::~debTranslationsIndex()@APTPKG_6.0" 1.1~exp9 + (c++)"debTranslationsIndex::debTranslationsIndex(IndexTarget const&)@APTPKG_6.0" 1.1~exp9 + (c++)"debTranslationsIndex::GetArchitecture[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"debTranslationsIndex::GetIndexFlags() const@APTPKG_6.0" 1.1~exp9 + (c++)"debTranslationsIndex::GetType() const@APTPKG_6.0" 1.1~exp9 + (c++)"debTranslationsIndex::HasPackages() const@APTPKG_6.0" 1.1~exp9 + (c++)"debTranslationsIndex::OpenListFile(FileFd&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"ExecGPGV(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, int const&, int*, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"FileFd::FileFd()@APTPKG_6.0" 1.1~exp9 + (c++)"FileFd::FileFd(int, bool)@APTPKG_6.0" 1.1~exp9 + (c++)"FileFd::FileFd(int, unsigned int, FileFd::CompressMode)@APTPKG_6.0" 1.1~exp9 + (c++)"FileFd::FileFd(std::__cxx11::basic_string, std::allocator >, unsigned int, FileFd::CompressMode, unsigned long)@APTPKG_6.0" 1.1~exp9 + (c++)"GetTempFile(std::__cxx11::basic_string, std::allocator > const&, bool, FileFd*)@APTPKG_6.0" 1.1~exp9 + (c++)"Hashes::AddFD(FileFd&, unsigned long long)@APTPKG_6.0" 1.1~exp9 + (c++)"Hashes::AddFD(int, unsigned long long)@APTPKG_6.0" 1.1~exp9 + (c++)"Hashes::Add(unsigned char const*, unsigned long long)@APTPKG_6.0" 1.1~exp9 + (c++)"Hashes::Hashes(HashStringList const&)@APTPKG_6.0" 1.1~exp9 + (c++)"Hashes::Hashes(unsigned int)@APTPKG_6.0" 1.1~exp9 + (c++)"HashStringList::FileSize() const@APTPKG_6.0" 1.1~exp9 + (c++)"HashStringList::FileSize(unsigned long long)@APTPKG_6.0" 1.1~exp9 + (c++)"IndexCopy::IndexCopy()@APTPKG_6.0" 1.1~exp9 + (c++)"IndexTarget::Format(std::__cxx11::basic_string, std::allocator >) const@APTPKG_6.0" 1.1~exp9 + (c++)"IndexTarget::IndexTarget(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, bool, bool, std::map, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"IndexTarget::Option[abi:cxx11](IndexTarget::OptionKeys) const@APTPKG_6.0" 1.1~exp9 + (c++)"metaIndex::CheckDist(std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_6.0" 1.1~exp9 + (c++)"metaIndex::Describe[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"metaIndex::Exists(std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_6.0" 1.1~exp9 + (c++)"metaIndex::FindInCache(pkgCache&, bool) const@APTPKG_6.0" 1.1~exp9 + (c++)"metaIndex::GetCodename[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"metaIndex::GetDate() const@APTPKG_6.0" 1.1~exp9 + (c++)"metaIndex::GetExpectedDist[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"metaIndex::GetLoadedSuccessfully() const@APTPKG_6.0" 1.1~exp9 + (c++)"metaIndex::GetSignedBy[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"metaIndex::GetSuite[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"metaIndex::GetSupportsAcquireByHash() const@APTPKG_6.0" 1.1~exp9 + (c++)"metaIndex::GetTrusted() const@APTPKG_6.0" 1.1~exp9 + (c++)"metaIndex::GetValidUntil() const@APTPKG_6.0" 1.1~exp9 + (c++)"metaIndex::Lookup(std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_6.0" 1.1~exp9 + (c++)"metaIndex::MetaKeys[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"metaIndex::swapLoad(metaIndex*)@APTPKG_6.0" 1.1~exp9 + (c++)"PackageCopy::PackageCopy()@APTPKG_6.0" 1.1~exp9 + (c++)"PackageCopy::RewriteEntry(FileFd&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqArchive::DescURI[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqArchive::Done(std::__cxx11::basic_string, std::allocator > const&, HashStringList const&, pkgAcquire::MethodConfig const*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqArchive::Failed(std::__cxx11::basic_string, std::allocator > const&, pkgAcquire::MethodConfig const*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqArchive::GetExpectedHashes() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqArchive::GetFinalFilename[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqArchive::HashesRequired() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqArchive::ShortDesc[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqChangelog::Done(std::__cxx11::basic_string, std::allocator > const&, HashStringList const&, pkgAcquire::MethodConfig const*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqChangelog::Failed(std::__cxx11::basic_string, std::allocator > const&, pkgAcquire::MethodConfig const*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqChangelog::~pkgAcqChangelog()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqChangelog::pkgAcqChangelog(pkgAcquire*, pkgCache::RlsFileIterator const&, char const*, char const*, char const*, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqChangelog::pkgAcqChangelog(pkgAcquire*, pkgCache::VerIterator const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqChangelog::pkgAcqChangelog(pkgAcquire*, std::__cxx11::basic_string, std::allocator > const&, char const*, char const*, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqChangelog::URI[abi:cxx11](pkgCache::RlsFileIterator const&, char const*, char const*, char const*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqChangelog::URI[abi:cxx11](pkgCache::VerIterator const&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqChangelog::URI(std::__cxx11::basic_string, std::allocator > const&, char const*, char const*, char const*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqChangelog::URITemplate[abi:cxx11](pkgCache::RlsFileIterator const&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqFile::Done(std::__cxx11::basic_string, std::allocator > const&, HashStringList const&, pkgAcquire::MethodConfig const*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqFile::GetExpectedHashes() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqFile::HashesRequired() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqFile::pkgAcqFile(pkgAcquire*, std::__cxx11::basic_string, std::allocator > const&, HashStringList const&, unsigned long long, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, bool)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqMethod::FetchItem::FetchItem()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqMethod::FetchItem::~FetchItem()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcqMethod::FetchResult::~FetchResult()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcquire::Item::Done(std::__cxx11::basic_string, std::allocator > const&, HashStringList const&, pkgAcquire::MethodConfig const*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcquire::Item::Failed(std::__cxx11::basic_string, std::allocator > const&, pkgAcquire::MethodConfig const*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcquire::Item::GetFinalFilename[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcquire::Item::GetItemDesc()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcquire::Item::GetOwner() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcquire::Item::HashSum[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcquire::Item::Item(pkgAcquire*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcquire::Item::Rename(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcquire::Item::ShortDesc[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcquire::Item::Start(std::__cxx11::basic_string, std::allocator > const&, unsigned long long)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcquire::Item::VerifyDone(std::__cxx11::basic_string, std::allocator > const&, pkgAcquire::MethodConfig const*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcquire::Queue::QItem::Custom600Headers[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcquire::Queue::QItem::GetExpectedHashes() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcquire::Queue::QItem::GetMaximumSize() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcquire::Queue::QItem::SyncDestinationFiles() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcquire::Queue::Queue(std::__cxx11::basic_string, std::allocator > const&, pkgAcquire*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgAcquire::UriIterator::UriIterator(pkgAcquire::Queue*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgArchiveCleaner::pkgArchiveCleaner()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgCache::DepIterator::IsImplicit() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgCacheFile::pkgCacheFile(pkgDepCache*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgCache::PkgIterator::FullName[abi:cxx11](bool const&) const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgCache::RlsFileIterator::RelStr[abi:cxx11]()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgCdrom::~pkgCdrom()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgCdrom::pkgCdrom()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgCdromStatus::~pkgCdromStatus()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgCdromStatus::pkgCdromStatus()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexFile::FindInCache(pkgCache&) const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexFile::~pkgDebianIndexFile()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexFile::pkgDebianIndexFile(bool)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexRealFile::ArchiveURI(std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexRealFile::Describe[abi:cxx11](bool) const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexRealFile::Exists() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexRealFile::GetProgressDescription[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexRealFile::IndexFileName[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexRealFile::OpenListFile(FileFd&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexRealFile::~pkgDebianIndexRealFile()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexRealFile::pkgDebianIndexRealFile(std::__cxx11::basic_string, std::allocator > const&, bool)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexRealFile::Size() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexTargetFile::ArchiveURI(std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexTargetFile::Describe[abi:cxx11](bool) const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexTargetFile::Exists() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexTargetFile::GetArchitecture[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexTargetFile::GetComponent[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexTargetFile::GetProgressDescription[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexTargetFile::IndexFileName[abi:cxx11]() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexTargetFile::OpenListFile(FileFd&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexTargetFile::~pkgDebianIndexTargetFile()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexTargetFile::pkgDebianIndexTargetFile(IndexTarget const&, bool)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDebianIndexTargetFile::Size() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDepCache::CheckDep(pkgCache::DepIterator const&, int, pkgCache::PkgIterator&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDepCache::DependencyState(pkgCache::DepIterator const&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDepCache::Policy::IsImportantDep(pkgCache::DepIterator const&) const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDepCache::UpdateVerState(pkgCache::PkgIterator const&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgDepCache::VersionState(pkgCache::DepIterator, unsigned char, unsigned char, unsigned char) const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgIndexFile::ArchiveInfo[abi:cxx11](pkgCache::VerIterator const&) const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgIndexFile::~pkgIndexFile()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgIndexFile::pkgIndexFile(bool)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgIndexFile::SourceInfo[abi:cxx11](pkgSrcRecords::Parser const&, pkgSrcRecords::File const&) const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgRecords::Parser::~Parser()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgRecords::Parser::Parser()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgSourceList::AddVolatileFile(pkgIndexFile*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgSourceList::GetVolatileFiles() const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgSourceList::ReadAppend(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgSourceList::ReadSourceDir(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgSourceList::Read(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgSourceList::Type::ParseLine(std::vector >&, char const*, unsigned int, std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgSourceList::Type::ParseStanza(std::vector >&, pkgTagSection&, unsigned int, FileFd&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgSourceList::Type::~Type()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgSourceList::Type::Type(char const*, char const*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgSrcRecords::Parser::~Parser()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgSrcRecords::Parser::Parser(pkgIndexFile const*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgSystem::~pkgSystem()@APTPKG_6.0" 1.1~exp9 + (c++)"pkgSystem::pkgSystem(char const*, pkgVersioningSystem*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgTagSection::FindFlag(APT::StringView, unsigned char&, unsigned char) const@APTPKG_6.0" 1.9~ + (c++)"pkgTagSection::FindFlag(unsigned char&, unsigned char, char const*, char const*)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgTagSection::FindRaw(APT::StringView) const@APTPKG_6.0" 1.9~ + (c++)"pkgTagSection::Tag::Remove(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgTagSection::Tag::Rename(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgTagSection::Tag::Rewrite(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgTagSection::Write(FileFd&, char const* const*, std::vector > const&) const@APTPKG_6.0" 1.1~exp9 + (c++)"pkgVersioningSystem::~pkgVersioningSystem()@APTPKG_6.0" 1.1~exp9 + (c++)"SigVerify::~SigVerify()@APTPKG_6.0" 1.1~exp9 + (c++)"SigVerify::SigVerify()@APTPKG_6.0" 1.1~exp9 + (c++)"SourceCopy::RewriteEntry(FileFd&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"SourceCopy::SourceCopy()@APTPKG_6.0" 1.1~exp9 + (c++)"TranslationsCopy::~TranslationsCopy()@APTPKG_6.0" 1.1~exp9 + (c++)"TranslationsCopy::TranslationsCopy()@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for APT::PackageUniverse@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for debDebianSourceDirIndex@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for debDebPkgFileIndex@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for debDscFileIndex@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for debPackagesIndex@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for debSourcesIndex@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for debStatusIndex@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for debTranslationsIndex@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for pkgAcqChangelog@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for pkgAcqMethod::FetchItem@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for pkgAcqMethod::FetchResult@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for pkgCdrom@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for pkgCdromStatus@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for pkgDebianIndexFile@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for pkgDebianIndexRealFile@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for pkgDebianIndexTargetFile@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for pkgDepCache::ActionGroup@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for pkgOrderList@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for pkgProblemResolver@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for pkgRecords@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for pkgSourceList@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for SigVerify@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo for TranslationsCopy@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for APT::PackageUniverse@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for debDebianSourceDirIndex@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for debDebPkgFileIndex@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for debDscFileIndex@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for debPackagesIndex@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for debSourcesIndex@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for debStatusIndex@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for debTranslationsIndex@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for pkgAcqChangelog@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for pkgAcqMethod::FetchItem@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for pkgAcqMethod::FetchResult@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for pkgCdrom@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for pkgCdromStatus@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for pkgDebianIndexFile@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for pkgDebianIndexRealFile@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for pkgDebianIndexTargetFile@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for pkgDepCache::ActionGroup@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for pkgOrderList@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for pkgProblemResolver@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for pkgRecords@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for pkgSourceList@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for SigVerify@APTPKG_6.0" 1.1~exp9 + (c++)"typeinfo name for TranslationsCopy@APTPKG_6.0" 1.1~exp9 + (c++)"URI::ArchiveOnly(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for APT::PackageUniverse@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for debDebianSourceDirIndex@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for debDebPkgFileIndex@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for debDscFileIndex@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for debPackagesIndex@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for debSourcesIndex@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for debStatusIndex@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for debTranslationsIndex@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for pkgAcqChangelog@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for pkgAcqMethod::FetchItem@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for pkgAcqMethod::FetchResult@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for pkgCdrom@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for pkgCdromStatus@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for pkgDebianIndexFile@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for pkgDebianIndexRealFile@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for pkgDebianIndexTargetFile@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for pkgDepCache::ActionGroup@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for pkgOrderList@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for pkgProblemResolver@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for pkgRecords@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for pkgSourceList@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for SigVerify@APTPKG_6.0" 1.1~exp9 + (c++)"vtable for TranslationsCopy@APTPKG_6.0" 1.1~exp9 +### ABI 6 + (c++)"APT::CacheFilter::ParsePattern(APT::StringView, pkgCacheFile*)@APTPKG_6.0" 1.9.11~ + (c++)"APT::CacheSetHelper::PackageFromPattern(APT::PackageContainerInterface*, pkgCacheFile&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.9.11~ + (c++)"APT::CacheSetHelper::showPatternSelection(pkgCache::PkgIterator const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.9.11~ + (c++)"APT::String::DisplayLength(APT::StringView)@APTPKG_6.0" 1.9.11~ + (c++)"Hashes::GetHashString(Hashes::SupportedHashes)@APTPKG_6.0" 1.9.11~ + (c++)"pkgCache::VerIterator::TranslatedDescriptionForLanguage(APT::StringView) const@APTPKG_6.0" 1.9.11~ + (c++)"pkgPolicy::SetPriority(pkgCache::PkgFileIterator const&, short)@APTPKG_6.0" 1.9.11~ + (c++)"pkgPolicy::SetPriority(pkgCache::VerIterator const&, short)@APTPKG_6.0" 1.9.11~ ### dpkg selection state changer & general dpkg interfacing - (c++)"APT::StateChanges::clear()@APTPKG_5.0" 1.1~exp15 - (c++)"APT::StateChanges::empty() const@APTPKG_5.0" 1.1~exp15 - (c++)"APT::StateChanges::Error()@APTPKG_5.0" 1.1~exp15 - (c++)"APT::StateChanges::Hold()@APTPKG_5.0" 1.1~exp15 - (c++)"APT::StateChanges::Hold(pkgCache::VerIterator const&)@APTPKG_5.0" 1.1~exp15 - (c++)"APT::StateChanges::Install()@APTPKG_5.0" 1.1~exp15 - (c++)"APT::StateChanges::Install(pkgCache::VerIterator const&)@APTPKG_5.0" 1.1~exp15 - (c++)"APT::StateChanges::operator=(APT::StateChanges&&)@APTPKG_5.0" 1.1~exp15 - (c++)"APT::StateChanges::Purge()@APTPKG_5.0" 1.1~exp15 - (c++)"APT::StateChanges::Purge(pkgCache::VerIterator const&)@APTPKG_5.0" 1.1~exp15 - (c++)"APT::StateChanges::Remove()@APTPKG_5.0" 1.1~exp15 - (c++)"APT::StateChanges::Remove(pkgCache::VerIterator const&)@APTPKG_5.0" 1.1~exp15 - (c++)"APT::StateChanges::Save(bool)@APTPKG_5.0" 1.1~exp15 - (c++)"APT::StateChanges::~StateChanges()@APTPKG_5.0" 1.1~exp15 - (c++)"APT::StateChanges::StateChanges()@APTPKG_5.0" 1.1~exp15 - (c++)"APT::StateChanges::StateChanges(APT::StateChanges&&)@APTPKG_5.0" 1.1~exp15 - (c++)"APT::StateChanges::Unhold()@APTPKG_5.0" 1.1~exp15 - (c++)"APT::StateChanges::Unhold(pkgCache::VerIterator const&)@APTPKG_5.0" 1.1~exp15 - (c++)"pkgSystem::ArchitecturesSupported[abi:cxx11]() const@APTPKG_5.0" 1.1~exp15 - (c++)"pkgSystem::MultiArchSupported() const@APTPKG_5.0" 1.1~exp15 - (c++)"metaIndex::IsArchitectureSupported(std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_5.0" 1.1~exp15 + (c++)"APT::StateChanges::clear()@APTPKG_6.0" 1.1~exp15 + (c++)"APT::StateChanges::empty() const@APTPKG_6.0" 1.1~exp15 + (c++)"APT::StateChanges::Error()@APTPKG_6.0" 1.1~exp15 + (c++)"APT::StateChanges::Hold()@APTPKG_6.0" 1.1~exp15 + (c++)"APT::StateChanges::Hold(pkgCache::VerIterator const&)@APTPKG_6.0" 1.1~exp15 + (c++)"APT::StateChanges::Install()@APTPKG_6.0" 1.1~exp15 + (c++)"APT::StateChanges::Install(pkgCache::VerIterator const&)@APTPKG_6.0" 1.1~exp15 + (c++)"APT::StateChanges::operator=(APT::StateChanges&&)@APTPKG_6.0" 1.1~exp15 + (c++)"APT::StateChanges::Purge()@APTPKG_6.0" 1.1~exp15 + (c++)"APT::StateChanges::Purge(pkgCache::VerIterator const&)@APTPKG_6.0" 1.1~exp15 + (c++)"APT::StateChanges::Remove()@APTPKG_6.0" 1.1~exp15 + (c++)"APT::StateChanges::Remove(pkgCache::VerIterator const&)@APTPKG_6.0" 1.1~exp15 + (c++)"APT::StateChanges::Save(bool)@APTPKG_6.0" 1.1~exp15 + (c++)"APT::StateChanges::~StateChanges()@APTPKG_6.0" 1.1~exp15 + (c++)"APT::StateChanges::StateChanges()@APTPKG_6.0" 1.1~exp15 + (c++)"APT::StateChanges::StateChanges(APT::StateChanges&&)@APTPKG_6.0" 1.1~exp15 + (c++)"APT::StateChanges::Unhold()@APTPKG_6.0" 1.1~exp15 + (c++)"APT::StateChanges::Unhold(pkgCache::VerIterator const&)@APTPKG_6.0" 1.1~exp15 + (c++)"metaIndex::IsArchitectureSupported(std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_6.0" 1.1~exp15 ### misc stuff - (c++)"RemoveFile(char const*, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp15 - (c++)"pkgOrderList::OrderCompareA(pkgCache::Package*, pkgCache::Package*)@APTPKG_5.0" 1.1~exp15 - (c++)"pkgOrderList::OrderCompareB(pkgCache::Package*, pkgCache::Package*)@APTPKG_5.0" 1.1~exp15 - (c++)"CommandLine::DispatchArg(CommandLine::Dispatch const*, bool)@APTPKG_5.0" 1.1~exp15 - (c++)"Configuration::MoveSubTree(char const*, char const*)@APTPKG_5.0" 1.1~exp15 - (c++)"GetTempDir(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp15 - (c++)"HashString::usable() const@APTPKG_5.0" 1.1~exp15 - (c++)"IndexTarget::OptionBool(IndexTarget::OptionKeys) const@APTPKG_5.0" 1.1~exp12 - (c++)"pkgDepCache::GetCandidateVersion(pkgCache::PkgIterator const&)@APTPKG_5.0" 1.1~exp15 - (c++)"pkgDepCache::Policy::GetPriority(pkgCache::VerIterator const&, bool)@APTPKG_5.0" 1.1~exp15 - (c++)"pkgPackageManager::CheckRBreaks(pkgCache::PkgIterator const&, pkgCache::DepIterator, char const*)@APTPKG_5.0" 1.1~exp11 - (c++)"pkgPolicy::GetPriority(pkgCache::VerIterator const&, bool)@APTPKG_5.0" 1.1~exp9 - (c++)"pkgSourceList::AddVolatileFiles(CommandLine&, std::vector >*)@APTPKG_5.0" 1.1~exp15 - (c++)"pkgSourceList::AddVolatileFile(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.1~exp15 - (c++)"pkgVersionMatch::VersionMatches(pkgCache::VerIterator)@APTPKG_5.0" 1.1~exp9 - (c++)"GetSrvRecords(std::__cxx11::basic_string, std::allocator >, int, std::vector >&)@APTPKG_5.0" 1.1~exp15 - (c++)"GetSrvRecords(std::__cxx11::basic_string, std::allocator >, std::vector >&)@APTPKG_5.0" 1.1~exp15 - (c++)"PopFromSrvRecs(std::vector >&)@APTPKG_5.0" 1.1~exp15 - (c++)"SrvRec::operator==(SrvRec const&) const@APTPKG_5.0" 1.1~exp15 - (c++)"debDebianSourceDirIndex::GetComponent[abi:cxx11]() const@APTPKG_5.0" 1.1.4 - (c++)"debDscFileIndex::GetArchitecture[abi:cxx11]() const@APTPKG_5.0" 1.1.4 - (c++)"debDscFileIndex::GetComponent[abi:cxx11]() const@APTPKG_5.0" 1.1.4 - (c++)"debDscFileIndex::GetIndexFlags() const@APTPKG_5.0" 1.1.4 - (c++)"FileFd::Flush()@APTPKG_5.0" 1.1.9 - (c++)"isspace_ascii(int)@APTPKG_5.0" 1.1.9 - (c++)"metaIndex::IsArchitectureAllSupportedFor(IndexTarget const&) const@APTPKG_5.0" 1.1.9 - (c++)"pkgTagFile::Init(FileFd*, pkgTagFile::Flags, unsigned long long)@APTPKG_5.0" 1.2~exp1 - (c++)"pkgTagFile::pkgTagFile(FileFd*, pkgTagFile::Flags, unsigned long long)@APTPKG_5.0" 1.2~exp1 + (c++)"RemoveFile(char const*, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp15 + (c++)"pkgOrderList::OrderCompareA(pkgCache::Package*, pkgCache::Package*)@APTPKG_6.0" 1.1~exp15 + (c++)"pkgOrderList::OrderCompareB(pkgCache::Package*, pkgCache::Package*)@APTPKG_6.0" 1.1~exp15 + (c++)"CommandLine::DispatchArg(CommandLine::Dispatch const*, bool)@APTPKG_6.0" 1.1~exp15 + (c++)"Configuration::MoveSubTree(char const*, char const*)@APTPKG_6.0" 1.1~exp15 + (c++)"GetTempDir(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp15 + (c++)"HashString::usable() const@APTPKG_6.0" 1.1~exp15 + (c++)"IndexTarget::OptionBool(IndexTarget::OptionKeys) const@APTPKG_6.0" 1.1~exp12 + (c++)"pkgDepCache::GetCandidateVersion(pkgCache::PkgIterator const&)@APTPKG_6.0" 1.1~exp15 + (c++)"pkgDepCache::Policy::GetPriority(pkgCache::VerIterator const&, bool)@APTPKG_6.0" 1.1~exp15 + (c++)"pkgPackageManager::CheckRBreaks(pkgCache::PkgIterator const&, pkgCache::DepIterator, char const*)@APTPKG_6.0" 1.1~exp11 + (c++)"pkgPolicy::GetPriority(pkgCache::VerIterator const&, bool)@APTPKG_6.0" 1.1~exp9 + (c++)"pkgSourceList::AddVolatileFile(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.1~exp15 + (c++)"pkgVersionMatch::VersionMatches(pkgCache::VerIterator)@APTPKG_6.0" 1.1~exp9 + (c++)"GetSrvRecords(std::__cxx11::basic_string, std::allocator >, int, std::vector >&)@APTPKG_6.0" 1.1~exp15 + (c++)"GetSrvRecords(std::__cxx11::basic_string, std::allocator >, std::vector >&)@APTPKG_6.0" 1.1~exp15 + (c++)"PopFromSrvRecs(std::vector >&)@APTPKG_6.0" 1.1~exp15 + (c++)"SrvRec::operator==(SrvRec const&) const@APTPKG_6.0" 1.1~exp15 + (c++)"debDebianSourceDirIndex::GetComponent[abi:cxx11]() const@APTPKG_6.0" 1.1.4 + (c++)"debDscFileIndex::GetArchitecture[abi:cxx11]() const@APTPKG_6.0" 1.1.4 + (c++)"debDscFileIndex::GetComponent[abi:cxx11]() const@APTPKG_6.0" 1.1.4 + (c++)"debDscFileIndex::GetIndexFlags() const@APTPKG_6.0" 1.1.4 + (c++)"FileFd::Flush()@APTPKG_6.0" 1.1.9 + (c++)"isspace_ascii(int)@APTPKG_6.0" 1.1.9 + (c++)"metaIndex::IsArchitectureAllSupportedFor(IndexTarget const&) const@APTPKG_6.0" 1.1.9 + (c++)"pkgTagFile::Init(FileFd*, pkgTagFile::Flags, unsigned long long)@APTPKG_6.0" 1.2~exp1 + (c++)"pkgTagFile::pkgTagFile(FileFd*, pkgTagFile::Flags, unsigned long long)@APTPKG_6.0" 1.2~exp1 ### symbol versioning: - APTPKG_5.0@APTPKG_5.0 1.1~exp9 + APTPKG_6.0@APTPKG_6.0 1.1~exp9 ### gcc artifacts - (c++|optional=std)"void std::vector >::emplace_back(char const*&&)@APTPKG_5.0" 1.1~exp9 - (c++|optional=std)"void std::vector >::emplace_back(pkgCache::GrpIterator*&&)@APTPKG_5.0" 1.1~exp9 - (c++|optional=std)"void std::vector >::emplace_back(pkgCache::PkgIterator*&&)@APTPKG_5.0" 1.1~exp9 -# (c++|optional=std)"void std::vector >::emplace_back(pkgCache::RlsFileIterator*&&)@APTPKG_5.0" 1.1~exp9 - (c++|optional=std)"void std::vector >::emplace_back(pkgCache::VerIterator*&&)@APTPKG_5.0" 1.1~exp9 - (c++|optional=std)"void std::vector >::emplace_back(pkgDPkgPM::Item&&)@APTPKG_5.0" 1.1~exp9 - (c++|optional=std)"void std::vector >::emplace_back(pkgIndexFile*&&)@APTPKG_5.0" 1.1~exp9 - (c++|optional=std)"void std::vector >::emplace_back(pkgTagSection::Tag&&)@APTPKG_5.0" 1.1~exp9 - (c++|optional=std)"void std::vector, std::allocator >, std::allocator, std::allocator > > >::emplace_back, std::allocator > >(std::__cxx11::basic_string, std::allocator >&&)@APTPKG_5.0" 1.1~exp9 - (arch=!x32|c++|optional=std)"void std::vector >::emplace_back(long&&)@APTPKG_5.0" 1.1~exp15 - (arch=x32|c++|optional=std)"void std::vector >::emplace_back(long long&&)@APTPKG_5.0" 1.1~exp15 - (c++|optional=std)"void std::vector >::emplace_back(pkgCache::VerIterator&&)@APTPKG_5.0" 1.1~exp15 - (c++|optional=std)"SrvRec* std::__move_merge<__gnu_cxx::__normal_iterator > >, SrvRec*, __gnu_cxx::__ops::_Iter_less_iter>(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, SrvRec*, __gnu_cxx::__ops::_Iter_less_iter)@APTPKG_5.0" 1.1~exp15 - (c++|optional=std)"void std::vector, std::allocator > >::emplace_back >(std::pair&&)@APTPKG_5.0" 1.1 - (c++|optional=std)"char const* const* std::__find_if, std::allocator > const> >(char const* const*, char const* const*, __gnu_cxx::__ops::_Iter_equals_val, std::allocator > const>, std::random_access_iterator_tag)@APTPKG_5.0" 1.3~exp1 + (c++|optional=std)"void std::vector >::emplace_back(char const*&&)@APTPKG_6.0" 1.1~exp9 + (c++|optional=std)"void std::vector >::emplace_back(pkgCache::GrpIterator*&&)@APTPKG_6.0" 1.1~exp9 + (c++|optional=std)"void std::vector >::emplace_back(pkgCache::PkgIterator*&&)@APTPKG_6.0" 1.1~exp9 +# (c++|optional=std)"void std::vector >::emplace_back(pkgCache::RlsFileIterator*&&)@APTPKG_6.0" 1.1~exp9 + (c++|optional=std)"void std::vector >::emplace_back(pkgCache::VerIterator*&&)@APTPKG_6.0" 1.1~exp9 + (c++|optional=std)"void std::vector >::emplace_back(pkgDPkgPM::Item&&)@APTPKG_6.0" 1.1~exp9 + (c++|optional=std)"void std::vector >::emplace_back(pkgIndexFile*&&)@APTPKG_6.0" 1.1~exp9 + (c++|optional=std)"void std::vector >::emplace_back(pkgTagSection::Tag&&)@APTPKG_6.0" 1.1~exp9 + (c++|optional=std)"void std::vector, std::allocator >, std::allocator, std::allocator > > >::emplace_back, std::allocator > >(std::__cxx11::basic_string, std::allocator >&&)@APTPKG_6.0" 1.1~exp9 + (arch=!x32|c++|optional=std)"void std::vector >::emplace_back(long&&)@APTPKG_6.0" 1.1~exp15 + (arch=x32|c++|optional=std)"void std::vector >::emplace_back(long long&&)@APTPKG_6.0" 1.1~exp15 + (c++|optional=std)"void std::vector >::emplace_back(pkgCache::VerIterator&&)@APTPKG_6.0" 1.1~exp15 + (c++|optional=std)"SrvRec* std::__move_merge<__gnu_cxx::__normal_iterator > >, SrvRec*, __gnu_cxx::__ops::_Iter_less_iter>(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, SrvRec*, __gnu_cxx::__ops::_Iter_less_iter)@APTPKG_6.0" 1.1~exp15 + (c++|optional=std)"void std::vector, std::allocator > >::emplace_back >(std::pair&&)@APTPKG_6.0" 1.1 + (c++|optional=std)"char const* const* std::__find_if, std::allocator > const> >(char const* const*, char const* const*, __gnu_cxx::__ops::_Iter_equals_val, std::allocator > const>, std::random_access_iterator_tag)@APTPKG_6.0" 1.3~exp1 ### try to ignore std:: template instances - (c++|regex|optional=std)"^std::vector<.+ >::(vector|push_back|erase|_[^ ]+)\(.+\)( const|)@APTPKG_5.0$" 0.8.0 - (c++|regex|optional=std)"^(void |)std::[^ ]+<.+ >::(_|~).+\(.*\)@APTPKG_5.0$" 0.8.0 - (c++|regex|optional=std)"^std::[^ ]+<.+ >::(append|insert|reserve|operator[^ ]+)\(.*\)@APTPKG_5.0$" 0.8.0 - (c++|regex|optional=std)"^(void |DiffInfo\* |)std::_.*@APTPKG_5.0$" 0.8.0 - (c++|regex|optional=std)"^__gnu_cxx::__[^ ]+<.*@APTPKG_5.0$" 0.8.0 + (c++|regex|optional=std)"^std::vector<.+ >::(vector|push_back|erase|_[^ ]+)\(.+\)( const|)@APTPKG_6.0$" 0.8.0 + (c++|regex|optional=std)"^(void |)std::[^ ]+<.+ >::(_|~).+\(.*\)@APTPKG_6.0$" 0.8.0 + (c++|regex|optional=std)"^std::[^ ]+<.+ >::(append|insert|reserve|operator[^ ]+)\(.*\)@APTPKG_6.0$" 0.8.0 + (c++|regex|optional=std)"^(void |DiffInfo\* |)std::_.*@APTPKG_6.0$" 0.8.0 + (c++|regex|optional=std)"^__gnu_cxx::__[^ ]+<.*@APTPKG_6.0$" 0.8.0 ### - (c++)"debStringPackageIndex::~debStringPackageIndex()@APTPKG_5.0" 1.2.2 - (c++)"debStringPackageIndex::debStringPackageIndex(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.2.2 - (c++)"debStringPackageIndex::GetArchitecture[abi:cxx11]() const@APTPKG_5.0" 1.2.2 - (c++)"debStringPackageIndex::GetComponent[abi:cxx11]() const@APTPKG_5.0" 1.2.2 - (c++)"debStringPackageIndex::GetIndexFlags() const@APTPKG_5.0" 1.2.2 - (c++)"debStringPackageIndex::GetType() const@APTPKG_5.0" 1.2.2 - (c++)"pkgCacheFile::AddIndexFile(pkgIndexFile*)@APTPKG_5.0" 1.2.2 - (c++)"typeinfo for debStringPackageIndex@APTPKG_5.0" 1.2.2 - (c++)"typeinfo name for debStringPackageIndex@APTPKG_5.0" 1.2.2 - (c++)"vtable for debStringPackageIndex@APTPKG_5.0" 1.2.2 - (c++)"operator<<(std::basic_ostream >&, APT::PrettyDep const&)@APTPKG_5.0" 1.3~exp1 - (c++)"operator<<(std::basic_ostream >&, APT::PrettyPkg const&)@APTPKG_5.0" 1.3~exp1 - (c++)"EDSP::ReadRequest(int, std::__cxx11::list, std::allocator >, std::allocator, std::allocator > > >&, std::__cxx11::list, std::allocator >, std::allocator, std::allocator > > >&, unsigned int&)@APTPKG_5.0" 1.3~exp2 - (c++)"EDSP::ResolveExternal(char const*, pkgDepCache&, unsigned int, OpProgress*)@APTPKG_5.0" 1.3~exp2 - (c++)"EDSP::WriteError(char const*, std::__cxx11::basic_string, std::allocator > const&, FileFd&)@APTPKG_5.0" 1.3~exp2 - (c++)"EDSP::WriteLimitedScenario(pkgDepCache&, FileFd&, std::vector > const&, OpProgress*)@APTPKG_5.0" 1.3~exp2 - (c++)"EDSP::WriteProgress(unsigned short, char const*, FileFd&)@APTPKG_5.0" 1.3~exp2 - (c++)"EDSP::WriteRequest(pkgDepCache&, FileFd&, unsigned int, OpProgress*)@APTPKG_5.0" 1.3~exp2 - (c++)"EDSP::WriteScenario(pkgDepCache&, FileFd&, OpProgress*)@APTPKG_5.0" 1.3~exp2 - (c++)"EDSP::WriteSolutionStanza(FileFd&, char const*, pkgCache::VerIterator const&)@APTPKG_5.0" 1.3~exp2 - (c++)"int __gnu_cxx::__stoa(long (*)(char const*, char**, int), char const*, char const*, unsigned long*, int)@APTPKG_5.0" 1.3~exp2 - (c++)"EIPP::ApplyRequest(std::__cxx11::list, std::allocator >, EIPP::PKG_ACTION>, std::allocator, std::allocator >, EIPP::PKG_ACTION> > >&, pkgDepCache&)@APTPKG_5.0" 1.3~rc2 - (c++)"EIPP::ReadRequest(int, std::__cxx11::list, std::allocator >, EIPP::PKG_ACTION>, std::allocator, std::allocator >, EIPP::PKG_ACTION> > >&, unsigned int&)@APTPKG_5.0" 1.3~rc2 - (c++)"FileFd::Read(int, void*, unsigned long long, unsigned long long*)@APTPKG_5.0" 1.3~rc2 - (c++)"pkgSourceList::AddVolatileFiles(CommandLine&, std::vector, std::allocator >, std::allocator, std::allocator > > >*)@APTPKG_5.0" 1.3~rc2 - (c++)"pkgSourceList::AddVolatileFile(std::__cxx11::basic_string, std::allocator > const&, std::vector, std::allocator >, std::allocator, std::allocator > > >*)@APTPKG_5.0" 1.3~rc2 - (c++)"TimeRFC1123[abi:cxx11](long, bool)@APTPKG_5.0" 1.3~rc2 - (c++)"unsigned long std::uniform_int_distribution::operator() >(std::linear_congruential_engine&, std::uniform_int_distribution::param_type const&)@APTPKG_5.0" 1.3~rc2 - (c++)"void std::shuffle<__gnu_cxx::__normal_iterator > >, std::linear_congruential_engine&>(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, std::linear_congruential_engine&)@APTPKG_5.0" 1.3~rc2 - (c++)"void std::vector >::emplace_back(pkgDPkgPM::Item::Ops&&, pkgCache::PkgIterator&&)@APTPKG_5.0" 1.3~rc2 - (c++)"void std::vector >::emplace_back(pkgDPkgPM::Item::Ops&&, pkgCache::PkgIterator&)@APTPKG_5.0" 1.3~rc2 - (c++)"void std::vector, std::allocator >, std::allocator, std::allocator > > >::emplace_back, std::allocator > const&>(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.3~rc2 - (c++)"void std::vector, std::allocator > >, std::allocator, std::allocator > > > >::emplace_back, std::allocator > >(pkgDPkgPM::Item*&&, std::__cxx11::basic_string, std::allocator >&&)@APTPKG_5.0" 1.3~rc2 - (c++)"AddCRC16Byte(unsigned short, unsigned char)@APTPKG_5.0" 1.4~beta1 - (c++)"APT::String::Join(std::vector, std::allocator >, std::allocator, std::allocator > > >, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.4~beta4 - (c++)"debListParser::ParseDepends(char const*, char const*, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >&, unsigned int&, bool const&, bool const&, bool const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.4~beta3 - (c++)"pkgTagHash(char const*, unsigned long)@APTPKG_5.0" 1.4~beta1 - (c++)"Popen(char const**, FileFd&, int&, FileFd::OpenMode, bool)@APTPKG_5.0" 1.3.1 - (c++|optional=std)"void std::vector, std::allocator >, std::allocator, std::allocator > > >::emplace_back(char const (&) [4])@APTPKG_5.0" 1.4~beta4 - (c++)"FileFd::ReadLine(std::__cxx11::basic_string, std::allocator >&)@APTPKG_5.0" 1.5~beta2~ - (c++)"MaybeAddAuth(FileFd&, URI&)@APTPKG_5.0" 1.5~beta2~ - (c++)"metaIndex::GetDefaultPin() const@APTPKG_5.0" 1.5~beta2~ - (c++)"metaIndex::GetLabel[abi:cxx11]() const@APTPKG_5.0" 1.5~beta2~ - (c++)"metaIndex::GetOrigin[abi:cxx11]() const@APTPKG_5.0" 1.5~beta2~ - (c++)"metaIndex::GetReleaseNotes[abi:cxx11]() const@APTPKG_5.0" 1.5~beta2~ - (c++)"metaIndex::GetVersion[abi:cxx11]() const@APTPKG_5.0" 1.5~beta2~ - (c++)"metaIndex::HasSupportForComponent(std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_5.0" 1.5~beta2~ - (c++)"pkgAcquireStatus2::~pkgAcquireStatus2()@APTPKG_5.0" 1.5~beta2~ - (c++)"pkgAcquireStatus2::pkgAcquireStatus2()@APTPKG_5.0" 1.5~beta2~ - (c++)"pkgAcquireStatus2::ReleaseInfoChanges(metaIndex const*, metaIndex const*, std::vector >&&)@APTPKG_5.0" 1.5~beta2~ - (c++)"pkgAcquireStatus::ReleaseInfoChanges(metaIndex const*, metaIndex const*, std::vector >&&)@APTPKG_5.0" 1.5~beta2~ - (c++)"RemoveFileAt(char const*, int, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_5.0" 1.5~beta2~ - (c++)"typeinfo for pkgAcquireStatus2@APTPKG_5.0" 1.5~beta2~ - (c++)"typeinfo for pkgArchiveCleaner2@APTPKG_5.0" 1.5~beta2~ - (c++)"typeinfo name for pkgAcquireStatus2@APTPKG_5.0" 1.5~beta2~ - (c++)"typeinfo name for pkgArchiveCleaner2@APTPKG_5.0" 1.5~beta2~ - (c++|optional=std)"void std::vector >::emplace_back(pkgAcquireStatus::ReleaseInfoChange&&)@APTPKG_5.0" 1.5~beta2~ - (c++)"vtable for pkgAcquireStatus2@APTPKG_5.0" 1.5~beta2~ - (c++)"pkgAcqMethod::FetchItem::Proxy[abi:cxx11]()@APTPKG_5.0" 1.6~alpha1~ - (c++)"pkgSystem::IsLocked()@APTPKG_5.0" 1.7.0~alpha3~ - (c++)"pkgSystem::LockInner()@APTPKG_5.0" 1.7.0~alpha3~ - (c++)"pkgSystem::UnLockInner(bool)@APTPKG_5.0" 1.7.0~alpha3~ + (c++)"debStringPackageIndex::~debStringPackageIndex()@APTPKG_6.0" 1.2.2 + (c++)"debStringPackageIndex::debStringPackageIndex(std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.2.2 + (c++)"debStringPackageIndex::GetArchitecture[abi:cxx11]() const@APTPKG_6.0" 1.2.2 + (c++)"debStringPackageIndex::GetComponent[abi:cxx11]() const@APTPKG_6.0" 1.2.2 + (c++)"debStringPackageIndex::GetIndexFlags() const@APTPKG_6.0" 1.2.2 + (c++)"debStringPackageIndex::GetType() const@APTPKG_6.0" 1.2.2 + (c++)"pkgCacheFile::AddIndexFile(pkgIndexFile*)@APTPKG_6.0" 1.2.2 + (c++)"typeinfo for debStringPackageIndex@APTPKG_6.0" 1.2.2 + (c++)"typeinfo name for debStringPackageIndex@APTPKG_6.0" 1.2.2 + (c++)"vtable for debStringPackageIndex@APTPKG_6.0" 1.2.2 + (c++)"operator<<(std::basic_ostream >&, APT::PrettyDep const&)@APTPKG_6.0" 1.3~exp1 + (c++)"operator<<(std::basic_ostream >&, APT::PrettyPkg const&)@APTPKG_6.0" 1.3~exp1 + (c++)"EDSP::ReadRequest(int, std::__cxx11::list, std::allocator >, std::allocator, std::allocator > > >&, std::__cxx11::list, std::allocator >, std::allocator, std::allocator > > >&, unsigned int&)@APTPKG_6.0" 1.3~exp2 + (c++)"EDSP::ResolveExternal(char const*, pkgDepCache&, unsigned int, OpProgress*)@APTPKG_6.0" 1.3~exp2 + (c++)"EDSP::WriteError(char const*, std::__cxx11::basic_string, std::allocator > const&, FileFd&)@APTPKG_6.0" 1.3~exp2 + (c++)"EDSP::WriteLimitedScenario(pkgDepCache&, FileFd&, std::vector > const&, OpProgress*)@APTPKG_6.0" 1.3~exp2 + (c++)"EDSP::WriteProgress(unsigned short, char const*, FileFd&)@APTPKG_6.0" 1.3~exp2 + (c++)"EDSP::WriteRequest(pkgDepCache&, FileFd&, unsigned int, OpProgress*)@APTPKG_6.0" 1.3~exp2 + (c++)"EDSP::WriteScenario(pkgDepCache&, FileFd&, OpProgress*)@APTPKG_6.0" 1.3~exp2 + (c++)"EDSP::WriteSolutionStanza(FileFd&, char const*, pkgCache::VerIterator const&)@APTPKG_6.0" 1.3~exp2 + (c++)"int __gnu_cxx::__stoa(long (*)(char const*, char**, int), char const*, char const*, unsigned long*, int)@APTPKG_6.0" 1.3~exp2 + (c++)"EIPP::ApplyRequest(std::__cxx11::list, std::allocator >, EIPP::PKG_ACTION>, std::allocator, std::allocator >, EIPP::PKG_ACTION> > >&, pkgDepCache&)@APTPKG_6.0" 1.3~rc2 + (c++)"EIPP::ReadRequest(int, std::__cxx11::list, std::allocator >, EIPP::PKG_ACTION>, std::allocator, std::allocator >, EIPP::PKG_ACTION> > >&, unsigned int&)@APTPKG_6.0" 1.3~rc2 + (c++)"FileFd::Read(int, void*, unsigned long long, unsigned long long*)@APTPKG_6.0" 1.3~rc2 + (c++)"pkgSourceList::AddVolatileFiles(CommandLine&, std::vector, std::allocator >, std::allocator, std::allocator > > >*)@APTPKG_6.0" 1.3~rc2 + (c++)"pkgSourceList::AddVolatileFile(std::__cxx11::basic_string, std::allocator > const&, std::vector, std::allocator >, std::allocator, std::allocator > > >*)@APTPKG_6.0" 1.3~rc2 + (c++)"TimeRFC1123[abi:cxx11](long, bool)@APTPKG_6.0" 1.3~rc2 + (c++)"unsigned long std::uniform_int_distribution::operator() >(std::linear_congruential_engine&, std::uniform_int_distribution::param_type const&)@APTPKG_6.0" 1.3~rc2 + (c++)"void std::shuffle<__gnu_cxx::__normal_iterator > >, std::linear_congruential_engine&>(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, std::linear_congruential_engine&)@APTPKG_6.0" 1.3~rc2 + (c++)"void std::vector >::emplace_back(pkgDPkgPM::Item::Ops&&, pkgCache::PkgIterator&&)@APTPKG_6.0" 1.3~rc2 + (c++)"void std::vector >::emplace_back(pkgDPkgPM::Item::Ops&&, pkgCache::PkgIterator&)@APTPKG_6.0" 1.3~rc2 + (c++)"void std::vector, std::allocator > >, std::allocator, std::allocator > > > >::emplace_back, std::allocator > >(pkgDPkgPM::Item*&&, std::__cxx11::basic_string, std::allocator >&&)@APTPKG_6.0" 1.3~rc2 + (c++)"APT::String::Join(std::vector, std::allocator >, std::allocator, std::allocator > > >, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.4~beta4 + (c++)"debListParser::ParseDepends(char const*, char const*, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >&, unsigned int&, bool const&, bool const&, bool const&, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.4~beta3 + (c++)"debListParser::ParseDepends(char const*, char const*, APT::StringView&, APT::StringView&, unsigned int&, bool, bool, bool, std::__cxx11::basic_string, std::allocator >)@APTPKG_6.0" 1.9.0~ + (c++)"pkgTagHash(char const*, unsigned long)@APTPKG_6.0" 1.4~beta1 + (c++|optional=std)"void std::vector, std::allocator >, std::allocator, std::allocator > > >::emplace_back(char const (&) [4])@APTPKG_6.0" 1.4~beta4 + (c++)"FileFd::ReadLine(std::__cxx11::basic_string, std::allocator >&)@APTPKG_6.0" 1.5~beta2~ + (c++)"MaybeAddAuth(FileFd&, URI&)@APTPKG_6.0" 1.5~beta2~ + (c++)"metaIndex::GetDefaultPin() const@APTPKG_6.0" 1.5~beta2~ + (c++)"metaIndex::GetLabel[abi:cxx11]() const@APTPKG_6.0" 1.5~beta2~ + (c++)"metaIndex::GetOrigin[abi:cxx11]() const@APTPKG_6.0" 1.5~beta2~ + (c++)"metaIndex::GetReleaseNotes[abi:cxx11]() const@APTPKG_6.0" 1.5~beta2~ + (c++)"metaIndex::GetVersion[abi:cxx11]() const@APTPKG_6.0" 1.5~beta2~ + (c++)"metaIndex::HasSupportForComponent(std::__cxx11::basic_string, std::allocator > const&) const@APTPKG_6.0" 1.5~beta2~ + (c++)"pkgAcquireStatus::ReleaseInfoChanges(metaIndex const*, metaIndex const*, std::vector >&&)@APTPKG_6.0" 1.5~beta2~ + (c++)"RemoveFileAt(char const*, int, std::__cxx11::basic_string, std::allocator > const&)@APTPKG_6.0" 1.5~beta2~ + (c++|optional=std)"void std::vector >::emplace_back(pkgAcquireStatus::ReleaseInfoChange&&)@APTPKG_6.0" 1.5~beta2~ + (c++)"pkgAcqMethod::FetchItem::Proxy[abi:cxx11]()@APTPKG_6.0" 1.6~alpha1~ + (c++)"debSystem::ArchitecturesSupported[abi:cxx11]() const@APTPKG_6.0" 1.9.11~ + (c++)"debSystem::MultiArchSupported() const@APTPKG_6.0" 1.9.11~ + (c++)"debSystem::IsLocked()@APTPKG_6.0" 1.9.11~ + (c++)"debSystem::LockInner()@APTPKG_6.0" 1.9.11~ + (c++)"debSystem::UnLockInner(bool)@APTPKG_6.0" 1.9.11~ # gcc-