From 75c3e8689b1affde2dc8417ca96ca94bc132408f Mon Sep 17 00:00:00 2001 From: Samuel Mendoza-Jonas Date: Thu, 9 Oct 2014 14:40:38 +1100 Subject: 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 ++ 3 files changed, 53 insertions(+) create mode 100644 lib/i18n/i18n.c (limited to 'lib') 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 */ -- cgit v1.2.1