diff options
-rw-r--r-- | gnu/local.mk | 1 | ||||
-rw-r--r-- | gnu/packages/games.scm | 5 | ||||
-rw-r--r-- | gnu/packages/patches/wesnoth-fix-std-bad-cast.patch | 67 |
3 files changed, 2 insertions, 71 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index d55276fb33..0205b8c3e0 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1162,7 +1162,6 @@ dist_patch_DATA = \ %D%/packages/patches/wavpack-CVE-2018-7253.patch \ %D%/packages/patches/wavpack-CVE-2018-7254.patch \ %D%/packages/patches/weechat-python.patch \ - %D%/packages/patches/wesnoth-fix-std-bad-cast.patch \ %D%/packages/patches/wicd-bitrate-none-fix.patch \ %D%/packages/patches/wicd-get-selected-profile-fix.patch \ %D%/packages/patches/wicd-urwid-1.3.patch \ diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index b2d106e907..bc4abd7b71 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -1809,7 +1809,7 @@ falling, themeable graphics and sounds, and replays.") (define-public wesnoth (package (name "wesnoth") - (version "1.14.0") + (version "1.14.1") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/wesnoth/wesnoth-" @@ -1818,8 +1818,7 @@ falling, themeable graphics and sounds, and replays.") name "-" version ".tar.bz2")) (sha256 (base32 - "09niq53y17faizhmd98anx3dha7hvacvj9a0a64lg8wn915cm0bw")) - (patches (search-patches "wesnoth-fix-std-bad-cast.patch")))) + "1mzrnbv71b4s41c5x8clhb53l8lidiwzny1hl828228pvys5bxkb")))) (build-system cmake-build-system) (arguments `(#:tests? #f)) ; no check target diff --git a/gnu/packages/patches/wesnoth-fix-std-bad-cast.patch b/gnu/packages/patches/wesnoth-fix-std-bad-cast.patch deleted file mode 100644 index 18328ed018..0000000000 --- a/gnu/packages/patches/wesnoth-fix-std-bad-cast.patch +++ /dev/null @@ -1,67 +0,0 @@ -From 18e5ea50a7136cb3686c5a7c51c111ccce73dc54 Mon Sep 17 00:00:00 2001 -From: Iris Morelle <shadowm@wesnoth.org> -Date: Sun, 6 May 2018 16:10:42 -0300 -Subject: [PATCH] i18n: Blind fix attempt for std::bad_cast being thrown on - Windows - -Several reports on Steam and our forums point at std::bad_cast being -thrown when accessing Preferences and the Multiplayer menu amongst -others. It's possible that the locale configuration on those systems is -not quite right, and compare() and icompare() are able to throw -std::bad_cast when this happens as they both use std::use_facet(). - -Note that much like the macOS/iOS version of icompare(), this stopgap -patch doesn't attempt to provide any form of case-insensitive fallback -and just uses a case-sensitive comparison instead. ---- - src/gettext_boost.cpp | 29 +++++++++++++++++++++++++++-- - 1 file changed, 27 insertions(+), 2 deletions(-) - -diff --git a/src/gettext_boost.cpp b/src/gettext_boost.cpp -index 3cc7690d5ef..fb04ffeea90 100644 ---- a/src/gettext_boost.cpp -+++ b/src/gettext_boost.cpp -@@ -423,7 +423,19 @@ void set_language(const std::string& language, const std::vector<std::string>* / - int compare(const std::string& s1, const std::string& s2) - { - std::lock_guard<std::mutex> lock(get_mutex()); -- return std::use_facet<std::collate<char>>(get_manager().get_locale()).compare(s1.c_str(), s1.c_str() + s1.size(), s2.c_str(), s2.c_str() + s2.size()); -+ -+ try { -+ return std::use_facet<std::collate<char>>(get_manager().get_locale()).compare(s1.c_str(), s1.c_str() + s1.size(), s2.c_str(), s2.c_str() + s2.size()); -+ } catch(const std::bad_cast&) { -+ static bool bad_cast_once = false; -+ -+ if(!bad_cast_once) { -+ ERR_G << "locale set-up for compare() is broken, falling back to std::string::compare()\n"; -+ bad_cast_once = true; -+ } -+ -+ return s1.compare(s2); -+ } - } - - int icompare(const std::string& s1, const std::string& s2) -@@ -433,8 +445,21 @@ int icompare(const std::string& s1, const std::string& s2) - return compare(s1, s2); - #else - std::lock_guard<std::mutex> lock(get_mutex()); -- return std::use_facet<bl::collator<char>>(get_manager().get_locale()).compare( -+ -+ try { -+ return std::use_facet<bl::collator<char>>(get_manager().get_locale()).compare( - bl::collator_base::secondary, s1, s2); -+ } catch(const std::bad_cast&) { -+ static bool bad_cast_once = false; -+ -+ if(!bad_cast_once) { -+ ERR_G << "locale set-up for icompare() is broken, falling back to std::string::compare()\n"; -+ bad_cast_once = true; -+ } -+ -+ // FIXME: not even lazily case-insensitive -+ return s1.compare(s2); -+ } - #endif - } - |