*
* Purpose : Header file for pcrs.c
*
- * Copyright : see pcrs.c
+ * Copyright : Written and Copyright (C) 2000, 2001 by Andreas S. Oesterhelt
+ * <andreas@oesterhelt.org>
*
- * Revisions :
- * $Log: pcrs.h,v $
- * Revision 1.15 2007/01/05 15:46:12 fabiankeil
- * Don't use strlen() to calculate the length of
- * the pcrs substitutes. They don't have to be valid C
- * strings and getting their length wrong can result in
- * user-controlled memory corruption.
+ * Copyright (C) 2006, 2007 Fabian Keil <fk@fabiankeil.de>
*
- * Thanks to Felix Gröbert for reporting the problem
- * and providing the fix [#1627140].
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at
+ * your option) any later version.
*
- * Revision 1.14 2006/12/24 17:27:37 fabiankeil
- * Increase pcrs error code offset to prevent overlaps
- * with pcre versions newer than our own.
+ * This program is distributed in the hope that it will
+ * be useful, but WITHOUT ANY WARRANTY; without even the
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public
+ * License for more details.
*
- * Revision 1.13 2006/07/18 14:48:47 david__schmidt
- * Reorganizing the repository: swapping out what was HEAD (the old 3.1 branch)
- * with what was really the latest development (the v_3_0_branch branch)
- *
- * Revision 1.11 2002/03/08 14:18:23 oes
- * Fixing -Wconversion warnings
- *
- * Revision 1.10 2002/03/08 13:44:48 oes
- * Hiding internal functions, preventing double inclusion of pcre.h
- *
- * Revision 1.9 2001/08/18 11:35:29 oes
- * - Introduced pcrs_strerror()
- * - added pcrs_execute_list()
- *
- * Revision 1.8 2001/08/15 15:32:50 oes
- * Replaced the hard limit for the maximum number of matches
- * by dynamic reallocation
- *
- * Revision 1.7 2001/08/05 13:13:11 jongfoster
- * Making parameters "const" where possible.
- *
- * Revision 1.6 2001/07/29 18:52:06 jongfoster
- * Renaming _PCRS_H, and adding "extern C {}"
- *
- * Revision 1.5 2001/07/18 17:27:00 oes
- * Changed interface; Cosmetics
- *
- * Revision 1.4 2001/06/29 13:33:19 oes
- * - Cleaned up, commented and adapted to reflect the
- * changes in pcrs.c
- * - Introduced the PCRS_* flags
- *
- * Revision 1.3 2001/06/09 10:58:57 jongfoster
- * Removing a single unused #define which referenced BUFSIZ
- *
- * Revision 1.2 2001/05/25 11:03:55 oes
- * Added sanity check for NULL jobs to pcrs_exec_substitution
- *
- * Revision 1.1.1.1 2001/05/15 13:59:02 oes
- * Initial import of version 2.9.3 source tree
- *
- * Revision 1.4 2001/05/11 01:57:02 rodney
- * Added new file header standard w/RCS control tags.
- *
- * revision 1.3 2001/05/08 02:38:13 rodney
- * Changed C++ "//" style comment to C style comments.
- *
- * revision 1.2 2001/04/30 02:39:24 rodney
- * Made this pcrs.h file conditionally included.
- *
- * revision 1.1 2001/04/16 21:10:38 rodney
- * Initial checkin
+ * The GNU General Public License should be included with
+ * this file. If not, you can view it at
+ * http://www.gnu.org/copyleft/gpl.html
+ * or write to the Free Software Foundation, Inc., 59
+ * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*********************************************************************/
-#define PCRS_H_VERSION "$Id: pcrs.h,v 1.15 2007/01/05 15:46:12 fabiankeil Exp $"
-\f
+#ifdef HAVE_PCRE2
+#define PCRE2_CODE_UNIT_WIDTH 8
+#define PCREn(x) PCRE2_ ## x
+#ifndef _PCRE2_H
+#include <pcre2.h>
+#endif
+#else
+#define PCREn(x) PCRE_ ## x
#ifndef _PCRE_H
#include <pcre.h>
#endif
-
-#ifdef __cplusplus
-extern "C" {
#endif
/*
* They are supposed to be handled together with PCRE error
* codes and have to start with an offset to prevent overlaps.
*
- * PCRE 6.7 uses error codes from -1 to -21, PCRS error codes
- * below -100 should be safe for a while.
+ * PCRE 6.7 uses error codes from -1 to -21,
+ * PCRE2 10.42 uses error codes from -66 to 101.
+ * PCRS error codes below -300 should be safe for a while.
*/
-#define PCRS_ERR_NOMEM -100 /* Failed to acquire memory. */
-#define PCRS_ERR_CMDSYNTAX -101 /* Syntax of s///-command */
-#define PCRS_ERR_STUDY -102 /* pcre error while studying the pattern */
-#define PCRS_ERR_BADJOB -103 /* NULL job pointer, pattern or substitute */
-#define PCRS_WARN_BADREF -104 /* Backreference out of range */
-#define PCRS_WARN_TRUNCATION -105 /* At least one pcrs variable was too big,
+#define PCRS_ERR_NOMEM -300 /* Failed to acquire memory. */
+#define PCRS_ERR_CMDSYNTAX -301 /* Syntax of s///-command */
+#define PCRS_ERR_STUDY -302 /* pcre error while studying the pattern */
+#define PCRS_ERR_BADJOB -303 /* NULL job pointer, pattern or substitute */
+#define PCRS_WARN_BADREF -304 /* Backreference out of range */
+#define PCRS_WARN_TRUNCATION -305 /* At least one pcrs variable was too big,
* only the first part was used. */
/* Flags */
-#define PCRS_GLOBAL 1 /* Job should be applied globally, as with perl's g option */
-#define PCRS_TRIVIAL 2 /* Backreferences in the substitute are ignored */
-#define PCRS_SUCCESS 4 /* Job did previously match */
+#define PCRS_GLOBAL 0x08000000u /* Job should be applied globally, as with perl's g option */
+#define PCRS_TRIVIAL 0x10000000u /* Backreferences in the substitute are ignored */
+#define PCRS_SUCCESS 0x20000000u /* Job did previously match */
+#define PCRS_DYNAMIC 0x40000000u /* Job is dynamic (used to disable JIT compilation) */
/*
/* A PCRS job */
typedef struct PCRS_JOB {
+#ifdef HAVE_PCRE2
+ pcre2_code *pattern;
+#else
pcre *pattern; /* The compiled pcre pattern */
pcre_extra *hints; /* The pcre hints for the pattern */
+#endif
int options; /* The pcre options (numeric) */
- int flags; /* The pcrs and user flags (see "Flags" above) */
+ unsigned int flags; /* The pcrs and user flags (see "Flags" above) */
pcrs_substitute *substitute; /* The compiled pcrs substitute */
struct PCRS_JOB *next; /* Pointer for chaining jobs to joblists */
} pcrs_job;
#define PCRS_BUFFER_SIZE 4000
#endif /* ndef PCRS_BUFFER_SIZE */
-#ifdef __cplusplus
-} /* extern "C" */
+#ifdef FUZZ
+extern pcrs_substitute *pcrs_compile_fuzzed_replacement(const char *replacement, int *errptr);
#endif
#endif /* ndef PCRS_H_INCLUDED */