]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lib: [tt.c] use mbs_truncate() from mbsalign.c
authorKarel Zak <kzak@redhat.com>
Fri, 11 Mar 2011 14:30:27 +0000 (15:30 +0100)
committerKarel Zak <kzak@redhat.com>
Fri, 11 Mar 2011 14:30:27 +0000 (15:30 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
lib/Makefile.am
lib/tt.c
misc-utils/Makefile.am
partx/Makefile.am

index 0f13237f74f6e8f8d5b470e65d420bc81a401205..2b6445987e9e82f47fc415545065b1a2f639e9a1 100644 (file)
@@ -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
index b11cfaadd2f11be132e45183ea888c4d273a864c..b149d0099fdf82b0fd0bb0d799820ba32ca75014 100644 (file)
--- 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;
index 237df2bf5de998ca96c04dc1bbf0a9aad5d6b007..26d5935722918ec2968cc0f33b06880bb66705d9 100644 (file)
@@ -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
index f7eeef88cbf2cf7b1273fd89b191efb8e7b6f1ae..a99300d9137a1b7e8089d6156bee41631b153219 100644 (file)
@@ -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