Re: [PATCH v2] vt: Use bsearch library function in is_double_width

2017-08-31 Thread Thomas Meyer
On Thu, Aug 31, 2017 at 05:02:53PM +0200, Greg KH wrote:
> On Thu, Aug 31, 2017 at 04:21:15PM +0200, Thomas Meyer wrote:
> > Use bsearch library function instead of duplicated functionality.
> > 
One question: Having above changelog text and a nearly similar subject line is
fine for you?

> > v2: Re-introduce early exit from old binary search.
> 
> That's not the difference from the previous patch...

It isn't?

v2 adds those lines:
+  if (ucs < double_width[0].first ||
+  ucs > double_width[ARRAY_SIZE(double_width) - 1].last)
+  return 0;

Which is the early exit from the old binary search, i.e. the current
implementation
What do you mean with "that's not the difference from the previous
patch"?

> 
> And that info goes below the --- line, as the documentation states.

So besides adding v2 comment below the --- line, what else do you want
me to change to accept this patch?



Re: [PATCH v2] vt: Use bsearch library function in is_double_width

2017-08-31 Thread Thomas Meyer
On Thu, Aug 31, 2017 at 05:02:53PM +0200, Greg KH wrote:
> On Thu, Aug 31, 2017 at 04:21:15PM +0200, Thomas Meyer wrote:
> > Use bsearch library function instead of duplicated functionality.
> > 
One question: Having above changelog text and a nearly similar subject line is
fine for you?

> > v2: Re-introduce early exit from old binary search.
> 
> That's not the difference from the previous patch...

It isn't?

v2 adds those lines:
+  if (ucs < double_width[0].first ||
+  ucs > double_width[ARRAY_SIZE(double_width) - 1].last)
+  return 0;

Which is the early exit from the old binary search, i.e. the current
implementation
What do you mean with "that's not the difference from the previous
patch"?

> 
> And that info goes below the --- line, as the documentation states.

So besides adding v2 comment below the --- line, what else do you want
me to change to accept this patch?



Re: [PATCH v2] vt: Use bsearch library function in is_double_width

2017-08-31 Thread Greg KH
On Thu, Aug 31, 2017 at 04:21:15PM +0200, Thomas Meyer wrote:
> Use bsearch library function instead of duplicated functionality.
> 
> v2: Re-introduce early exit from old binary search.

That's not the difference from the previous patch...

And that info goes below the --- line, as the documentation states.

Please fix and resend it properly.  After you take some time to relax
and verify you did it correct, there is no rush here.

greg k-h


Re: [PATCH v2] vt: Use bsearch library function in is_double_width

2017-08-31 Thread Greg KH
On Thu, Aug 31, 2017 at 04:21:15PM +0200, Thomas Meyer wrote:
> Use bsearch library function instead of duplicated functionality.
> 
> v2: Re-introduce early exit from old binary search.

That's not the difference from the previous patch...

And that info goes below the --- line, as the documentation states.

Please fix and resend it properly.  After you take some time to relax
and verify you did it correct, there is no rush here.

greg k-h


[PATCH v2] vt: Use bsearch library function in is_double_width

2017-08-31 Thread Thomas Meyer
Use bsearch library function instead of duplicated functionality.

v2: Re-introduce early exit from old binary search.

Signed-off-by: Thomas Meyer 
---
 drivers/tty/vt/vt.c | 29 ++---
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
index 2ebaba16f785..ca55004a639e 100644
--- a/drivers/tty/vt/vt.c
+++ b/drivers/tty/vt/vt.c
@@ -102,6 +102,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #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 }, { 0x2, 0x2FFFD }, { 0x3, 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(, double_width, ARRAY_SIZE(double_width),
+   sizeof(struct interval), ucs_cmp) != NULL;
 }
 
 static void con_flush(struct vc_data *vc, unsigned long draw_from,
-- 
2.11.0



[PATCH v2] vt: Use bsearch library function in is_double_width

2017-08-31 Thread Thomas Meyer
Use bsearch library function instead of duplicated functionality.

v2: Re-introduce early exit from old binary search.

Signed-off-by: Thomas Meyer 
---
 drivers/tty/vt/vt.c | 29 ++---
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
index 2ebaba16f785..ca55004a639e 100644
--- a/drivers/tty/vt/vt.c
+++ b/drivers/tty/vt/vt.c
@@ -102,6 +102,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #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 }, { 0x2, 0x2FFFD }, { 0x3, 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(, double_width, ARRAY_SIZE(double_width),
+   sizeof(struct interval), ucs_cmp) != NULL;
 }
 
 static void con_flush(struct vc_data *vc, unsigned long draw_from,
-- 
2.11.0