Thread (34 messages) flat view 34 messages, 7 authors, 2016-06-15

Re: [PATCH v5 02/12] ctype: support iscntrl, ispunct, isxdigit and isprint

From: Nguyen Thai Ngoc Duy <hidden>
Date: 2016-06-15 22:55:01

On Sun, Oct 14, 2012 at 7:59 PM, René Scharfe
[off-list ref] wrote:
quoted
+const unsigned char sane_ctype2[256] = {
+       CN, CN, CN, CN, CN, CN, CN, CN, CN, CN, CN, CN, CN, CN, CN, CN, /*
0..15 */
+       CN, CN, CN, CN, CN, CN, CN, CN, CN, CN, CN, CN, CN, CN, CN, CN, /*
16..31 */
+       0,  PU, PU, PU, PU, PU, PU, PU, PU, PU, PU, PU, PU, PU, PU, PU, /*
32..47 */
+       XD, XD, XD, XD, XD, XD, XD, XD, XD, XD, PU, PU, PU, PU, PU, PU, /*
48..63 */
+       PU, 0,  XD, 0,  XD, 0,  XD, 0,  0,  0,  0,  0,  0,  0,  0,  0,  /*
64..79 */
+       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  PU, PU, PU, PU, PU, /*
80..95 */
+       PU, 0,  XD, 0,  XD, 0,  XD, 0,  0,  0,  0,  0,  0,  0,  0,  0,  /*
96..111 */
+       0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  PU, PU, PU, PU, CN, /*
112..127 */

Shouldn't [ace] (65, 67, 69) and [ACE] (97, 99, 101) be xdigits as well?
Hmm.. I generated it from LANG=C. I wonder where I got it wrong..
But how about using the existing hexval_table instead, like this:

        #define isxdigit(x) (hexval_table[(x)] != -1)

With that, couldn't you squeeze the other two classes into the existing
sane_type?
No there are still conflicts: 9, 10 and 13 as spaces (vs controls) and
123, 124 and 126 as regex/pathspec special (vs punctuation).
By the way, I'm working on a patch series for implementing a lot more
character classes with table lookups.  It grew out of a desire to make
bad_ref_char() faster but perhaps got a bit out of hand by now; it's at 24
patches and still not finished.  I'm curious how long we have until it
escapes. ;-)
I don't think the series is going to graduate any time soon :)
-- 
Duy
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help