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

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)				/*{{{*/
 void InitLocale(APT_CMD const binary)				/*{{{*/
 {
 {
-   std::locale::global(std::locale(""));
+   try {
+      std::locale::global(std::locale(""));
+   } catch (...) {
+      setlocale(LC_ALL, "");
+   }
    switch(binary)
    switch(binary)
    {
    {
       case APT_CMD::APT:
       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) :
    aptMethod(char const * const Binary, char const * const Ver, unsigned long const Flags) :
       pkgAcqMethod(Ver, Flags), Binary(Binary)
       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.
 # 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
 # The later is quite handy for manual testing of non-abibreaking changes
 export LD_BIND_NOW=1
 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() {
 checkversionmessage() {
 	testsuccess grep '^apt .* (' ${1}-help.output
 	testsuccess grep '^apt .* (' ${1}-help.output