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

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

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Oct 10, 2012, 10:40 UTC
Message-ID
<1349865651-31889-3-git-send-email-pclouds@gmail.com>
In-Reply-To
<1349865651-31889-1-git-send-email-pclouds@gmail.com>

A new table sane_ctype2[] is added, otherwise we'll need to OR with current bits in sane_ctype[] and that looks ugly.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 ctype.c           | 18 ++++++++++++++++++
 git-compat-util.h | 13 +++++++++++++
 2 files changed, 31 insertions(+)
diff --git a/ctype.c b/ctype.c
index faeaf34..b4bf48a 100644
--- a/ctype.c
+++ b/ctype.c
@@ -26,6 +26,24 @@ const unsigned char sane_ctype[256] = {
 	/* Nothing in the 128.. range */
 };
 
+enum {
+	CN = GIT_CNTRL,
+	PU = GIT_PUNCT,
+	XD = GIT_XDIGIT,
+};
+
+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 */
+	/* Nothing in the 128.. range */
+};
+
 /* For case-insensitive kwset */
 const char tolower_trans_tbl[256] = {
 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
diff --git a/git-compat-util.h b/git-compat-util.h
index f8b859c..ea11694 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -510,14 +510,23 @@ extern const char tolower_trans_tbl[256];
 #undef isupper
 #undef tolower
 #undef toupper
+#undef iscntrl
+#undef ispunct
+#undef isxdigit
+#undef isprint
 extern const unsigned char sane_ctype[256];
+extern const unsigned char sane_ctype2[256];
 #define GIT_SPACE 0x01
 #define GIT_DIGIT 0x02
 #define GIT_ALPHA 0x04
 #define GIT_GLOB_SPECIAL 0x08
 #define GIT_REGEX_SPECIAL 0x10
 #define GIT_PATHSPEC_MAGIC 0x20
+#define GIT_CNTRL 0x01
+#define GIT_PUNCT 0x02
+#define GIT_XDIGIT 0x04
 #define sane_istest(x,mask) ((sane_ctype[(unsigned char)(x)] & (mask)) != 0)
+#define sane_istest2(x,mask) ((sane_ctype2[(unsigned char)(x)] & (mask)) != 0)
 #define isascii(x) (((x) & ~0x7f) == 0)
 #define isspace(x) sane_istest(x,GIT_SPACE)
 #define isdigit(x) sane_istest(x,GIT_DIGIT)
@@ -527,6 +536,10 @@ 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_istest2(x, GIT_CNTRL)
+#define ispunct(x) sane_istest2(x, GIT_PUNCT)
+#define isxdigit(x) sane_istest2(x, GIT_XDIGIT)
+#define isprint(x) (isalnum(x) || isspace(x) || ispunct(x))
 #define tolower(x) sane_case((unsigned char)(x), 0x20)
 #define toupper(x) sane_case((unsigned char)(x), 0)
 #define is_pathspec_magic(x) sane_istest(x,GIT_PATHSPEC_MAGIC)
-- 
1.7.12.1.406.g6ab07c4
Previous: Nguyễn Thái Ngọc DuyNext: Nguyễn Thái Ngọc Duy
Message 3 of 28 in “Wildmatch v4”
  1. 00/12 Wildmatch v4Nguyễn Thái Ngọc Duy, Oct 10, 2012
  2. 01/12 ctype: make sane_ctype[] const arrayNguyễn Thái Ngọc Duy, Oct 10, 2012
  3. 02/12 ctype: support iscntrl, ispunct, isxdigit and isprintNguyễn Thái Ngọc Duy, Oct 10, 2012
  4. 03/12 Import wildmatch from rsyncNguyễn Thái Ngọc Duy, Oct 10, 2012
  5. 04/12 wildmatch: remove unnecessary functionsNguyễn Thái Ngọc Duy, Oct 10, 2012
  6. Michael HaggertyOct 10, 2012
  7. 05/12 Integrate wildmatch to gitNguyễn Thái Ngọc Duy, Oct 10, 2012
  8. Johannes SixtOct 12, 2012
  9. Junio C HamanoOct 12, 2012
  10. 06/12 wildmatch: make wildmatch's return value compatible with fnmatchNguyễn Thái Ngọc Duy, Oct 10, 2012
  11. 07/12 wildmatch: remove static variable force_lower_caseNguyễn Thái Ngọc Duy, Oct 10, 2012
  12. 08/12 wildmatch: fix case-insensitive matchingNguyễn Thái Ngọc Duy, Oct 10, 2012
  13. 09/12 wildmatch: adjust "**" behaviorNguyễn Thái Ngọc Duy, Oct 10, 2012
  14. 10/12 wildmatch: make /**/ match zero or more directoriesNguyễn Thái Ngọc Duy, Oct 10, 2012
  15. 11/12 Support "**" wildcard in .gitignore and .gitattributesNguyễn Thái Ngọc Duy, Oct 10, 2012
  16. 12/12 t3070: disable two fnmatch tests that have different results on different libcNguyễn Thái Ngọc Duy, Oct 10, 2012
  17. Johannes SixtOct 12, 2012
  18. Nguyen Thai Ngoc DuyOct 12, 2012
  19. Junio C HamanoOct 10, 2012
  20. Junio C HamanoOct 11, 2012
  21. Nguyen Thai Ngoc DuyOct 11, 2012
  22. Junio C HamanoOct 11, 2012
  23. Junio C HamanoOct 11, 2012
  24. Junio C HamanoOct 11, 2012
  25. Torsten BögershausenOct 12, 2012
  26. Junio C HamanoOct 12, 2012
  27. Torsten BögershausenOct 12, 2012
  28. Nguyen Thai Ngoc DuyOct 13, 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.