lib/i18n: Move strncols to i18n.c
authorSamuel Mendoza-Jonas <sam.mj@au1.ibm.com>
Thu, 9 Oct 2014 03:40:38 +0000 (14:40 +1100)
committerSamuel Mendoza-Jonas <sam.mj@au1.ibm.com>
Mon, 31 Aug 2015 04:56:51 +0000 (14:56 +1000)
Make the strncols() helper available generally to i18n-concerned code.

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
lib/Makefile.am
lib/i18n/i18n.c [new file with mode: 0644]
lib/i18n/i18n.h
ui/ncurses/nc-boot-editor.c

index b39cc9bebef9f0bd5e9a3ae43dc739441394ce11..a2421a52f498c0e69363c996eaa334d4dc4e0f7b 100644 (file)
@@ -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 (file)
index 0000000..dd8d79b
--- /dev/null
@@ -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 <string.h>
+#include <stdlib.h>
+#include <wchar.h>
+
+#include <i18n/i18n.h>
+
+/* 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;
+}
index d7ff154ded7535e8468fa041b6dba6b8d472297b..dde02f1423962bda5eea398a7334cb8533185f84 100644 (file)
@@ -22,5 +22,7 @@
 
 #define _(x) gettext(x)
 
+int strncols(const char *str);
+
 #endif /* I18N_H */
 
index 274bd9d2fa1b4df079eb050c10524bc46abad5b1..f55fe4ad649854e08018e35d9274f4ad067c9e29 100644 (file)
@@ -22,7 +22,6 @@
 
 #include <assert.h>
 #include <string.h>
-#include <stdlib.h>
 
 #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,