Subject: [INSTALLED PATCH 2/2] sort: port to strict C + valgrind

From: Paul Eggert <[email-masked]>
Date: Wed, 7 Sep 2016 19:53:09 -0700

* bootstrap.conf (gnulib_modules): Add flexmember.
* src/sort.c: Include flexmember.h.
(struct tempnode): Make the last member flexible.
(create_temp_file): Port to strict C11/C99 rules for
allocation alignment with flexible array members.
---
 bootstrap.conf | 1 +
 src/sort.c     | 5 +++--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/bootstrap.conf b/bootstrap.conf
index 985018f..8a0ff31 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -88,6 +88,7 @@ gnulib_modules="
   filemode
   filenamecat
   filevercmp
+  flexmember
   fnmatch-gnu
   fopen-safer
   fprintftime
diff --git a/src/sort.c b/src/sort.c
index 0795475..b30f5d0 100644
--- a/src/sort.c
+++ b/src/sort.c
@@ -34,6 +34,7 @@
 #include "error.h"
 #include "fadvise.h"
 #include "filevercmp.h"
+#include "flexmember.h"
 #include "hard-locale.h"
 #include "hash.h"
 #include "heap.h"
@@ -667,7 +668,7 @@ struct tempnode
   struct tempnode *volatile next;
   pid_t pid;     /* The subprocess PID; undefined if state == UNCOMPRESSED.  */
   char state;
-  char name[1];  /* Actual size is 1 + file name length.  */
+  char name[FLEXIBLE_ARRAY_MEMBER];
 };
 static struct tempnode *volatile temphead;
 static struct tempnode *volatile *temptail = &temphead;
@@ -855,7 +856,7 @@ create_temp_file (int *pfd, bool survive_fd_exhaustion)
   char const *temp_dir = temp_dirs[temp_dir_index];
   size_t len = strlen (temp_dir);
   struct tempnode *node =
-    xmalloc (offsetof (struct tempnode, name) + len + sizeof slashbase);
+    xmalloc (FLEXSIZEOF (struct tempnode, name, len + sizeof slashbase));
   char *file = node->name;
   struct cs_status cs;
 
-- 
2.7.4