aboutsummaryrefslogtreecommitdiffstats
path: root/regexp/jimregexp.h
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2020-04-03 06:30:08 +0000
committerNIIBE Yutaka <[email protected]>2020-04-03 06:30:08 +0000
commitba247a114c75a84473c11c1484013b09fbb9bcd1 (patch)
treea76cedce73621da0142ceb7d71ae51cad8696ec3 /regexp/jimregexp.h
parentscd:p15: Implement do_with_keygrip and capabilities. (diff)
downloadgnupg-ba247a114c75a84473c11c1484013b09fbb9bcd1.tar.gz
gnupg-ba247a114c75a84473c11c1484013b09fbb9bcd1.zip
gpg: Add regular expression support.
* AUTHORS, COPYING.other: Update. * Makefile.am (SUBDIRS): Add regexp sub directory. * configure.ac (DISABLE_REGEX): Remove. * g10/Makefile.am (needed_libs): Add libregexp.a. * g10/trustdb.c: Remove DISABLE_REGEX support. * regexp/LICENSE, regexp/jimregexp.c, regexp/jimregexp.h, regexp/utf8.c, regexp/utf8.h: New from Jim Tcl. * regexp/UnicodeData.txt: New from Unicode. * regexp/Makefile.am, regexp/parse-unidata.awk: New. * tests/openpgp/Makefile.am: Remove DISABLE_REGEX support. * tools/Makefile.am: Remove DISABLE_REGEX support. GnuPG-bug-id: 4843 Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to '')
-rw-r--r--regexp/jimregexp.h109
1 files changed, 109 insertions, 0 deletions
diff --git a/regexp/jimregexp.h b/regexp/jimregexp.h
new file mode 100644
index 000000000..581b7104c
--- /dev/null
+++ b/regexp/jimregexp.h
@@ -0,0 +1,109 @@
+#ifndef JIMREGEXP_H
+#define JIMREGEXP_H
+
+/** regexp(3)-compatible regular expression implementation for Jim.
+ *
+ * See jimregexp.c for details
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdlib.h>
+
+typedef struct {
+ int rm_so;
+ int rm_eo;
+} regmatch_t;
+
+/*
+ * The "internal use only" fields in regexp.h are present to pass info from
+ * compile to execute that permits the execute phase to run lots faster on
+ * simple cases. They are:
+ *
+ * regstart char that must begin a match; '\0' if none obvious
+ * reganch is the match anchored (at beginning-of-line only)?
+ * regmust string (pointer into program) that match must include, or NULL
+ * regmlen length of regmust string
+ *
+ * Regstart and reganch permit very fast decisions on suitable starting points
+ * for a match, cutting down the work a lot. Regmust permits fast rejection
+ * of lines that cannot possibly match. The regmust tests are costly enough
+ * that regcomp() supplies a regmust only if the r.e. contains something
+ * potentially expensive (at present, the only such thing detected is * or +
+ * at the start of the r.e., which can involve a lot of backup). Regmlen is
+ * supplied because the test in regexec() needs it and regcomp() is computing
+ * it anyway.
+ */
+
+struct regexp {
+ /* -- public -- */
+ int re_nsub; /* number of parenthesized subexpressions */
+
+ /* -- private -- */
+ int cflags; /* Flags used when compiling */
+ int err; /* Any error which occurred during compile */
+ int regstart; /* Internal use only. */
+ int reganch; /* Internal use only. */
+ int regmust; /* Internal use only. */
+ int regmlen; /* Internal use only. */
+ int *program; /* Allocated */
+
+ /* working state - compile */
+ const char *regparse; /* Input-scan pointer. */
+ int p; /* Current output pos in program */
+ int proglen; /* Allocated program size */
+
+ /* working state - exec */
+ int eflags; /* Flags used when executing */
+ const char *start; /* Initial string pointer. */
+ const char *reginput; /* Current input pointer. */
+ const char *regbol; /* Beginning of input, for ^ check. */
+
+ /* Input to regexec() */
+ regmatch_t *pmatch; /* submatches will be stored here */
+ int nmatch; /* size of pmatch[] */
+};
+
+typedef struct regexp regex_t;
+
+#define REG_EXTENDED 0
+#define REG_NEWLINE 1
+#define REG_ICASE 2
+
+#define REG_NOTBOL 16
+
+enum {
+ REG_NOERROR, /* Success. */
+ REG_NOMATCH, /* Didn't find a match (for regexec). */
+ REG_BADPAT, /* >= REG_BADPAT is an error */
+ REG_ERR_NULL_ARGUMENT,
+ REG_ERR_UNKNOWN,
+ REG_ERR_TOO_BIG,
+ REG_ERR_NOMEM,
+ REG_ERR_TOO_MANY_PAREN,
+ REG_ERR_UNMATCHED_PAREN,
+ REG_ERR_UNMATCHED_BRACES,
+ REG_ERR_BAD_COUNT,
+ REG_ERR_JUNK_ON_END,
+ REG_ERR_OPERAND_COULD_BE_EMPTY,
+ REG_ERR_NESTED_COUNT,
+ REG_ERR_INTERNAL,
+ REG_ERR_COUNT_FOLLOWS_NOTHING,
+ REG_ERR_TRAILING_BACKSLASH,
+ REG_ERR_CORRUPTED,
+ REG_ERR_NULL_CHAR,
+ REG_ERR_NUM
+};
+
+int regcomp(regex_t *preg, const char *regex, int cflags);
+int regexec(regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags);
+size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size);
+void regfree(regex_t *preg);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif