Loading drivers/tty/vt/vt.c +14 −15 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ #include <linux/uaccess.h> #include <linux/kdb.h> #include <linux/ctype.h> #include <linux/bsearch.h> #define MAX_NR_CON_DRIVER 16 Loading Loading @@ -2142,22 +2143,15 @@ struct interval { uint32_t last; }; static int bisearch(uint32_t ucs, const struct interval *table, int max) static int ucs_cmp(const void *key, const void *elt) { int min = 0; int mid; uint32_t ucs = *(uint32_t *)key; struct interval e = *(struct interval *) elt; if (ucs < table[0].first || ucs > table[max].last) return 0; while (max >= min) { mid = (min + max) / 2; if (ucs > table[mid].last) min = mid + 1; else if (ucs < table[mid].first) max = mid - 1; else if (ucs > e.last) return 1; } else if (ucs < e.first) return -1; return 0; } Loading @@ -2169,7 +2163,12 @@ static int is_double_width(uint32_t ucs) { 0xFE10, 0xFE19 }, { 0xFE30, 0xFE6F }, { 0xFF00, 0xFF60 }, { 0xFFE0, 0xFFE6 }, { 0x20000, 0x2FFFD }, { 0x30000, 0x3FFFD } }; return bisearch(ucs, double_width, ARRAY_SIZE(double_width) - 1); 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; } static void con_flush(struct vc_data *vc, unsigned long draw_from, Loading Loading
drivers/tty/vt/vt.c +14 −15 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ #include <linux/uaccess.h> #include <linux/kdb.h> #include <linux/ctype.h> #include <linux/bsearch.h> #define MAX_NR_CON_DRIVER 16 Loading Loading @@ -2142,22 +2143,15 @@ struct interval { uint32_t last; }; static int bisearch(uint32_t ucs, const struct interval *table, int max) static int ucs_cmp(const void *key, const void *elt) { int min = 0; int mid; uint32_t ucs = *(uint32_t *)key; struct interval e = *(struct interval *) elt; if (ucs < table[0].first || ucs > table[max].last) return 0; while (max >= min) { mid = (min + max) / 2; if (ucs > table[mid].last) min = mid + 1; else if (ucs < table[mid].first) max = mid - 1; else if (ucs > e.last) return 1; } else if (ucs < e.first) return -1; return 0; } Loading @@ -2169,7 +2163,12 @@ static int is_double_width(uint32_t ucs) { 0xFE10, 0xFE19 }, { 0xFE30, 0xFE6F }, { 0xFF00, 0xFF60 }, { 0xFFE0, 0xFFE6 }, { 0x20000, 0x2FFFD }, { 0x30000, 0x3FFFD } }; return bisearch(ucs, double_width, ARRAY_SIZE(double_width) - 1); 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; } static void con_flush(struct vc_data *vc, unsigned long draw_from, Loading