vt: Use bsearch library function in is_double_width

Use bsearch library function instead of duplicated functionality.

Signed-off-by: Thomas Meyer <thomas@m3y3r.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Thomas Meyer 2017-09-16 10:03:05 +02:00 committed by Greg Kroah-Hartman
parent a9be92706e
commit f0a8d84fa1

View File

@ -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
@ -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;
}
@ -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,