git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
JSJan H. Schönherr <schnhrr@cs.tu-berlin.de>
Date
Oct 17, 2012, 12:09 UTC
Message-ID
<507E9FDE.7080706@cs.tu-berlin.de>
In-Reply-To
<20121014142624.GA992@do>
Hi Nguyen.

I just had a need for isprint() myself, and then I found your code here.

I had a look at the POSIX locale as describe here:
http://sourceware.org/git/?p=glibc.git;a=blob;f=localedata/locales/POSIX
Some remarks below.
Am 14.10.2012 16:26, schrieb Nguyen Thai Ngoc Duy:
Show 21 quoted lines
> -- 8< --
> diff --git a/ctype.c b/ctype.c
> index faeaf34..0bfebb4 100644
> --- a/ctype.c
> +++ b/ctype.c
> @@ -11,18 +11,21 @@ enum {
>  	D = GIT_DIGIT,
>  	G = GIT_GLOB_SPECIAL,	/* *, ?, [, \\ */
>  	R = GIT_REGEX_SPECIAL,	/* $, (, ), +, ., ^, {, | */
> -	P = GIT_PATHSPEC_MAGIC  /* other non-alnum, except for ] and } */
> +	P = GIT_PATHSPEC_MAGIC, /* other non-alnum, except for ] and } */
> +	X = GIT_CNTRL,
> +	U = GIT_PUNCT,
> +	Z = GIT_CNTRL | GIT_SPACE
>  };
>  
>  const unsigned char sane_ctype[256] = {
> -	0, 0, 0, 0, 0, 0, 0, 0, 0, S, S, 0, 0, S, 0, 0,		/*   0.. 15 */
> -	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,		/*  16.. 31 */
> +	X, X, X, X, X, X, X, X, X, Z, Z, X, X, Z, X, X,		/*   0.. 15 */
> +	X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X,		/*  16.. 31 */

"Normal" isspace() also includes vertical tab (11) and form-feed (12) as white-space characters. Is there a reason, why they are not included here?

Show 15 quoted lines
>  	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 */
>  	P, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,		/*  64.. 79 */
> -	A, A, A, A, A, A, A, A, A, A, A, G, G, 0, R, P,		/*  80.. 95 */
> +	A, A, A, A, A, A, A, A, A, A, A, G, G, U, R, P,		/*  80.. 95 */
>  	P, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,		/*  96..111 */
> -	A, A, A, A, A, A, A, A, A, A, A, R, R, 0, P, 0,		/* 112..127 */
> +	A, A, A, A, A, A, A, A, A, A, A, R, R, U, P, X,		/* 112..127 */
>  	/* Nothing in the 128.. range */
>  };
>  
> diff --git a/git-compat-util.h b/git-compat-util.h
> index f8b859c..db77f3e 100644
> --- a/git-compat-util.h
> +++ b/git-compat-util.h
[...]
Show 11 quoted lines
> @@ -527,6 +533,13 @@ 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 ispunct(x) sane_istest(x, GIT_PUNCT | GIT_REGEX_SPECIAL | \
> +		GIT_GLOB_SPECIAL | GIT_PATHSPEC_MAGIC)
> +#define isxdigit(x) (hexval_table[x] != -1)
> +#define isprint(x) (sane_istest(x, GIT_ALPHA | GIT_DIGIT | GIT_SPACE | \
> +		GIT_PUNCT | GIT_REGEX_SPECIAL | GIT_GLOB_SPECIAL | \
> +		GIT_PATHSPEC_MAGIC))

"Normal" isprint() only includes space (32) from the white-space characters. The other white-space characters are not considered printable.

Do we want to stay close to the "original", or not?

Regards Jan

Previous: Nguyen Thai Ngoc DuyNext: Nguyen Thai Ngoc Duy
Message 10 of 37 in “nd/wildmatch”
  1. 00/12 nd/wildmatchNguyễn Thái Ngọc Duy, Oct 14, 2012
  2. 01/12 ctype: make sane_ctype[] const arrayNguyễn Thái Ngọc Duy, Oct 14, 2012
  3. 02/12 ctype: support iscntrl, ispunct, isxdigit and isprintNguyễn Thái Ngọc Duy, Oct 14, 2012
  4. Junio C HamanoOct 14, 2012
  5. Nguyen Thai Ngoc DuyOct 14, 2012
  6. René ScharfeOct 14, 2012
  7. Nguyen Thai Ngoc DuyOct 14, 2012
  8. René ScharfeOct 14, 2012
  9. Nguyen Thai Ngoc DuyOct 14, 2012
  10. Jan H. SchönherrOct 17, 2012
  11. Nguyen Thai Ngoc DuyOct 17, 2012
  12. Correct Git's version of isprint and isspaceNguyễn Thái Ngọc Duy, Nov 13, 2012
  13. Jan H. SchönherrNov 13, 2012
  14. René ScharfeNov 13, 2012
  15. René ScharfeNov 13, 2012
  16. Linus TorvaldsNov 13, 2012
  17. Linus TorvaldsNov 13, 2012
  18. René ScharfeNov 14, 2012
  19. Johannes SixtNov 13, 2012
  20. wildmatch: correct isprint and isspaceNguyễn Thái Ngọc Duy, Nov 15, 2012
  21. Jan H. SchönherrNov 15, 2012
  22. Nguyen Thai Ngoc DuyNov 16, 2012
  23. 03/12 Import wildmatch from rsyncNguyễn Thái Ngọc Duy, Oct 14, 2012
  24. 04/12 wildmatch: remove unnecessary functionsNguyễn Thái Ngọc Duy, Oct 14, 2012
  25. Junio C HamanoOct 14, 2012
  26. Nguyen Thai Ngoc DuyOct 14, 2012
  27. 05/12 Integrate wildmatch to gitNguyễn Thái Ngọc Duy, Oct 14, 2012
  28. Junio C HamanoOct 14, 2012
  29. Torsten BögershausenOct 14, 2012
  30. 06/12 t3070: disable unreliable fnmatch testsNguyễn Thái Ngọc Duy, Oct 14, 2012
  31. 07/12 wildmatch: make wildmatch's return value compatible with fnmatchNguyễn Thái Ngọc Duy, Oct 14, 2012
  32. Junio C HamanoOct 14, 2012
  33. 08/12 wildmatch: remove static variable force_lower_caseNguyễn Thái Ngọc Duy, Oct 14, 2012
  34. 09/12 wildmatch: fix case-insensitive matchingNguyễn Thái Ngọc Duy, Oct 14, 2012
  35. 10/12 wildmatch: adjust "**" behaviorNguyễn Thái Ngọc Duy, Oct 14, 2012
  36. 11/12 wildmatch: make /**/ match zero or more directoriesNguyễn Thái Ngọc Duy, Oct 14, 2012
  37. 12/12 Support "**" wildcard in .gitignore and .gitattributesNguyễn Thái Ngọc Duy, Oct 14, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.