git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Johannes Sixt <j6t@kdbg.org>
To: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>,
	schnhrr@cs.tu-berlin.de, rene.scharfe@lsrfire.ath.cx
Subject: Re: [PATCH nd/wildmatch] Correct Git's version of isprint and isspace
Date: Tue, 13 Nov 2012 20:41:08 +0100	[thread overview]
Message-ID: <50A2A254.9030908@kdbg.org> (raw)
In-Reply-To: <1352803572-14547-1-git-send-email-pclouds@gmail.com>

Am 13.11.2012 11:46, schrieb Nguyễn Thái Ngọc Duy:
> @@ -14,11 +14,11 @@ enum {
>  	P = GIT_PATHSPEC_MAGIC, /* other non-alnum, except for ] and } */
>  	X = GIT_CNTRL,
>  	U = GIT_PUNCT,
> -	Z = GIT_CNTRL | GIT_SPACE
> +	Z = GIT_CNTRL_SPACE
>  };
>  
> -const unsigned char sane_ctype[256] = {
> -	X, X, X, X, X, X, X, X, X, Z, Z, X, X, Z, X, X,		/*   0.. 15 */
> +const unsigned int sane_ctype[256] = {
> +	X, X, X, X, X, X, X, X, X, Z, Z, Z, Z, Z, X, X,		/*   0.. 15 */
>  	X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X,		/*  16.. 31 */
>  	S, P, P, P, R, P, P, P, R, R, G, R, P, P, R, P,		/*  32.. 47 */
>  	D, D, D, D, D, D, D, D, D, D, P, P, P, P, P, G,		/*  48.. 63 */
> diff --git a/git-compat-util.h b/git-compat-util.h
> index 02f48f6..4ed3f94 100644
> --- a/git-compat-util.h
> +++ b/git-compat-util.h
> @@ -474,8 +474,8 @@ extern const char tolower_trans_tbl[256];
>  #undef ispunct
>  #undef isxdigit
>  #undef isprint
> -extern const unsigned char sane_ctype[256];
> -#define GIT_SPACE 0x01
> +extern const unsigned int sane_ctype[256];
> +#define GIT_CNTRL_SPACE 0x01
>  #define GIT_DIGIT 0x02
>  #define GIT_ALPHA 0x04
>  #define GIT_GLOB_SPECIAL 0x08
> @@ -483,9 +483,10 @@ extern const unsigned char sane_ctype[256];
>  #define GIT_PATHSPEC_MAGIC 0x20
>  #define GIT_CNTRL 0x40
>  #define GIT_PUNCT 0x80
> -#define sane_istest(x,mask) ((sane_ctype[(unsigned char)(x)] & (mask)) != 0)
> +#define GIT_SPACE 0x100
> +#define sane_istest(x,mask) ((sane_ctype[(unsigned int)(x)] & (mask)) != 0)
>  #define isascii(x) (((x) & ~0x7f) == 0)
> -#define isspace(x) sane_istest(x,GIT_SPACE)
> +#define isspace(x) sane_istest(x,GIT_SPACE | GIT_CNTRL_SPACE)
>  #define isdigit(x) sane_istest(x,GIT_DIGIT)
>  #define isalpha(x) sane_istest(x,GIT_ALPHA)
>  #define isalnum(x) sane_istest(x,GIT_ALPHA | GIT_DIGIT)
> @@ -493,7 +494,7 @@ extern const unsigned char sane_ctype[256];
>  #define isupper(x) sane_iscase(x, 0)
>  #define is_glob_special(x) sane_istest(x,GIT_GLOB_SPECIAL)
>  #define is_regex_special(x) sane_istest(x,GIT_GLOB_SPECIAL | GIT_REGEX_SPECIAL)
> -#define iscntrl(x) (sane_istest(x,GIT_CNTRL))
> +#define iscntrl(x) (sane_istest(x,GIT_CNTRL | GIT_CNTRL_SPACE))
>  #define ispunct(x) sane_istest(x, GIT_PUNCT | GIT_REGEX_SPECIAL | \
>  		GIT_GLOB_SPECIAL | GIT_PATHSPEC_MAGIC)
>  #define isxdigit(x) (hexval_table[x] != -1)

So we have two properties that overlap:

      SSSSSSSSSS
   CCCCCCCC

You seem to generate partions:

   XXXYYYYYZZZZZ

then assign individual bits to each partition. Now each entry in the
lookup table has only one bit set. Then you define isxxx() to check for
one of the two possible bits:

   iscntrl is X or Y
   isspace is Y or Z

But shouldn't you just assign one bit for S and another one for C, have
entries in the lookup table with more than one bit set, and check for
only one bit in the isxxx macro?

That way you don't run out of bits as easily as you do with this patch.

-- Hannes

  parent reply	other threads:[~2012-11-13 19:41 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-14  2:34 [PATCH v5 00/12] nd/wildmatch Nguyễn Thái Ngọc Duy
2012-10-14  2:34 ` [PATCH v5 01/12] ctype: make sane_ctype[] const array Nguyễn Thái Ngọc Duy
2012-10-14  2:35 ` [PATCH v5 02/12] ctype: support iscntrl, ispunct, isxdigit and isprint Nguyễn Thái Ngọc Duy
2012-10-14  5:02   ` Junio C Hamano
2012-10-14  5:07     ` Nguyen Thai Ngoc Duy
2012-10-14 12:59   ` René Scharfe
2012-10-14 13:25     ` Nguyen Thai Ngoc Duy
2012-10-14 13:59       ` René Scharfe
2012-10-14 14:26         ` Nguyen Thai Ngoc Duy
2012-10-17 12:09           ` "Jan H. Schönherr"
2012-10-17 12:26             ` Nguyen Thai Ngoc Duy
2012-11-13 10:46             ` [PATCH nd/wildmatch] Correct Git's version of isprint and isspace Nguyễn Thái Ngọc Duy
2012-11-13 18:58               ` "Jan H. Schönherr"
2012-11-13 19:14               ` René Scharfe
2012-11-13 19:15               ` René Scharfe
2012-11-13 19:40                 ` Linus Torvalds
2012-11-13 19:50                   ` Linus Torvalds
2012-11-14 19:30                     ` René Scharfe
2012-11-13 19:41               ` Johannes Sixt [this message]
2012-11-15 12:19               ` [PATCH] wildmatch: correct " Nguyễn Thái Ngọc Duy
2012-11-15 17:13                 ` "Jan H. Schönherr"
2012-11-16  4:19                   ` Nguyen Thai Ngoc Duy
2012-10-14  2:35 ` [PATCH v5 03/12] Import wildmatch from rsync Nguyễn Thái Ngọc Duy
2012-10-14  2:35 ` [PATCH v5 04/12] wildmatch: remove unnecessary functions Nguyễn Thái Ngọc Duy
2012-10-14  5:04   ` Junio C Hamano
2012-10-14  6:29     ` Nguyen Thai Ngoc Duy
2012-10-14  2:35 ` [PATCH v5 05/12] Integrate wildmatch to git Nguyễn Thái Ngọc Duy
2012-10-14  5:06   ` Junio C Hamano
2012-10-14 11:07   ` Torsten Bögershausen
2012-10-14  2:35 ` [PATCH v5 06/12] t3070: disable unreliable fnmatch tests Nguyễn Thái Ngọc Duy
2012-10-14  2:35 ` [PATCH v5 07/12] wildmatch: make wildmatch's return value compatible with fnmatch Nguyễn Thái Ngọc Duy
2012-10-14  5:09   ` Junio C Hamano
2012-10-14  2:35 ` [PATCH v5 08/12] wildmatch: remove static variable force_lower_case Nguyễn Thái Ngọc Duy
2012-10-14  2:35 ` [PATCH v5 09/12] wildmatch: fix case-insensitive matching Nguyễn Thái Ngọc Duy
2012-10-14  2:35 ` [PATCH v5 10/12] wildmatch: adjust "**" behavior Nguyễn Thái Ngọc Duy
2012-10-14  2:35 ` [PATCH v5 11/12] wildmatch: make /**/ match zero or more directories Nguyễn Thái Ngọc Duy
2012-10-14  2:35 ` [PATCH v5 12/12] Support "**" wildcard in .gitignore and .gitattributes Nguyễn Thái Ngọc Duy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50A2A254.9030908@kdbg.org \
    --to=j6t@kdbg.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=pclouds@gmail.com \
    --cc=rene.scharfe@lsrfire.ath.cx \
    --cc=schnhrr@cs.tu-berlin.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).