From cf0d56f4f7ecd22878eda626d835db86d1fd8cf7 Mon Sep 17 00:00:00 2001 From: Ali Gholami Rudi Date: Fri, 13 Mar 2020 00:01:38 +0330 Subject: [PATCH] uc: make uc_len() more compact by combining the first two conditions --- regex.c | 12 +++++------- uc.c | 12 +++++------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/regex.c b/regex.c index a2a6653..6d02806 100644 --- a/regex.c +++ b/regex.c @@ -98,10 +98,8 @@ static void rnode_free(struct rnode *rnode) static int uc_len(char *s) { int c = (unsigned char) s[0]; - if (~c & 0x80) /* ASCII */ + if (~c & 0xc0) /* ASCII or invalid */ return c > 0; - if (~c & 0x40) /* invalid UTF-8 */ - return 1; if (~c & 0x20) return 2; if (~c & 0x10) @@ -114,13 +112,13 @@ static int uc_len(char *s) static int uc_dec(char *s) { int c = (unsigned char) s[0]; - if (!(c & 0x80)) + if (~c & 0xc0) /* ASCII or invalid */ return c; - if (!(c & 0x20)) + if (~c & 0x20) return ((c & 0x1f) << 6) | (s[1] & 0x3f); - if (!(c & 0x10)) + if (~c & 0x10) return ((c & 0x0f) << 12) | ((s[1] & 0x3f) << 6) | (s[2] & 0x3f); - if (!(c & 0x08)) + if (~c & 0x08) return ((c & 0x07) << 18) | ((s[1] & 0x3f) << 12) | ((s[2] & 0x3f) << 6) | (s[3] & 0x3f); return c; } diff --git a/uc.c b/uc.c index 10d5b7b..4172003 100644 --- a/uc.c +++ b/uc.c @@ -10,10 +10,8 @@ int uc_len(char *s) { int c = (unsigned char) s[0]; - if (~c & 0x80) /* ASCII */ + if (~c & 0xc0) /* ASCII or invalid */ return c > 0; - if (~c & 0x40) /* invalid UTF-8 */ - return 1; if (~c & 0x20) return 2; if (~c & 0x10) @@ -36,13 +34,13 @@ int uc_slen(char *s) int uc_code(char *s) { int c = (unsigned char) s[0]; - if (!(c & 0x80)) + if (~c & 0xc0) /* ASCII or invalid */ return c; - if (!(c & 0x20)) + if (~c & 0x20) return ((c & 0x1f) << 6) | (s[1] & 0x3f); - if (!(c & 0x10)) + if (~c & 0x10) return ((c & 0x0f) << 12) | ((s[1] & 0x3f) << 6) | (s[2] & 0x3f); - if (!(c & 0x08)) + if (~c & 0x08) return ((c & 0x07) << 18) | ((s[1] & 0x3f) << 12) | ((s[2] & 0x3f) << 6) | (s[3] & 0x3f); return c; } -- 2.11.4.GIT