Просмотр исходного кода

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.
David Kalnischkies лет назад: 10
Родитель
Сommit
62600666d2
3 измененных файлов с 12 добавлено и 2 удалено
  1. 5 1
      apt-private/private-main.cc
  2. 5 1
      methods/aptmethod.h
  3. 2 0
      test/integration/test-00-commands-have-help

+ 5 - 1
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:

+ 5 - 1
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, "");
+      }
    }
 };
 

+ 2 - 0
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