0
0
Fork 0
haikuports/sys-apps/grep/patches/grep-2.24.patchset

592 lines
18 KiB
Plaintext

From caa9ffa4f1340056db4dc3ce7d63b29393d676d7 Mon Sep 17 00:00:00 2001
From: Jerome Duval <jerome.duval@gmail.com>
Date: Wed, 4 Jun 2014 19:20:57 +0000
Subject: gcc2 patch
[cdesai: update for v2.22]
diff --git a/src/dfa.c b/src/dfa.c
index adc5de3..f397ff2 100644
--- a/src/dfa.c
+++ b/src/dfa.c
@@ -3481,7 +3481,8 @@ dfainit (struct dfa *d)
static bool _GL_ATTRIBUTE_PURE
dfa_supported (struct dfa const *d)
{
- for (size_t i = 0; i < d->tindex; i++)
+ size_t i;
+ for (i = 0; i < d->tindex; i++)
{
switch (d->tokens[i])
{
@@ -3934,6 +3935,7 @@ freemust (must *mp)
struct dfamust *
dfamust (struct dfa const *d)
{
+ struct dfamust *dm = NULL;
must *mp = NULL;
char const *result = "";
size_t i;
@@ -3943,8 +3945,10 @@ dfamust (struct dfa const *d)
bool need_begline = false;
bool need_endline = false;
bool case_fold_unibyte = case_fold && MB_CUR_MAX == 1;
+ size_t ri;
+ size_t rj;
- for (size_t ri = 0; ri < d->tindex; ++ri)
+ for (ri = 0; ri < d->tindex; ++ri)
{
token t = d->tokens[ri];
switch (t)
@@ -4119,7 +4123,7 @@ dfamust (struct dfa const *d)
}
}
- size_t rj = ri + 2;
+ rj = ri + 2;
if (d->tokens[ri + 1] == CAT)
{
for (; rj < d->tindex - 1; rj += 2)
@@ -4148,7 +4152,6 @@ dfamust (struct dfa const *d)
}
done:;
- struct dfamust *dm = NULL;
if (*result)
{
dm = xmalloc (sizeof *dm);
diff --git a/src/dfasearch.c b/src/dfasearch.c
index d348d44..cd33148 100644
--- a/src/dfasearch.c
+++ b/src/dfasearch.c
@@ -95,11 +95,11 @@ kwsmusts (void)
/* Prepare a substring whose presence implies a match.
The kwset matcher will return the index of the matching
string that it chooses. */
- ++kwset_exact_matches;
size_t old_len = strlen (dm->must);
size_t new_len = old_len + dm->begline + dm->endline;
char *must = xmalloc (new_len);
char *mp = must;
+ ++kwset_exact_matches;
*mp = eolbyte;
mp += dm->begline;
begline |= dm->begline;
@@ -122,6 +122,7 @@ kwsmusts (void)
void
GEAcompile (char const *pattern, size_t size, reg_syntax_t syntax_bits)
{
+ char const *p;
size_t total = size;
char *motif;
@@ -134,9 +135,10 @@ GEAcompile (char const *pattern, size_t size, reg_syntax_t syntax_bits)
"[\nallo\n]\n", where the patterns are "[", "allo" and "]", and
this should be a syntax error. The same for backref, where the
backref should be local to each pattern. */
- char const *p = pattern;
+ p = pattern;
do
{
+ char const *err;
size_t len;
char const *sep = memchr (p, '\n', total);
if (sep)
@@ -154,7 +156,7 @@ GEAcompile (char const *pattern, size_t size, reg_syntax_t syntax_bits)
patterns = xnrealloc (patterns, pcount + 1, sizeof *patterns);
patterns[pcount] = patterns0;
- char const *err = re_compile_pattern (p, len,
+ err = re_compile_pattern (p, len,
&(patterns[pcount].regexbuf));
if (err)
error (EXIT_TROUBLE, 0, "%s", err);
@@ -213,6 +215,7 @@ EGexecute (char *buf, size_t size, size_t *match_size,
size_t i;
struct dfa *superset = dfasuperset (dfa);
bool dfafast = dfaisfast (dfa);
+ size_t off;
mb_start = buf;
buflim = buf + size;
@@ -445,7 +448,7 @@ EGexecute (char *buf, size_t size, size_t *match_size,
success:
len = end - beg;
success_in_len:;
- size_t off = beg - buf;
+ off = beg - buf;
*match_size = len;
return off;
}
diff --git a/src/dosbuf.c b/src/dosbuf.c
index 839cc3a..405662a 100644
--- a/src/dosbuf.c
+++ b/src/dosbuf.c
@@ -95,11 +95,11 @@ guess_type (char *buf, size_t buflen)
static size_t
undossify_input (char *buf, size_t buflen)
{
+ size_t bytes_left = 0;
+
if (! O_BINARY)
return buflen;
- size_t bytes_left = 0;
-
if (totalcc == 0)
{
/* New file: forget everything we knew about character
@@ -186,12 +186,12 @@ undossify_input (char *buf, size_t buflen)
static off_t
dossified_pos (off_t byteno)
{
- if (! O_BINARY)
- return byteno;
-
off_t pos_lo;
off_t pos_hi;
+ if (! O_BINARY)
+ return byteno;
+
if (dos_file_type != DOS_TEXT || dos_report_unix_offset)
return byteno;
diff --git a/src/grep.c b/src/grep.c
index 73c3651..5455634 100644
--- a/src/grep.c
+++ b/src/grep.c
@@ -521,7 +521,9 @@ initialize_unibyte_mask (void)
bits work better. */
unsigned char mask = 0;
int ms1b = 1;
- for (int i = 1; i <= UCHAR_MAX; i++)
+ int i;
+ uword uword_max;
+ for (i = 1; i <= UCHAR_MAX; i++)
if (mbclen_cache[i] != 1 && ! (mask & i))
{
while (ms1b * 2 <= i)
@@ -532,7 +534,7 @@ initialize_unibyte_mask (void)
/* Now MASK will detect any encoding-error byte, although it may
cry wolf and it may not be optimal. Build a uword-length mask by
repeating MASK. */
- uword uword_max = -1;
+ uword_max = -1;
unibyte_mask = uword_max / UCHAR_MAX * mask;
}
@@ -564,14 +566,15 @@ skip_easy_bytes (char const *buf)
bool
buf_has_encoding_errors (char *buf, size_t size)
{
- if (! unibyte_mask)
- return false;
-
mbstate_t mbs = { 0 };
size_t clen;
+ char const *p;
+ if (! unibyte_mask)
+ return false;
+
buf[size] = -1;
- for (char const *p = buf; (p = skip_easy_bytes (p)) < buf + size; p += clen)
+ for (p = buf; (p = skip_easy_bytes (p)) < buf + size; p += clen)
{
clen = mbrlen (p, buf + size - p, &mbs);
if ((size_t) -2 <= clen)
@@ -606,6 +609,7 @@ file_must_have_nulls (size_t size, int fd, struct stat const *st)
/* If the file has holes, it must contain a null byte somewhere. */
if (SEEK_HOLE != SEEK_SET)
{
+ off_t hole_start;
off_t cur = size;
if (O_BINARY || fd == STDIN_FILENO)
{
@@ -615,7 +619,7 @@ file_must_have_nulls (size_t size, int fd, struct stat const *st)
}
/* Look for a hole after the current location. */
- off_t hole_start = lseek (fd, cur, SEEK_HOLE);
+ hole_start = lseek (fd, cur, SEEK_HOLE);
if (0 <= hole_start)
{
if (lseek (fd, cur, SEEK_SET) < 0)
@@ -717,7 +721,8 @@ add_count (uintmax_t a, uintmax_t b)
static bool
all_zeros (char const *buf, size_t size)
{
- for (char const *p = buf; p < buf + size; p++)
+ char const *p;
+ for (p = buf; p < buf + size; p++)
if (*p)
return false;
return true;
@@ -993,6 +998,7 @@ static bool
print_line_head (char *beg, size_t len, char const *lim, char sep)
{
bool encoding_errors = false;
+ bool pending_sep = false;
if (binary_files != TEXT_BINARY_FILES)
{
char ch = beg[len];
@@ -1005,7 +1011,6 @@ print_line_head (char *beg, size_t len, char const *lim, char sep)
return false;
}
- bool pending_sep = false;
if (out_file)
{
@@ -1230,11 +1235,13 @@ prtext (char *beg, char *lim)
{
static bool used; /* Avoid printing SEP_STR_GROUP before any output. */
char eol = eolbyte;
+ char *p;
+ intmax_t n;
if (!out_quiet && pending > 0)
prpending (beg);
- char *p = beg;
+ p = beg;
if (!out_quiet)
{
@@ -1267,7 +1274,6 @@ prtext (char *beg, char *lim)
}
}
- intmax_t n;
if (out_invert)
{
/* One or more lines are output. */
@@ -1324,9 +1330,11 @@ grepbuf (char *beg, char const *lim)
{
intmax_t outleft0 = outleft;
char *endp;
+ char *p;
- for (char *p = beg; p < lim; p = endp)
+ for (p = beg; p < lim; p = endp)
{
+ char *b;
size_t match_size;
size_t match_offset = execute (p, lim - p, &match_size, NULL);
if (match_offset == (size_t) -1)
@@ -1336,7 +1344,7 @@ grepbuf (char *beg, char const *lim)
match_offset = lim - p;
match_size = 0;
}
- char *b = p + match_offset;
+ b = p + match_offset;
endp = b + match_size;
/* Avoid matching the empty line at the end of the buffer. */
if (!out_invert && b == lim)
@@ -1373,6 +1381,7 @@ grep (int fd, struct stat const *st)
char nul_zapper = '\0';
bool done_on_match_0 = done_on_match;
bool out_quiet_0 = out_quiet;
+ bool firsttime;
/* The value of NLINES when nulls were first deduced in the input;
this is not necessarily the same as the number of matching lines
@@ -1402,7 +1411,7 @@ grep (int fd, struct stat const *st)
return 0;
}
- for (bool firsttime = true; ; firsttime = false)
+ for (firsttime = true; ; firsttime = false)
{
if (nlines_first_null < 0 && eol && binary_files != TEXT_BINARY_FILES
&& (buf_has_nulls (bufbeg, buflim - bufbeg)
@@ -2204,6 +2213,8 @@ fgrep_to_grep_pattern (size_t len, char const *keys,
int
main (int argc, char **argv)
{
+ bool status = true;
+ char *const *files;
char *keys;
size_t keycc, oldcc, keyalloc;
bool with_filenames;
@@ -2213,6 +2224,10 @@ main (int argc, char **argv)
int fread_errno;
intmax_t default_context;
FILE *fp;
+ struct stat tmp_stat;
+ char eolbytes[3];
+ size_t match_size;
+ int cmd;
exit_failure = EXIT_TROUBLE;
initialize_main (&argc, &argv);
set_program_name (argv[0]);
@@ -2487,7 +2502,7 @@ main (int argc, char **argv)
case EXCLUDE_OPTION:
case INCLUDE_OPTION:
- for (int cmd = 0; cmd < 2; cmd++)
+ for (cmd = 0; cmd < 2; cmd++)
{
if (!excluded_patterns[cmd])
excluded_patterns[cmd] = new_exclude ();
@@ -2497,7 +2512,7 @@ main (int argc, char **argv)
}
break;
case EXCLUDE_FROM_OPTION:
- for (int cmd = 0; cmd < 2; cmd++)
+ for (cmd = 0; cmd < 2; cmd++)
{
if (!excluded_patterns[cmd])
excluded_patterns[cmd] = new_exclude ();
@@ -2510,7 +2525,7 @@ main (int argc, char **argv)
case EXCLUDE_DIRECTORY_OPTION:
strip_trailing_slashes (optarg);
- for (int cmd = 0; cmd < 2; cmd++)
+ for (cmd = 0; cmd < 2; cmd++)
{
if (!excluded_directory_patterns[cmd])
excluded_directory_patterns[cmd] = new_exclude ();
@@ -2582,7 +2597,6 @@ main (int argc, char **argv)
if (show_help)
usage (EXIT_SUCCESS);
- struct stat tmp_stat;
if (fstat (STDOUT_FILENO, &tmp_stat) == 0 && S_ISREG (tmp_stat.st_mode))
out_stat = tmp_stat;
@@ -2634,8 +2648,9 @@ main (int argc, char **argv)
compile (keys, keycc);
free (keys);
/* We need one byte prior and one after. */
- char eolbytes[3] = { 0, eolbyte, 0 };
- size_t match_size;
+ eolbytes[0] = 0;
+ eolbytes[1] = eolbyte;
+ eolbytes[2] = 0;
skip_empty_lines = ((execute (eolbytes + 1, 1, &match_size, NULL) == 0)
== out_invert);
@@ -2655,7 +2670,6 @@ main (int argc, char **argv)
if (fts_options & FTS_LOGICAL && devices == READ_COMMAND_LINE_DEVICES)
devices = READ_DEVICES;
- char *const *files;
if (optind < argc)
{
files = argv + optind;
@@ -2672,7 +2686,6 @@ main (int argc, char **argv)
files = stdin_only;
}
- bool status = true;
do
status &= grep_command_line_arg (*files++);
while (*files != NULL);
diff --git a/src/kwsearch.c b/src/kwsearch.c
index e9966d4..a8f716d 100644
--- a/src/kwsearch.c
+++ b/src/kwsearch.c
@@ -37,13 +37,14 @@ void
Fcompile (char const *pattern, size_t size)
{
size_t total = size;
+ char const *p = pattern;
kwsinit (&kwset);
- char const *p = pattern;
do
{
size_t len;
+ char *buf = NULL;
char const *sep = memchr (p, '\n', total);
if (sep)
{
@@ -57,7 +58,6 @@ Fcompile (char const *pattern, size_t size)
total = 0;
}
- char *buf = NULL;
if (match_lines)
{
buf = xmalloc (len + 2);
@@ -86,6 +86,7 @@ Fexecute (char *buf, size_t size, size_t *match_size,
char eol = eolbyte;
struct kwsmatch kwsmatch;
size_t ret_val;
+ size_t off;
for (mb_start = beg = start_ptr ? start_ptr : buf; beg <= buf + size; beg++)
{
@@ -157,7 +158,7 @@ Fexecute (char *buf, size_t size, size_t *match_size,
beg = beg ? beg + 1 : buf;
len = end - beg;
success_in_beg_and_len:;
- size_t off = beg - buf;
+ off = beg - buf;
*match_size = len;
ret_val = off;
diff --git a/src/kwset.c b/src/kwset.c
index 03520b6..b0c7446 100644
--- a/src/kwset.c
+++ b/src/kwset.c
@@ -162,6 +162,7 @@ kwsincr (kwset_t kwset, char const *text, size_t len)
installing new nodes when necessary. */
while (len--)
{
+ int depth = 1;
unsigned char uc = *--text;
unsigned char label = trans ? trans[uc] : uc;
@@ -173,7 +174,6 @@ kwsincr (kwset_t kwset, char const *text, size_t len)
enum { L, R } dirs[DEPTH_SIZE];
links[0] = (struct tree *) &trie->links;
dirs[0] = L;
- int depth = 1;
while (link && label != link->label)
{
@@ -392,10 +392,13 @@ treenext (struct tree const *tree, struct trie *next[])
void
kwsprep (kwset_t kwset)
{
+ struct trie *curr, *last;
char const *trans = kwset->trans;
int i;
unsigned char deltabuf[NCHAR];
unsigned char *delta = trans ? deltabuf : kwset->delta;
+ struct trie *nextbuf[NCHAR];
+ struct trie **next;
/* Initial values for the delta table; will be changed later. The
delta entry for a given character is the smallest depth of any
@@ -404,9 +407,10 @@ kwsprep (kwset_t kwset)
/* Traverse the nodes of the trie in level order, simultaneously
computing the delta table, failure function, and shift function. */
- struct trie *curr, *last;
for (curr = last = kwset->trie; curr; curr = curr->next)
{
+ struct trie *fail;
+
/* Enqueue the immediate descendants in the level order queue. */
enqueue (curr->links, &last);
@@ -421,7 +425,6 @@ kwsprep (kwset_t kwset)
/* Update the shifts at each node in the current node's chain
of fails back to the root. */
- struct trie *fail;
for (fail = curr->fail; fail; fail = fail->fail)
{
/* If the current node has some outgoing edge that the fail
@@ -451,8 +454,7 @@ kwsprep (kwset_t kwset)
/* Create a vector, indexed by character code, of the outgoing links
from the root node. */
- struct trie *nextbuf[NCHAR];
- struct trie **next = trans ? nextbuf : kwset->next;
+ next = trans ? nextbuf : kwset->next;
memset (next, 0, sizeof nextbuf);
treenext (kwset->trie->links, next);
if (trans)
@@ -463,6 +465,8 @@ kwsprep (kwset_t kwset)
of the hairy commentz-walter algorithm. */
if (kwset->words == 1)
{
+ char gc1;
+ int gc1help = -1;
/* Looking for just one string. Extract it from the trie. */
kwset->target = obstack_alloc (&kwset->obstack, kwset->mind);
for (i = kwset->mind - 1, curr = kwset->trie; i >= 0; --i)
@@ -484,11 +488,10 @@ kwsprep (kwset_t kwset)
}
}
- char gc1 = tr (trans, kwset->target[kwset->mind - 1]);
+ gc1 = tr (trans, kwset->target[kwset->mind - 1]);
/* Set GC1HELP according to whether exactly one, exactly two, or
three-or-more characters match GC1. */
- int gc1help = -1;
if (trans)
{
char const *equiv1 = memchr (trans, gc1, NCHAR);
@@ -570,13 +573,16 @@ bm_delta2_search (char const **tpp, char const *ep, char const *sp, int len,
static char const *
memchr_kwset (char const *s, size_t n, kwset_t kwset)
{
+ int small_heuristic = 2;
+ int small;
+ size_t ntrans;
+ char const *slim;
if (kwset->gc1help < 0)
return memchr (s, kwset->gc1, n);
- int small_heuristic = 2;
- int small = (- (uintptr_t) s % sizeof (long)
+ small = (- (uintptr_t) s % sizeof (long)
+ small_heuristic * sizeof (long));
- size_t ntrans = kwset->gc1help < NCHAR && small < n ? small : n;
- char const *slim = s + ntrans;
+ ntrans = kwset->gc1help < NCHAR && small < n ? small : n;
+ slim = s + ntrans;
for (; s < slim; s++)
if (kwset->trans[U(*s)] == kwset->gc1)
return s;
@@ -593,6 +599,7 @@ bmexec_trans (kwset_t kwset, char const *text, size_t size)
int d;
int len = kwset->mind;
char const *trans = kwset->trans;
+ char gc1, gc2;
if (len == 0)
return 0;
@@ -607,8 +614,8 @@ bmexec_trans (kwset_t kwset, char const *text, size_t size)
d1 = kwset->delta;
sp = kwset->target + len;
tp = text + len;
- char gc1 = kwset->gc1;
- char gc2 = kwset->gc2;
+ gc1 = kwset->gc1;
+ gc2 = kwset->gc2;
/* Significance of 12: 1 (initial offset) + 10 (skip loop) + 1 (md2). */
if (size > 12 * len)
@@ -630,12 +637,12 @@ bmexec_trans (kwset_t kwset, char const *text, size_t size)
d = d1[U(tp[-1])], tp += d;
if (d != 0)
{
+ int advance_heuristic = 16 * sizeof (long);
d = d1[U(tp[-1])], tp += d;
d = d1[U(tp[-1])], tp += d;
/* As a heuristic, prefer memchr to seeking by
delta1 when the latter doesn't advance much. */
- int advance_heuristic = 16 * sizeof (long);
if (advance_heuristic <= tp - tp0)
continue;
tp--;
diff --git a/src/searchutils.c b/src/searchutils.c
index 2eab3dc..15710cb 100644
--- a/src/searchutils.c
+++ b/src/searchutils.c
@@ -272,9 +272,10 @@ mb_goback (char const **mb_start, char const *cur, char const *end)
wint_t
mb_prev_wc (char const *buf, char const *cur, char const *end)
{
+ char const *p;
if (cur == buf)
return WEOF;
- char const *p = buf;
+ p = buf;
cur--;
cur -= mb_goback (&p, cur, end);
return mb_next_wc (cur, end);
--
2.7.0