forked from Minki/linux
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:
parent
a9be92706e
commit
f0a8d84fa1
@ -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
|
||||
return 1;
|
||||
}
|
||||
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,
|
||||
|
Loading…
Reference in New Issue
Block a user