summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorph10 <ph10@2f5784b3-3f2a-0410-8824-cb99058d5e15>2011-01-12 11:41:55 +0000
committerph10 <ph10@2f5784b3-3f2a-0410-8824-cb99058d5e15>2011-01-12 11:41:55 +0000
commitd969301e704b4c098dac92cace9c8770599b15e7 (patch)
tree3fd60f2a71c709d2a45f7e060ca3840d57fd0ba1
parent85b2727ef6978843ae52322311400d63b45bb746 (diff)
downloadpcre-d969301e704b4c098dac92cace9c8770599b15e7.tar.gz
Fix pcregrep cast issue for 64-bit big-endian systems.
git-svn-id: svn://vcs.exim.org/pcre/code/trunk@584 2f5784b3-3f2a-0410-8824-cb99058d5e15
-rw-r--r--ChangeLog7
-rw-r--r--configure.ac4
-rw-r--r--pcregrep.c84
3 files changed, 52 insertions, 43 deletions
diff --git a/ChangeLog b/ChangeLog
index 4e7666a..36a6d99 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,11 +1,16 @@
ChangeLog for PCRE
------------------
-Version 8.12 11-Jan-2011
+Version 8.12 12-Jan-2011
------------------------
1. Fixed some typos in the markup of the man pages, and wrote a script that
checks for such things as part of the documentation building process.
+
+2. On a big-endian 64-bit system, pcregrep did not correctly process the
+ --match-limit and --recursion-limit options (added for 8.11). In
+ particular, this made one of the standard tests crash. (The integer value
+ went into the wrong half of a long int.)
Version 8.11 10-Dec-2010
diff --git a/configure.ac b/configure.ac
index 96e7a33..5d34a17 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,9 +9,9 @@ dnl The PCRE_PRERELEASE feature is for identifying release candidates. It might
dnl be defined as -RC2, for example. For real releases, it should be empty.
m4_define(pcre_major, [8])
-m4_define(pcre_minor, [11])
+m4_define(pcre_minor, [12])
m4_define(pcre_prerelease, [])
-m4_define(pcre_date, [2010-12-10])
+m4_define(pcre_date, [2011-01-12])
# Libtool shared library interface versions (current:revision:age)
m4_define(libpcre_version, [0:1:0])
diff --git a/pcregrep.c b/pcregrep.c
index 204a480..26a0222 100644
--- a/pcregrep.c
+++ b/pcregrep.c
@@ -6,7 +6,7 @@
its pattern matching. On a Unix or Win32 system it can recurse into
directories.
- Copyright (c) 1997-2010 University of Cambridge
+ Copyright (c) 1997-2011 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -186,8 +186,8 @@ static BOOL utf8 = FALSE;
/* Structure for options and list of them */
-enum { OP_NODATA, OP_STRING, OP_OP_STRING, OP_NUMBER, OP_OP_NUMBER,
- OP_PATLIST };
+enum { OP_NODATA, OP_STRING, OP_OP_STRING, OP_NUMBER, OP_LONGNUMBER,
+ OP_OP_NUMBER, OP_PATLIST };
typedef struct option_item {
int type;
@@ -216,41 +216,41 @@ used to identify them. */
#define N_M_LIMIT_REC (-14)
static option_item optionlist[] = {
- { OP_NODATA, N_NULL, NULL, "", " terminate options" },
- { OP_NODATA, N_HELP, NULL, "help", "display this help and exit" },
- { OP_NUMBER, 'A', &after_context, "after-context=number", "set number of following context lines" },
- { OP_NUMBER, 'B', &before_context, "before-context=number", "set number of prior context lines" },
- { OP_OP_STRING, N_COLOUR, &colour_option, "color=option", "matched text color option" },
- { OP_OP_STRING, N_COLOUR, &colour_option, "colour=option", "matched text colour option" },
- { OP_NUMBER, 'C', &both_context, "context=number", "set number of context lines, before & after" },
- { OP_NODATA, 'c', NULL, "count", "print only a count of matching lines per FILE" },
- { OP_STRING, 'D', &DEE_option, "devices=action","how to handle devices, FIFOs, and sockets" },
- { OP_STRING, 'd', &dee_option, "directories=action", "how to handle directories" },
- { OP_PATLIST, 'e', NULL, "regex(p)=pattern", "specify pattern (may be used more than once)" },
- { OP_NODATA, 'F', NULL, "fixed-strings", "patterns are sets of newline-separated strings" },
- { OP_STRING, 'f', &pattern_filename, "file=path", "read patterns from file" },
- { OP_NODATA, N_FOFFSETS, NULL, "file-offsets", "output file offsets, not text" },
- { OP_NODATA, 'H', NULL, "with-filename", "force the prefixing filename on output" },
- { OP_NODATA, 'h', NULL, "no-filename", "suppress the prefixing filename on output" },
- { OP_NODATA, 'i', NULL, "ignore-case", "ignore case distinctions" },
- { OP_NODATA, 'l', NULL, "files-with-matches", "print only FILE names containing matches" },
- { OP_NODATA, 'L', NULL, "files-without-match","print only FILE names not containing matches" },
- { OP_STRING, N_LABEL, &stdin_name, "label=name", "set name for standard input" },
- { OP_NODATA, N_LBUFFER, NULL, "line-buffered", "use line buffering" },
- { OP_NODATA, N_LOFFSETS, NULL, "line-offsets", "output line numbers and offsets, not text" },
- { OP_STRING, N_LOCALE, &locale, "locale=locale", "use the named locale" },
- { OP_NUMBER, N_M_LIMIT,&match_limit, "match-limit=number", "set PCRE match limit option" },
- { OP_NUMBER, N_M_LIMIT_REC,&match_limit_recursion, "recursion-limit=number", "set PCRE match recursion limit option" },
- { OP_NODATA, 'M', NULL, "multiline", "run in multiline mode" },
- { OP_STRING, 'N', &newline, "newline=type", "set newline type (CR, LF, CRLF, ANYCRLF or ANY)" },
- { OP_NODATA, 'n', NULL, "line-number", "print line number with output lines" },
- { OP_OP_NUMBER, 'o', &only_matching, "only-matching=n", "show only the part of the line that matched" },
- { OP_NODATA, 'q', NULL, "quiet", "suppress output, just set return code" },
- { OP_NODATA, 'r', NULL, "recursive", "recursively scan sub-directories" },
- { OP_STRING, N_EXCLUDE,&exclude_pattern, "exclude=pattern","exclude matching files when recursing" },
- { OP_STRING, N_INCLUDE,&include_pattern, "include=pattern","include matching files when recursing" },
- { OP_STRING, N_EXCLUDE_DIR,&exclude_dir_pattern, "exclude-dir=pattern","exclude matching directories when recursing" },
- { OP_STRING, N_INCLUDE_DIR,&include_dir_pattern, "include-dir=pattern","include matching directories when recursing" },
+ { OP_NODATA, N_NULL, NULL, "", " terminate options" },
+ { OP_NODATA, N_HELP, NULL, "help", "display this help and exit" },
+ { OP_NUMBER, 'A', &after_context, "after-context=number", "set number of following context lines" },
+ { OP_NUMBER, 'B', &before_context, "before-context=number", "set number of prior context lines" },
+ { OP_OP_STRING, N_COLOUR, &colour_option, "color=option", "matched text color option" },
+ { OP_OP_STRING, N_COLOUR, &colour_option, "colour=option", "matched text colour option" },
+ { OP_NUMBER, 'C', &both_context, "context=number", "set number of context lines, before & after" },
+ { OP_NODATA, 'c', NULL, "count", "print only a count of matching lines per FILE" },
+ { OP_STRING, 'D', &DEE_option, "devices=action","how to handle devices, FIFOs, and sockets" },
+ { OP_STRING, 'd', &dee_option, "directories=action", "how to handle directories" },
+ { OP_PATLIST, 'e', NULL, "regex(p)=pattern", "specify pattern (may be used more than once)" },
+ { OP_NODATA, 'F', NULL, "fixed-strings", "patterns are sets of newline-separated strings" },
+ { OP_STRING, 'f', &pattern_filename, "file=path", "read patterns from file" },
+ { OP_NODATA, N_FOFFSETS, NULL, "file-offsets", "output file offsets, not text" },
+ { OP_NODATA, 'H', NULL, "with-filename", "force the prefixing filename on output" },
+ { OP_NODATA, 'h', NULL, "no-filename", "suppress the prefixing filename on output" },
+ { OP_NODATA, 'i', NULL, "ignore-case", "ignore case distinctions" },
+ { OP_NODATA, 'l', NULL, "files-with-matches", "print only FILE names containing matches" },
+ { OP_NODATA, 'L', NULL, "files-without-match","print only FILE names not containing matches" },
+ { OP_STRING, N_LABEL, &stdin_name, "label=name", "set name for standard input" },
+ { OP_NODATA, N_LBUFFER, NULL, "line-buffered", "use line buffering" },
+ { OP_NODATA, N_LOFFSETS, NULL, "line-offsets", "output line numbers and offsets, not text" },
+ { OP_STRING, N_LOCALE, &locale, "locale=locale", "use the named locale" },
+ { OP_LONGNUMBER, N_M_LIMIT, &match_limit, "match-limit=number", "set PCRE match limit option" },
+ { OP_LONGNUMBER, N_M_LIMIT_REC, &match_limit_recursion, "recursion-limit=number", "set PCRE match recursion limit option" },
+ { OP_NODATA, 'M', NULL, "multiline", "run in multiline mode" },
+ { OP_STRING, 'N', &newline, "newline=type", "set newline type (CR, LF, CRLF, ANYCRLF or ANY)" },
+ { OP_NODATA, 'n', NULL, "line-number", "print line number with output lines" },
+ { OP_OP_NUMBER, 'o', &only_matching, "only-matching=n", "show only the part of the line that matched" },
+ { OP_NODATA, 'q', NULL, "quiet", "suppress output, just set return code" },
+ { OP_NODATA, 'r', NULL, "recursive", "recursively scan sub-directories" },
+ { OP_STRING, N_EXCLUDE,&exclude_pattern, "exclude=pattern","exclude matching files when recursing" },
+ { OP_STRING, N_INCLUDE,&include_pattern, "include=pattern","include matching files when recursing" },
+ { OP_STRING, N_EXCLUDE_DIR,&exclude_dir_pattern, "exclude-dir=pattern","exclude matching directories when recursing" },
+ { OP_STRING, N_INCLUDE_DIR,&include_dir_pattern, "include-dir=pattern","include matching directories when recursing" },
/* These two were accidentally implemented with underscores instead of
hyphens in the option names. As this was not discovered for several releases,
@@ -2278,7 +2278,8 @@ for (i = 1; i < argc; i++)
/* Otherwise, deal with single string or numeric data values. */
- else if (op->type != OP_NUMBER && op->type != OP_OP_NUMBER)
+ else if (op->type != OP_NUMBER && op->type != OP_LONGNUMBER &&
+ op->type != OP_OP_NUMBER)
{
*((char **)op->dataptr) = option_data;
}
@@ -2308,7 +2309,10 @@ for (i = 1; i < argc; i++)
option_data, op->one_char);
pcregrep_exit(usage(2));
}
- *((int *)op->dataptr) = n;
+ if (op->type == OP_LONGNUMBER)
+ *((unsigned long int *)op->dataptr) = n;
+ else
+ *((int *)op->dataptr) = n;
}
}