From 4af18dcace3879ac0b209e0a00babce45373568e Mon Sep 17 00:00:00 2001
From: Paul Eggert
Date: Mon, 21 Apr 2014 07:27:14 -0700
Subject: [PATCH] dfa: minor improvements to previous patch
* src/dfa.c (dfamust): Use &=, not if-then.
* src/dfa.h (struct dfamust):
* src/dfasearch.c (begline, hwsmusts): Use bool for boolean.
* src/dfasearch.c (kwsmusts):
* src/kwsearch.c (Fcompile): Prefer decls after statements.
* src/dfasearch.c (kwsmusts): Avoid conditional branch.
* src/kwsearch.c (Fcompile): Unify the two calls to kwsincr.
---
src/dfa.c | 6 ++----
src/dfa.h | 7 ++++---
src/dfasearch.c | 20 ++++++++------------
src/kwsearch.c | 17 ++++++++++-------
4 files changed, 24 insertions(+), 26 deletions(-)
diff --git a/src/dfa.c b/src/dfa.c
index 0a6f061..65fc03d 100644
--- a/src/dfa.c
+++ b/src/dfa.c
@@ -3916,10 +3916,8 @@ dfamust (struct dfa *d)
/* Guaranteed to be. Unlikely, but ... */
if (!STREQ (lmp->is, rmp->is))
lmp->is[0] = '\0';
- if (lmp->begline)
- lmp->begline = rmp->begline;
- if (lmp->endline)
- lmp->endline = rmp->endline;
+ lmp->begline &= rmp->begline;
+ lmp->endline &= rmp->endline;
/* Left side--easy */
i = 0;
while (lmp->left[i] != '\0' && lmp->left[i] == rmp->left[i])
diff --git a/src/dfa.h b/src/dfa.h
index 3829e6a..60aff11 100644
--- a/src/dfa.h
+++ b/src/dfa.h
@@ -19,15 +19,16 @@
/* Written June, 1988 by Mike Haertel */
#include
+#include
#include
/* Element of a list of strings, at least one of which is known to
appear in any R.E. matching the DFA. */
struct dfamust
{
- int exact;
- int begline;
- int endline;
+ bool exact;
+ bool begline;
+ bool endline;
char *must;
struct dfamust *next;
};
diff --git a/src/dfasearch.c b/src/dfasearch.c
index 34c4505..dc76397 100644
--- a/src/dfasearch.c
+++ b/src/dfasearch.c
@@ -51,7 +51,7 @@ static size_t pcount;
call the regexp matcher at all. */
static size_t kwset_exact_matches;
-static int begline;
+static bool begline;
void
dfaerror (char const *mesg)
@@ -87,25 +87,21 @@ kwsmusts (void)
if (dm)
{
kwsinit (&kwset);
- begline = 0;
/* First, we compile in the substrings known to be exact
matches. The kwset matcher will return the index
of the matching string that it chooses. */
for (; dm; dm = dm->next)
{
- char *must, *mp;
- size_t old_len, new_len;
if (!dm->exact)
continue;
++kwset_exact_matches;
- old_len = strlen (dm->must);
- new_len = old_len + dm->begline + dm->endline;
- must = mp = xmalloc (new_len);
- if (dm->begline)
- {
- (mp++)[0] = eolbyte;
- begline = 1;
- }
+ 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;
+ *mp = eolbyte;
+ mp += dm->begline;
+ begline |= dm->begline;
memcpy (mp, dm->must, old_len);
if (dm->endline)
mp[old_len] = eolbyte;
diff --git a/src/kwsearch.c b/src/kwsearch.c
index 9904bfe..7c64c86 100644
--- a/src/kwsearch.c
+++ b/src/kwsearch.c
@@ -57,16 +57,19 @@ Fcompile (char const *pattern, size_t size)
total = 0;
}
+ char *buf = NULL;
if (match_lines)
{
- char *buf = xmalloc (len + 2);
- memcpy (&buf[1], p, len);
- buf[0] = buf[len + 1] = eolbyte;
- kwsincr (kwset, buf, len + 2);
- free (buf);
+ buf = xmalloc (len + 2);
+ buf[0] = eolbyte;
+ memcpy (buf + 1, p, len);
+ buf[len + 1] = eolbyte;
+ p = buf;
+ len += 2;
}
- else
- kwsincr (kwset, p, len);
+ kwsincr (kwset, p, len);
+ free (buf);
+
p = sep;
}
while (p);
--
1.9.0