acl: fix compilation with musl 1.2.4
authorTianling Shen <cnsztl@immortalwrt.org>
Tue, 16 May 2023 09:17:06 +0000 (17:17 +0800)
committerTianling Shen <cnsztl@gmail.com>
Wed, 17 May 2023 05:43:13 +0000 (13:43 +0800)
musl 1.2.4 deprecated legacy "LFS64" ("large file support") interfaces so
just having _GNU_SOURCE defined is not enough anymore.

Backport an upstream fix to replace these old functions.

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
utils/acl/Makefile
utils/acl/patches/103-chacl-Use-portable-version-of-dirent-and-readdir.patch [new file with mode: 0644]

index 8fa85ddc2bd5ac347419f4f5bc17cec8f9581e06..69caa54ed6f2109d236b2462b893566faaa5437e 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=acl
 PKG_VERSION:=2.3.1
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://git.savannah.nongnu.org/cgit/acl.git/snapshot
diff --git a/utils/acl/patches/103-chacl-Use-portable-version-of-dirent-and-readdir.patch b/utils/acl/patches/103-chacl-Use-portable-version-of-dirent-and-readdir.patch
new file mode 100644 (file)
index 0000000..66bd86c
--- /dev/null
@@ -0,0 +1,33 @@
+From 2b42f64737adf6a2ddd491213580d6e9cdd2f5af Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 10 Nov 2022 18:04:15 -0800
+Subject: [PATCH] chacl: Use portable version of dirent and readdir
+
+Using 64bit versions on 32bit architectures should be enabled with
+--enable-largefile, this makes it portable across musl and glibc
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tools/chacl.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/tools/chacl.c
++++ b/tools/chacl.c
+@@ -320,7 +320,7 @@ walk_dir(acl_t acl, acl_t dacl, const ch
+ {
+       int failed = 0;
+       DIR *dir;
+-      struct dirent64 *d;
++      struct dirent *d;
+       char *name;
+       if ((dir = opendir(fname)) == NULL) {
+@@ -332,7 +332,7 @@ walk_dir(acl_t acl, acl_t dacl, const ch
+               return(0);      /* got a file, not an error */
+       }
+-      while ((d = readdir64(dir)) != NULL) {
++      while ((d = readdir(dir)) != NULL) {
+               /* skip "." and ".." entries */
+               if (strcmp(d->d_name, ".") == 0 || strcmp(d->d_name, "..") == 0)
+                       continue;