diff options
author | Samuel Mendoza-Jonas <sam.mj@au1.ibm.com> | 2014-10-09 14:40:38 +1100 |
---|---|---|
committer | Samuel Mendoza-Jonas <sam.mj@au1.ibm.com> | 2015-08-31 14:56:51 +1000 |
commit | 75c3e8689b1affde2dc8417ca96ca94bc132408f (patch) | |
tree | 42b52c2fc6b019b301cadd0e733a4836819ef1ee /lib | |
parent | 3ec4b6e0f2a1a91b7a651eff9762f247a724d3d2 (diff) | |
download | petitboot-75c3e8689b1affde2dc8417ca96ca94bc132408f.zip petitboot-75c3e8689b1affde2dc8417ca96ca94bc132408f.tar.gz |
lib/i18n: Move strncols to i18n.c
Make the strncols() helper available generally to i18n-concerned code.
Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Makefile.am | 1 | ||||
-rw-r--r-- | lib/i18n/i18n.c | 50 | ||||
-rw-r--r-- | lib/i18n/i18n.h | 2 |
3 files changed, 53 insertions, 0 deletions
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 <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; +} 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 */ |