diff options
| -rw-r--r-- | apt-pkg/acquire-item.cc | 4 | ||||
| -rw-r--r-- | apt-pkg/acquire.cc | 2 | ||||
| -rw-r--r-- | apt-pkg/contrib/gpgv.cc | 21 | ||||
| -rw-r--r-- | apt-pkg/contrib/strutl.cc | 2 | ||||
| -rw-r--r-- | apt-pkg/contrib/strutl.h | 9 |
5 files changed, 25 insertions, 13 deletions
diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index b534d56a3..3016dad59 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -4065,7 +4065,7 @@ static std::string GetAuxFileNameFromURIInLists(std::string const &uri) auto const dirname = flCombine(_config->FindDir("Dir::State::lists"), "auxfiles/"); char const * const filetag = ".apt-acquire-privs-test.XXXXXX"; std::string const tmpfile_tpl = flCombine(dirname, filetag); - std::unique_ptr<char, decltype(std::free) *> tmpfile { strdup(tmpfile_tpl.c_str()), std::free }; + std::unique_ptr<char, FreeDeleter> tmpfile { strdup(tmpfile_tpl.c_str()) }; int const fd = mkstemp(tmpfile.get()); if (fd == -1) return ""; @@ -4081,7 +4081,7 @@ static std::string GetAuxFileNameFromURI(std::string const &uri) std::string tmpdir_tpl; strprintf(tmpdir_tpl, "%s/apt-auxfiles-XXXXXX", GetTempDir().c_str()); - std::unique_ptr<char, decltype(std::free) *> tmpdir { strndup(tmpdir_tpl.data(), tmpdir_tpl.length()), std::free }; + std::unique_ptr<char, FreeDeleter> tmpdir { strndup(tmpdir_tpl.data(), tmpdir_tpl.length()) }; if (mkdtemp(tmpdir.get()) == nullptr) { _error->Errno("GetAuxFileNameFromURI", "mkdtemp of %s failed", tmpdir.get()); diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc index 7ebfa4ffe..f367e4310 100644 --- a/apt-pkg/acquire.cc +++ b/apt-pkg/acquire.cc @@ -605,7 +605,7 @@ static bool IsAccessibleBySandboxUser(std::string const &filename, bool const Re char const * const filetag = ".apt-acquire-privs-test.XXXXXX"; std::string const tmpfile_tpl = flCombine(dirname, filetag); - std::unique_ptr<char, decltype(std::free) *> tmpfile { strdup(tmpfile_tpl.c_str()), std::free }; + std::unique_ptr<char, FreeDeleter> tmpfile { strdup(tmpfile_tpl.c_str()) }; int const fd = mkstemp(tmpfile.get()); if (fd == -1 && errno == EACCES) return false; diff --git a/apt-pkg/contrib/gpgv.cc b/apt-pkg/contrib/gpgv.cc index 225acae88..9ab3e066e 100644 --- a/apt-pkg/contrib/gpgv.cc +++ b/apt-pkg/contrib/gpgv.cc @@ -28,14 +28,17 @@ #include <apti18n.h> /*}}}*/ -// syntactic sugar to wrap a raw pointer with a custom deleter in a std::unique_ptr -static std::unique_ptr<char, decltype(&free)> make_unique_char(void *const str = nullptr) -{ - return {static_cast<char *>(str), &free}; +namespace { + struct FILEDeleter { + void operator()(FILE *p) { + fclose(p); + } + }; } -static std::unique_ptr<FILE, decltype(&fclose)> make_unique_FILE(std::string const &filename, char const *const mode) + +static std::unique_ptr<FILE, FILEDeleter> make_unique_FILE(std::string const &filename, char const *const mode) { - return {fopen(filename.c_str(), mode), &fclose}; + return {fopen(filename.c_str(), mode), {}}; } class LineBuffer /*{{{*/ @@ -207,9 +210,9 @@ void ExecGPGV(std::string const &File, std::string const &FileGPG, } enum { DETACHED, CLEARSIGNED } releaseSignature = (FileGPG != File) ? DETACHED : CLEARSIGNED; - auto sig = make_unique_char(); - auto data = make_unique_char(); - auto conf = make_unique_char(); + std::unique_ptr<char, FreeDeleter> sig; + std::unique_ptr<char, FreeDeleter> data; + std::unique_ptr<char, FreeDeleter> conf; // Dump the configuration so apt-key picks up the correct Dir values { diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc index 3689dc17a..ec61c7e2b 100644 --- a/apt-pkg/contrib/strutl.cc +++ b/apt-pkg/contrib/strutl.cc @@ -1421,7 +1421,7 @@ unsigned long RegexChoice(RxChoiceList *Rxs,const char **ListBegin, and to allow reordering of parameters */ bool iovprintf(std::ostream &out, const char *format, va_list &args, ssize_t &size) { - auto S = std::unique_ptr<char,decltype(&free)>{static_cast<char*>(malloc(size)), &free}; + auto S = std::unique_ptr<char,FreeDeleter>{static_cast<char*>(malloc(size))}; ssize_t const n = vsnprintf(S.get(), size, format, args); if (n > -1 && n < size) { out << S.get(); diff --git a/apt-pkg/contrib/strutl.h b/apt-pkg/contrib/strutl.h index 7cf9b456d..152477eee 100644 --- a/apt-pkg/contrib/strutl.h +++ b/apt-pkg/contrib/strutl.h @@ -31,6 +31,15 @@ #include "macros.h" +namespace { + struct FreeDeleter { + void operator()(void *p) { + free(p); + } + }; +} + + namespace APT { namespace String { APT_PUBLIC std::string Strip(const std::string &s); |
