[un]expand: account for different character widths. +16 bytes.
authorTomas Heinrich <heinrich.tomas@gmail.com>
Fri, 26 Mar 2010 08:40:47 +0000 (09:40 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 26 Mar 2010 08:40:47 +0000 (09:40 +0100)
Signed-off-by: Tomas Heinrich <heinrich.tomas@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
coreutils/expand.c

index 2f6a708b58891fb49e2748b7842ff6bb0db2d5ba..60ac9f56834fafb34de09b488507ff7eb9c5c378 100644 (file)
@@ -49,7 +49,11 @@ static void expand(FILE *file, unsigned tab_size, unsigned opt)
                                unsigned len;
                                *ptr = '\0';
 # if ENABLE_FEATURE_ASSUME_UNICODE
-                               len = unicode_strlen(ptr_strbeg);
+                               {
+                                       uni_stat_t uni_stat;
+                                       printable_string(&uni_stat, ptr_strbeg);
+                                       len = uni_stat.unicode_width;
+                               }
 # else
                                len = ptr - ptr_strbeg;
 # endif
@@ -103,9 +107,11 @@ static void unexpand(FILE *file, unsigned tab_size, unsigned opt)
 # if ENABLE_FEATURE_ASSUME_UNICODE
                        {
                                char c;
+                               uni_stat_t uni_stat;
                                c = ptr[n];
                                ptr[n] = '\0';
-                               len = unicode_strlen(ptr);
+                               printable_string(&uni_stat, ptr);
+                               len = uni_stat.unicode_width;
                                ptr[n] = c;
                        }
 # else