summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-06-02 12:44:58 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2016-06-02 13:35:28 +0200
commit62600666d21aacea63cece3b4ec64f0ffb40168b (patch)
treed453d797aa2f3708f0c33cdffdf324ee4ed6b1d4
parentaddbf58217d9aa3709c48d8821b256d726aefa5b (diff)
ignore std::locale exeception on non-existent "" locale
In 8b79c94af7f7cf2e5e5342294bc6e5a908cacabf changing to usage of C++ way of setting the locale causes us to be terminated in case of usage of an ungenerated locale as LC_ALL (or similar) – but we don't want to fail here, we just want to carry on as before with setlocale which we call in that case just for good measure.
-rw-r--r--apt-private/private-main.cc6
-rw-r--r--methods/aptmethod.h6
-rwxr-xr-xtest/integration/test-00-commands-have-help2
3 files changed, 12 insertions, 2 deletions
diff --git a/apt-private/private-main.cc b/apt-private/private-main.cc
index 0075f813f..d6517dd2a 100644
--- a/apt-private/private-main.cc
+++ b/apt-private/private-main.cc
@@ -18,7 +18,11 @@
void InitLocale(APT_CMD const binary) /*{{{*/
{
- std::locale::global(std::locale(""));
+ try {
+ std::locale::global(std::locale(""));
+ } catch (...) {
+ setlocale(LC_ALL, "");
+ }
switch(binary)
{
case APT_CMD::APT:
diff --git a/methods/aptmethod.h b/methods/aptmethod.h
index cf3496e45..bef61a8bc 100644
--- a/methods/aptmethod.h
+++ b/methods/aptmethod.h
@@ -46,7 +46,11 @@ public:
aptMethod(char const * const Binary, char const * const Ver, unsigned long const Flags) :
pkgAcqMethod(Ver, Flags), Binary(Binary)
{
- std::locale::global(std::locale(""));
+ try {
+ std::locale::global(std::locale(""));
+ } catch (...) {
+ setlocale(LC_ALL, "");
+ }
}
};
diff --git a/test/integration/test-00-commands-have-help b/test/integration/test-00-commands-have-help
index 9d66f9221..c7d794b34 100755
--- a/test/integration/test-00-commands-have-help
+++ b/test/integration/test-00-commands-have-help
@@ -11,6 +11,8 @@ configarchitecture 'amd64'
# but it also checks if the binary can find all methods in the library.
# The later is quite handy for manual testing of non-abibreaking changes
export LD_BIND_NOW=1
+# german variant of klingon used for testing usage of non-existent l10n
+export LC_ALL=tlh_DE.UTF-8
checkversionmessage() {
testsuccess grep '^apt .* (' ${1}-help.output