Revert "vt: move unicode processing to a separate file"
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 26 Apr 2025 09:21:25 +0000 (11:21 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 26 Apr 2025 09:21:25 +0000 (11:21 +0200)
This reverts commit 2acaf27cd7f4f32bfe8bf7335690618e2417e744.

A new version of the series was submitted, so it's easier to revert the
old one and add the new one due to the changes invovled.

Cc: Nicolas Pitre <nico@fluxnic.net>
Cc: Jiri Slaby <jirislaby@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/vt/Makefile
drivers/tty/vt/ucs_width.c [deleted file]
drivers/tty/vt/vt.c
include/linux/consolemap.h

index bee69277bbc3719ce16974140817a32441994537..2c8ce8b592ed2dc5ae60a5adf72311c058742053 100644 (file)
@@ -7,8 +7,7 @@ FONTMAPFILE = cp437.uni
 obj-$(CONFIG_VT)                       += vt_ioctl.o vc_screen.o \
                                           selection.o keyboard.o \
                                           vt.o defkeymap.o
-obj-$(CONFIG_CONSOLE_TRANSLATIONS)     += consolemap.o consolemap_deftbl.o \
-                                          ucs_width.o
+obj-$(CONFIG_CONSOLE_TRANSLATIONS)     += consolemap.o consolemap_deftbl.o
 
 # Files generated that shall be removed upon make clean
 clean-files := consolemap_deftbl.c defkeymap.c
diff --git a/drivers/tty/vt/ucs_width.c b/drivers/tty/vt/ucs_width.c
deleted file mode 100644 (file)
index 5f0bde3..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-
-#include <linux/types.h>
-#include <linux/array_size.h>
-#include <linux/bsearch.h>
-#include <linux/consolemap.h>
-
-/* ucs_is_double_width() is based on the wcwidth() implementation by
- * Markus Kuhn -- 2007-05-26 (Unicode 5.0)
- * Latest version: https://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c
- */
-
-struct interval {
-       uint32_t first;
-       uint32_t last;
-};
-
-static int ucs_cmp(const void *key, const void *elt)
-{
-       uint32_t cp = *(uint32_t *)key;
-       struct interval e = *(struct interval *) elt;
-
-       if (cp > e.last)
-               return 1;
-       else if (cp < e.first)
-               return -1;
-       return 0;
-}
-
-static const struct interval double_width[] = {
-       { 0x1100, 0x115F }, { 0x2329, 0x232A }, { 0x2E80, 0x303E },
-       { 0x3040, 0xA4CF }, { 0xAC00, 0xD7A3 }, { 0xF900, 0xFAFF },
-       { 0xFE10, 0xFE19 }, { 0xFE30, 0xFE6F }, { 0xFF00, 0xFF60 },
-       { 0xFFE0, 0xFFE6 }, { 0x20000, 0x2FFFD }, { 0x30000, 0x3FFFD }
-};
-
-bool ucs_is_double_width(uint32_t cp)
-{
-       if (cp < double_width[0].first ||
-           cp > double_width[ARRAY_SIZE(double_width) - 1].last)
-               return false;
-
-       return bsearch(&cp, double_width, ARRAY_SIZE(double_width),
-                      sizeof(struct interval), ucs_cmp) != NULL;
-}
index bcb508bc15ab970e036fab03df13a50b785eede7..b5f3c8a818ed3aa3b3422279fb6408371bcfe635 100644 (file)
 #include <linux/uaccess.h>
 #include <linux/kdb.h>
 #include <linux/ctype.h>
+#include <linux/bsearch.h>
 #include <linux/gcd.h>
 
 #define MAX_NR_CON_DRIVER 16
@@ -2711,6 +2712,43 @@ static void do_con_trol(struct tty_struct *tty, struct vc_data *vc, u8 c)
        }
 }
 
+/* is_double_width() is based on the wcwidth() implementation by
+ * Markus Kuhn -- 2007-05-26 (Unicode 5.0)
+ * Latest version: https://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c
+ */
+struct interval {
+       uint32_t first;
+       uint32_t last;
+};
+
+static int ucs_cmp(const void *key, const void *elt)
+{
+       uint32_t ucs = *(uint32_t *)key;
+       struct interval e = *(struct interval *) elt;
+
+       if (ucs > e.last)
+               return 1;
+       else if (ucs < e.first)
+               return -1;
+       return 0;
+}
+
+static int is_double_width(uint32_t ucs)
+{
+       static const struct interval double_width[] = {
+               { 0x1100, 0x115F }, { 0x2329, 0x232A }, { 0x2E80, 0x303E },
+               { 0x3040, 0xA4CF }, { 0xAC00, 0xD7A3 }, { 0xF900, 0xFAFF },
+               { 0xFE10, 0xFE19 }, { 0xFE30, 0xFE6F }, { 0xFF00, 0xFF60 },
+               { 0xFFE0, 0xFFE6 }, { 0x20000, 0x2FFFD }, { 0x30000, 0x3FFFD }
+       };
+       if (ucs < double_width[0].first ||
+           ucs > double_width[ARRAY_SIZE(double_width) - 1].last)
+               return 0;
+
+       return bsearch(&ucs, double_width, ARRAY_SIZE(double_width),
+                       sizeof(struct interval), ucs_cmp) != NULL;
+}
+
 struct vc_draw_region {
        unsigned long from, to;
        int x;
@@ -2915,7 +2953,7 @@ static int vc_con_write_normal(struct vc_data *vc, int tc, int c,
        bool inverse = false;
 
        if (vc->vc_utf && !vc->vc_disp_ctrl) {
-               if (ucs_is_double_width(c))
+               if (is_double_width(c))
                        width = 2;
        }
 
index caf079bcb8c993cdeaa527f2d86505491f9caed3..c35db4896c37bde7d685b3c0b0cc6a2851f44191 100644 (file)
@@ -28,7 +28,6 @@ int conv_uni_to_pc(struct vc_data *conp, long ucs);
 u32 conv_8bit_to_uni(unsigned char c);
 int conv_uni_to_8bit(u32 uni);
 void console_map_init(void);
-bool ucs_is_double_width(uint32_t cp);
 #else
 static inline u16 inverse_translate(const struct vc_data *conp, u16 glyph,
                bool use_unicode)
@@ -58,11 +57,6 @@ static inline int conv_uni_to_8bit(u32 uni)
 }
 
 static inline void console_map_init(void) { }
-
-static inline bool ucs_is_double_width(uint32_t cp)
-{
-       return false;
-}
 #endif /* CONFIG_CONSOLE_TRANSLATIONS */
 
 #endif /* __LINUX_CONSOLEMAP_H__ */