summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2019-12-19 14:35:59 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2019-12-19 19:20:53 -0800
commit6dabeec02d67d824997ce20d186e2d8ee5d91459 (patch)
treec33f3f1327c40c5a81bb484071cae48c6fedfee1
parent5b570e9c35cb5808ca99b455a30c84c93cc59e51 (diff)
downloadgnulib-6dabeec02d67d824997ce20d186e2d8ee5d91459.tar.gz
dfa: struct dfamust now uses flexible array
* lib/dfa.c: Include flexmember.h. (dfamust, dfamustfree): Adjust to struct dfamust change. This saves a call to malloc+free. * lib/dfa.h (struct dfamust): Make the final member a flexible array member. * modules/dfa (Depends-on): Add flexmember.
-rw-r--r--ChangeLog8
-rw-r--r--lib/dfa.c7
-rw-r--r--lib/dfa.h2
-rw-r--r--modules/dfa1
4 files changed, 14 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 6d0120331c..b58c7b851f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2019-12-19 Paul Eggert <eggert@cs.ucla.edu>
+ dfa: struct dfamust now uses flexible array
+ * lib/dfa.c: Include flexmember.h.
+ (dfamust, dfamustfree): Adjust to struct dfamust change.
+ This saves a call to malloc+free.
+ * lib/dfa.h (struct dfamust): Make the final member a
+ flexible array member.
+ * modules/dfa (Depends-on): Add flexmember.
+
dfa: fast->small for array elements
* lib/dfa.c (charclass_word): Use uint_least64_t not uint_fast64_t,
since this type is used in arrays. This change is more for
diff --git a/lib/dfa.c b/lib/dfa.c
index a7cd3e84fb..734e74e29f 100644
--- a/lib/dfa.c
+++ b/lib/dfa.c
@@ -24,6 +24,8 @@
#include "dfa.h"
+#include "flexmember.h"
+
#include <assert.h>
#include <ctype.h>
#include <stdint.h>
@@ -4272,11 +4274,11 @@ dfamust (struct dfa const *d)
struct dfamust *dm = NULL;
if (*result)
{
- dm = xmalloc (sizeof *dm);
+ dm = xmalloc (FLEXSIZEOF (struct dfamust, must, strlen (result) + 1));
dm->exact = exact;
dm->begline = begline;
dm->endline = endline;
- dm->must = xstrdup (result);
+ strcpy (dm->must, result);
}
while (mp)
@@ -4292,7 +4294,6 @@ dfamust (struct dfa const *d)
void
dfamustfree (struct dfamust *dm)
{
- free (dm->must);
free (dm);
}
diff --git a/lib/dfa.h b/lib/dfa.h
index 0da597fc9f..56e2ee000f 100644
--- a/lib/dfa.h
+++ b/lib/dfa.h
@@ -31,7 +31,7 @@ struct dfamust
bool exact;
bool begline;
bool endline;
- char *must;
+ char must[FLEXIBLE_ARRAY_MEMBER];
};
/* The dfa structure. It is completely opaque. */
diff --git a/modules/dfa b/modules/dfa
index ee5bec85d8..f1b00fe1ed 100644
--- a/modules/dfa
+++ b/modules/dfa
@@ -11,6 +11,7 @@ Depends-on:
assert
c99
ctype
+flexmember
intprops
isblank
locale