From 6dabeec02d67d824997ce20d186e2d8ee5d91459 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 19 Dec 2019 14:35:59 -0800 Subject: [PATCH] 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. --- ChangeLog | 8 ++++++++ lib/dfa.c | 7 ++++--- lib/dfa.h | 2 +- modules/dfa | 1 + 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 + 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 #include #include @@ -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 -- 2.39.5