From 75c3e8689b1affde2dc8417ca96ca94bc132408f Mon Sep 17 00:00:00 2001 From: Samuel Mendoza-Jonas Date: Thu, 9 Oct 2014 14:40:38 +1100 Subject: [PATCH 1/1] lib/i18n: Move strncols to i18n.c Make the strncols() helper available generally to i18n-concerned code. Signed-off-by: Samuel Mendoza-Jonas --- lib/Makefile.am | 1 + lib/i18n/i18n.c | 50 +++++++++++++++++++++++++++++++++++++ lib/i18n/i18n.h | 2 ++ ui/ncurses/nc-boot-editor.c | 31 ----------------------- 4 files changed, 53 insertions(+), 31 deletions(-) create mode 100644 lib/i18n/i18n.c diff --git a/lib/Makefile.am b/lib/Makefile.am index b39cc9b..a2421a5 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -26,6 +26,7 @@ lib_libpbcore_la_SOURCES = \ lib/fold/fold.h \ lib/fold/fold.c \ lib/i18n/i18n.h \ + lib/i18n/i18n.c \ lib/log/log.h \ lib/log/log.c \ lib/list/list.c \ diff --git a/lib/i18n/i18n.c b/lib/i18n/i18n.c new file mode 100644 index 0000000..dd8d79b --- /dev/null +++ b/lib/i18n/i18n.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2013 IBM Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#define _XOPEN_SOURCE + +#include +#include +#include + +#include + +/* Return the number of columns required to display a localised string */ +int strncols(const char *str) +{ + int wlen, ncols; + wchar_t *wstr; + + wlen = mbstowcs(NULL, str, 0); + if (wlen <= 0) + return wlen; + + wstr = malloc(sizeof(wchar_t) * wlen + 1); + if (!wstr) + return -1; + + wlen = mbstowcs(wstr, str, wlen); + if (wlen <= 0) { + free(wstr); + return wlen; + } + + ncols = wcswidth(wstr, wlen); + + free(wstr); + return ncols; +} diff --git a/lib/i18n/i18n.h b/lib/i18n/i18n.h index d7ff154..dde02f1 100644 --- a/lib/i18n/i18n.h +++ b/lib/i18n/i18n.h @@ -22,5 +22,7 @@ #define _(x) gettext(x) +int strncols(const char *str); + #endif /* I18N_H */ diff --git a/ui/ncurses/nc-boot-editor.c b/ui/ncurses/nc-boot-editor.c index 274bd9d..f55fe4a 100644 --- a/ui/ncurses/nc-boot-editor.c +++ b/ui/ncurses/nc-boot-editor.c @@ -22,7 +22,6 @@ #include #include -#include #include "log/log.h" #include "talloc/talloc.h" @@ -524,36 +523,6 @@ void boot_editor_update(struct boot_editor *boot_editor, pad_refresh(boot_editor); } -/* Return the number of columns required to display a localised string */ -static int strncols(const char *str) -{ - int i, wlen, ncols = 0; - wchar_t *wstr; - - wlen = mbstowcs(NULL, str, 0); - if (wlen <= 0) - return wlen; - - wstr = malloc(sizeof(wchar_t) * wlen + 1); - if (!wstr) - return -1; - - wlen = mbstowcs(wstr, str, wlen); - if (wlen <= 0) { - free(wstr); - return wlen; - } - - /* Processing each character individually lets us use the same - * check for all languages */ - for (i = 0; i < wlen; i++) { - ncols += wcwidth(wstr[i]); - } - - free(wstr); - return ncols; -} - struct boot_editor *boot_editor_init(struct cui *cui, struct pmenu_item *item, const struct system_info *sysinfo, -- 2.39.2