~ruther/guix-local

5edd0370ee6a581573e298f883419f184fff1ae3 — Sören Tempel 4 months ago 812f41f
gnu: nvi: Fix segfault caused by implicit function declarations

* gnu/packages/patches/nvi-add-function-prototypes.patch: New patch.
* gnu/local.mk (dist_patch_DATA): Register the patch.
* gnu/packages/nvi.scm (nvi): Apply the patch.
[arguments]: remove -Wno-error=implicit-function-declaration.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
3 files changed, 89 insertions(+), 1 deletions(-)

M gnu/local.mk
M gnu/packages/nvi.scm
A gnu/packages/patches/nvi-add-function-prototypes.patch
M gnu/local.mk => gnu/local.mk +1 -0
@@ 1939,6 1939,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/nss-3.115-disable-broken-tests.patch     \
  %D%/packages/patches/nss-3.115-disable-pkix-ocsp-tests.patch  \
  %D%/packages/patches/ntp-fix-dereferencing-the-wrong-variable.patch   \
  %D%/packages/patches/nvi-add-function-prototypes.patch	\
  %D%/packages/patches/nvi-assume-preserve-path.patch		\
  %D%/packages/patches/nvi-dbpagesize-binpower.patch		\
  %D%/packages/patches/nvi-db4.patch				\

M gnu/packages/nvi.scm => gnu/packages/nvi.scm +1 -1
@@ 45,6 45,7 @@
          (base32 "0nbbs1inyrqds0ywn3ln5slv54v5zraq7lszkg8nsavv4kivhh9l"))
        (patches (search-patches "nvi-assume-preserve-path.patch"
                                 "nvi-dbpagesize-binpower.patch"
                                 "nvi-add-function-prototypes.patch"
                                 "nvi-db4.patch"))
        (modules '((guix build utils)))
        (snippet


@@ 81,7 82,6 @@
         ;; nvi's configure chokes on passing CFLAGS and ignores
         ;; CFLAGS set in the environment.
         (string-append "CFLAGS=-g -O2"
                        " -Wno-error=implicit-function-declaration"
                        " -Wno-error=incompatible-pointer-types"))
      #:phases
      #~(modify-phases %standard-phases

A gnu/packages/patches/nvi-add-function-prototypes.patch => gnu/packages/patches/nvi-add-function-prototypes.patch +87 -0
@@ 0,0 1,87 @@
From: Michael Hudson-Doyle <michael.hudson@ubuntu.com>
Date: Thu, 11 Apr 2024 11:18:39 +0200
Subject: Add function prototypes to fix implicit function declaration errors

Reviewed-By: Tobias Heider <me@tobhe.de>
Bug-Debian: https://bugs.debian.org/1066285
---
 cl/cl.h            | 5 +++++
 cl/cl_funcs.c      | 6 ++++++
 common/conv.h      | 3 +++
 common/multibyte.h | 6 ++++++
 dist/configure     | 1 +
 5 files changed, 21 insertions(+)

diff --git a/cl/cl.h b/cl/cl.h
index 3d71410..4ff232d 100644
--- a/cl/cl.h
+++ b/cl/cl.h
@@ -26,6 +26,11 @@
 #endif
 #endif
 
+/*
+ * for setupterm()
+ */
+#include <term.h>
+
 typedef struct _cl_private {
 	char	 ibuf[256];	/* Input keys. */
 
diff --git a/cl/cl_funcs.c b/cl/cl_funcs.c
index c5fc597..b6174ef 100644
--- a/cl/cl_funcs.c
+++ b/cl/cl_funcs.c
@@ -31,6 +31,12 @@ static const char sccsid[] = "$Id: cl_funcs.c,v 10.72 2002/03/02 23:18:33 skimo
 #include "../vi/vi.h"
 #include "cl.h"
 
+/*
+ * This is declared by ncurses.h, but only if _XOPEN_SOURCE is set and lots of
+ * other things break if we define that.
+ */
+extern int waddnwstr (WINDOW *,const wchar_t *,int);
+
 static void cl_rdiv __P((SCR *));
 
 static int 
diff --git a/common/conv.h b/common/conv.h
index 76b06c1..a7675c4 100644
--- a/common/conv.h
+++ b/common/conv.h
@@ -21,3 +21,6 @@ struct _conv {
 	char2wchar_t	input2int;
 	wchar2char_t	int2disp;
 };
+
+extern int conv_enc (SCR *sp, int option, char *enc);
+extern void conv_init (SCR *orig, SCR *sp);
diff --git a/common/multibyte.h b/common/multibyte.h
index 820f4ec..2484521 100644
--- a/common/multibyte.h
+++ b/common/multibyte.h
@@ -5,6 +5,12 @@
 #include <wchar.h>
 #include <wctype.h>
 
+/*
+ * This is declared by wchar.h, but only if _XOPEN_SOURCE is set and lots of
+ * other things break if we define that.
+ */
+extern int wcwidth (wchar_t c);
+
 typedef	wchar_t		RCHAR_T;
 #define RCHAR_T_MAX	((1 << 24)-1)
 typedef	wchar_t		CHAR_T;
diff --git a/dist/configure b/dist/configure
index b23e167..d7fb54f 100755
--- a/dist/configure
+++ b/dist/configure
@@ -27385,6 +27385,7 @@ cat confdefs.h >>conftest.$ac_ext
 cat >>conftest.$ac_ext <<_ACEOF
 /* end confdefs.h.  */
 #include <$CURSHEADER>
+#include <term.h>
 int
 main ()
 {