inadyn: update to 2.12.0
authorRosen Penev <rosenp@gmail.com>
Mon, 11 Nov 2024 00:16:21 +0000 (16:16 -0800)
committerRosen Penev <rosenp@gmail.com>
Tue, 12 Nov 2024 02:20:45 +0000 (18:20 -0800)
Backport patch fixing compilation with GCC14.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
net/inadyn/Makefile
net/inadyn/patches/010-strdupa.patch [new file with mode: 0644]

index 9cba4adcca3728c8cb1937d3a3ffb5929b0cd4d1..96340858f7b86839fafc8543046ab685f8dfe1fe 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=inadyn
-PKG_VERSION:=2.11.0
+PKG_VERSION:=2.12.0
 PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=https://github.com/troglobit/inadyn/releases/download/v$(PKG_VERSION)
-PKG_HASH:=9c8b2a425acb9681564e9fc25a319f2109c7d2ebe1ffe99b06d4a722efb6ecba
+PKG_HASH:=e64c4386b6f42bbace589b847f22823a755b59f14a277a5f556fef0d99069245
 
 PKG_MAINTAINER:=
 PKG_LICENSE:=GPL-2.0-or-later
@@ -47,6 +47,8 @@ CONFIGURE_ARGS += \
        --enable-openssl \
        --with-pic
 
+TARGET_CFLAGS += -D_GNU_SOURCE
+
 define Package/inadyn/install
        $(INSTALL_DIR) $(1)/usr/sbin
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/inadyn $(1)/usr/sbin/
diff --git a/net/inadyn/patches/010-strdupa.patch b/net/inadyn/patches/010-strdupa.patch
new file mode 100644 (file)
index 0000000..de7a0ae
--- /dev/null
@@ -0,0 +1,143 @@
+From b9edfbfb94b3582cf32dfc04e0dd867ecef2ba92 Mon Sep 17 00:00:00 2001
+From: Joachim Wiberg <troglobit@gmail.com>
+Date: Sat, 3 Aug 2024 13:25:39 +0200
+Subject: [PATCH] Refactor mkpath() to drop all uses of strdupa()
+
+Fixes #488
+
+Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
+---
+ include/Makefile.am |  2 +-
+ include/compat.h    |  4 ++--
+ include/strdupa.h   | 52 -----------------------------------------
+ src/makepath.c      | 56 ++++++++++++++++++++++++++++++---------------
+ src/os.c            |  2 +-
+ 5 files changed, 42 insertions(+), 74 deletions(-)
+ delete mode 100644 include/strdupa.h
+
+--- a/include/compat.h
++++ b/include/compat.h
+@@ -29,14 +29,14 @@
+ #include <unistd.h>
+ #include <sys/param.h> /* MAX(), isset(), setbit(), TRUE, FALSE, et consortes. :-) */
+ #include <sys/types.h>
+-#include "strdupa.h"
+ /* From The Practice of Programming, by Kernighan and Pike */
+ #ifndef NELEMS
+ #define NELEMS(array) (sizeof(array) / sizeof(array[0]))
+ #endif
+-int     mkpath     (char *dir, mode_t mode);
++int     mkpath     (const char *dir, mode_t mode);
++int     makepath   (const char *dir);
+ #ifndef pidfile
+ int     pidfile    (const char *basename);
+--- a/src/makepath.c
++++ b/src/makepath.c
+@@ -1,6 +1,6 @@
+ /* mkpath() -- Create all components leading up to a given directory
+  *
+- * Copyright (c) 2013-2021  Joachim Wiberg <troglobit@gmail.com>
++ * Copyright (c) 2013-2024  Joachim Wiberg <troglobit@gmail.com>
+  *
+  * Permission to use, copy, modify, and/or distribute this software for any
+  * purpose with or without fee is hereby granted, provided that the above
+@@ -16,11 +16,35 @@
+  */
+ #include <errno.h>
+-#include <libgen.h>
+-#include <sys/stat.h>
+-#include <sys/types.h>
++#include <string.h>           /* strdup(), strrchr() */
++#include <stdlib.h>           /* free() */
++#include <sys/stat.h>         /* mkdir() */
++
+ #include "compat.h"
++/* Recursively create directories */
++static int _mkpath(char *dir, mode_t mode)
++{
++      char *slash;
++
++      if (!mkdir(dir, mode) || errno == EEXIST)
++              return 0;
++
++      if (errno != ENOENT)
++              return -1;
++
++      slash = strrchr(dir, '/');
++      if (!slash)
++              return -1;
++
++      *slash = 0;
++      if (_mkpath(dir, mode) == -1)
++              return -1;
++
++      *slash = '/';
++      return mkdir(dir, mode);
++}
++
+ /**
+  * mkpath - Like makepath() but takes a mode_t argument
+  * @dir:  Directory to created, relative or absolute
+@@ -29,21 +53,24 @@
+  * Returns:
+  * POSIX OK(0) on success, otherwise -1 with @errno set.
+  */
+-int mkpath(char *dir, mode_t mode)
++int mkpath(const char *dir, mode_t mode)
+ {
+-      struct stat sb;
++      char *_dir;
++      int rc;
+       if (!dir) {
+               errno = EINVAL;
+               return 1;
+       }
+-      if (!stat(dir, &sb))
+-              return 0;
++      _dir = strdup(dir);
++      if (!_dir)
++              return -1;
+-      mkpath(dirname(strdupa(dir)), mode);
++      rc = _mkpath(_dir, mode);
++      free(_dir);
+-      return mkdir(dir, mode);
++      return rc;
+ }
+ /**
+@@ -56,14 +83,7 @@ int mkpath(char *dir, mode_t mode)
+  * fails allocating temporary memory.  For other error codes see the
+  * mkdir() syscall description.
+  */
+-int makepath(char *dir)
++int makepath(const char *dir)
+ {
+       return mkpath(dir, 0777);
+ }
+-
+-/**
+- * Local Variables:
+- *  indent-tabs-mode: t
+- *  c-file-style: "linux"
+- * End:
+- */
+--- a/src/os.c
++++ b/src/os.c
+@@ -266,7 +266,7 @@ int os_check_perms(void)
+                       }
+               }
+-              pidfile_dir = dirname(strdupa(pidfn));
++              pidfile_dir = dirname(pidfn);
+               if (access(pidfile_dir, F_OK)) {
+                       if (mkpath(pidfile_dir, 0755) && errno != EEXIST)
+                               logit(LOG_ERR, "No write permission to %s, aborting.", pidfile_dir);