From feb81b6897115392d536c2c0e1621908197a496b Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Fri, 11 Mar 2011 15:30:27 +0100 Subject: [PATCH] lib: [tt.c] use mbs_truncate() from mbsalign.c Signed-off-by: Karel Zak --- lib/Makefile.am | 2 +- lib/tt.c | 67 ++---------------------------------------- misc-utils/Makefile.am | 3 +- partx/Makefile.am | 1 + 4 files changed, 7 insertions(+), 66 deletions(-) diff --git a/lib/Makefile.am b/lib/Makefile.am index 0f13237f74..2b6445987e 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -19,7 +19,7 @@ test_strutils_SOURCES = strutils.c if LINUX test_cpuset_SOURCES = cpuset.c endif -test_tt_SOURCES = tt.c +test_tt_SOURCES = tt.c $(top_srcdir)/lib/mbsalign.c test_canonicalize_SOURCES = canonicalize.c if LINUX diff --git a/lib/tt.c b/lib/tt.c index b11cfaadd2..b149d0099f 100644 --- a/lib/tt.c +++ b/lib/tt.c @@ -23,6 +23,7 @@ #include "widechar.h" #include "c.h" #include "tt.h" +#include "mbsalign.h" struct tt_symbols { const char *branch; @@ -57,67 +58,6 @@ static const struct tt_symbols utf8_tt_symbols = { #define is_last_column(_tb, _cl) \ list_last_entry(&(_cl)->cl_columns, &(_tb)->tb_columns) -/* TODO: move to lib/mbalign.c */ -#ifdef HAVE_WIDECHAR -static size_t wc_truncate (wchar_t *wc, size_t width) -{ - size_t cells = 0; - int next_cells = 0; - - while (*wc) - { - next_cells = wcwidth (*wc); - if (next_cells == -1) /* non printable */ - { - *wc = 0xFFFD; /* L'\uFFFD' (replacement char) */ - next_cells = 1; - } - if (cells + next_cells > width) - break; - cells += next_cells; - wc++; - } - *wc = L'\0'; - return cells; -} -#endif - - -/* TODO: move to lib/mbalign.c */ -static size_t mbs_truncate(char *str, size_t width) -{ - size_t bytes = strlen(str) + 1; -#ifdef HAVE_WIDECHAR - size_t sz = mbs_width(str); - wchar_t *wcs = NULL; - int rc = -1; - - if (sz <= width) - return sz; /* truncate is unnecessary */ - - if (sz == (size_t) -1) - goto done; - - wcs = malloc(sz * sizeof(wchar_t)); - if (!wcs) - goto done; - - if (!mbstowcs(wcs, str, sz)) - goto done; - rc = wc_truncate(wcs, width); - wcstombs(str, wcs, bytes); -done: - free(wcs); - return rc; -#else - if (width < bytes) { - str[width] = '\0'; - return width; - } - return bytes; /* truncate is unnecessary */ -#endif -} - /* * @flags: TT_FL_* flags (usually TT_FL_{ASCII,RAW}) * @@ -490,8 +430,7 @@ leave: */ static void print_data(struct tt *tb, struct tt_column *cl, char *data) { - size_t len, i; - int width; + size_t len, i, width; if (!data) data = ""; @@ -519,7 +458,7 @@ static void print_data(struct tt *tb, struct tt_column *cl, char *data) /* truncate data */ if (len > width && (cl->flags & TT_FL_TRUNC)) { if (data) - len = mbs_truncate(data, width); + len = mbs_truncate(data, &width); if (!data || len == (size_t) -1) { len = 0; data = NULL; diff --git a/misc-utils/Makefile.am b/misc-utils/Makefile.am index 237df2bf5d..26d5935722 100644 --- a/misc-utils/Makefile.am +++ b/misc-utils/Makefile.am @@ -57,6 +57,7 @@ lsblk_SOURCES = lsblk.c \ $(top_srcdir)/lib/canonicalize.c \ $(top_srcdir)/lib/ismounted.c \ $(top_srcdir)/lib/tt.c \ + $(top_srcdir)/lib/mbsalign.c \ $(top_srcdir)/lib/strutils.c lsblk_LDADD = $(ul_libblkid_la) lsblk_CFLAGS = $(AM_CFLAGS) -I$(ul_libblkid_incdir) @@ -76,7 +77,7 @@ bin_PROGRAMS += findmnt dist_man_MANS += findmnt.8 findmnt_LDADD = $(ul_libmount_la) findmnt_CFLAGS = $(AM_CFLAGS) -I$(ul_libmount_incdir) -findmnt_SOURCES = findmnt.c $(top_srcdir)/lib/tt.c +findmnt_SOURCES = findmnt.c $(top_srcdir)/lib/tt.c $(top_srcdir)/lib/mbsalign.c if !HAVE_LANGINFO findmnt_SOURCES += $(top_srcdir)/lib/langinfo.c endif diff --git a/partx/Makefile.am b/partx/Makefile.am index f7eeef88cb..a99300d913 100644 --- a/partx/Makefile.am +++ b/partx/Makefile.am @@ -9,6 +9,7 @@ usrsbin_exec_PROGRAMS += partx partx_SOURCES = partx.c partx.h \ $(top_srcdir)/lib/blkdev.c \ $(top_srcdir)/lib/tt.c \ + $(top_srcdir)/lib/mbsalign.c \ $(top_srcdir)/lib/strutils.c if LINUX -- 2.47.2