[PATCH 1/2] ui/ncurses: Check wcstombs() for error in nc-lang

Sam Mendoza-Jonas sam at mendozajonas.com
Thu Mar 3 14:43:10 AEDT 2016


If we are unable to correctly parse wide-character strings for display
in the Language screen (eg. due to an incorrect locale) display an
error string instead of continuing to try to display the string.

Signed-off-by: Sam Mendoza-Jonas <sam at mendozajonas.com>
---
 ui/ncurses/nc-lang.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/ui/ncurses/nc-lang.c b/ui/ncurses/nc-lang.c
index 3d86659..e9d560d 100644
--- a/ui/ncurses/nc-lang.c
+++ b/ui/ncurses/nc-lang.c
@@ -21,6 +21,7 @@
 
 #include <stdlib.h>
 #include <string.h>
+#include <locale.h>
 
 #include <talloc/talloc.h>
 #include <types/types.h>
@@ -265,8 +266,14 @@ static void lang_screen_setup_widgets(struct lang_screen *screen,
 
 		len = wcstombs(NULL, lang->label, 0);
 		assert(len >= 0);
-		label = talloc_array(screen, char, len + 1);
-		wcstombs(label, lang->label, len + 1);
+		if (len < 0) {
+			label = talloc_asprintf(screen,
+				"Unable to display text in this locale (%s)\n",
+				setlocale(LC_ALL, NULL));
+		} else {
+			label = talloc_array(screen, char, len + 1);
+			wcstombs(label, lang->label, len + 1);
+		}
 
 		selected = config->lang && !strcmp(lang->name, config->lang);
 		found |= selected;
-- 
2.7.2



More information about the Petitboot mailing list