libnss-cache: unbreak on musl

This commit is contained in:
Michael Aldridge 2019-07-26 00:19:49 -07:00 committed by Michael Aldridge
parent 98a944bd40
commit 67956ff2f8
2 changed files with 93 additions and 2 deletions

View file

@ -0,0 +1,92 @@
diff --git compat/getgrent_r.c compat/getgrent_r.c
index 1d20465..863413f 100644
--- compat/getgrent_r.c
+++ compat/getgrent_r.c
@@ -26,9 +26,9 @@
* Copyright © 2015 Kevin Bowling <k@kev009.com>
*/
-#include <sys/param.h>
-
-#ifdef BSD
+// This compat layer is only built for BSD, or Linux without the GNU C
+// Library.
+#if defined(BSD) || (defined(__linux__) && !defined(__GLIBC__))
#include <grp.h>
#include <stddef.h>
@@ -37,6 +37,16 @@
#include <errno.h>
#include <string.h>
+#if defined(BSD)
+#include <sys/param.h>
+#else
+// This branch is necessarily Linux and not GNU because of the checks
+// defined above that guard the rest of the compat layer. On Linux we
+// don't pull in param.h as it is very obsolete.
+#include <stdint.h>
+#define ALIGNBYTES _Alignof(max_align_t)
+#define ALIGN(p)(((uintptr_t)(p) + ALIGNBYTES & ~ALIGNBYTES))
+#endif // defined(BSD)
static unsigned atou(char **s)
{
unsigned x;
@@ -104,5 +114,4 @@ end:
if(rv) errno = rv;
return rv;
}
-
-#endif // ifdef BSD
+#endif //#if defined(BSD) || defined(__LINUX__) && !defined(__GLIBC__)
diff --git compat/getpwent_r.c compat/getpwent_r.c
index b1be6fc..de785a6 100644
--- compat/getpwent_r.c
+++ compat/getpwent_r.c
@@ -26,9 +26,9 @@
* Copyright © 2015 Kevin Bowling <k@kev009.com>
*/
-#include <sys/param.h>
-
-#ifdef BSD
+// This compat layer is only built for BSD, or Linux without the GNU C
+// Library.
+#if defined(BSD) || (defined(__linux__) && !defined(__GLIBC__))
#include <pwd.h>
#include <stdio.h>
@@ -83,5 +83,4 @@ int fgetpwent_r(FILE *f, struct passwd *pw, char *line, size_t size, struct pass
if (rv) errno = rv;
return rv;
}
-
-#endif // ifdef BSD
+#endif //#if defined(BSD) || defined(__LINUX__) && !defined(__GLIBC__)
diff --git nss_cache.c nss_cache.c
index 0cd113b..aabc0ef 100644
--- nss_cache.c
+++ nss_cache.c
@@ -730,7 +730,10 @@ enum nss_status _nss_cache_getgrnam_r(const char *name, struct group *result,
//
// Routines for shadow map defined here.
//
-#ifndef BSD
+#if defined(__LINUX__) && defined(__GLIBC__)
+// This is only built on GLIBC as caching the shadow file is generally
+// not permissable from the perspective of other libc's, so the
+// symbols are simply unused in those environments.
// _nss_cache_setspent_path()
// Helper function for testing
@@ -915,6 +918,8 @@ enum nss_status _nss_cache_getspnam_r(const char *name, struct spwd *result,
return ret;
}
-#else
+#endif
+
+#ifdef BSD
#include "bsdnss.c"
-#endif // ifndef BSD
+#endif // #if defined(__LINUX__) && defined(__GLIBC__)

View file

@ -1,7 +1,7 @@
# Template file for 'libnss-cache'
pkgname=libnss-cache
version=0.16
revision=1
revision=2
wrksrc=$pkgname-version-$version
build_style=gnu-makefile
make_use_env=1
@ -15,7 +15,6 @@ checksum=09099ce2a3becb9cc4c282f7809198ac9707929dbc767030e32da8b824110bfe
case "$XBPS_TARGET_MACHINE" in
*musl)
makedepends="musl-nscd-devel"
broken="Requires glibc reentrant extensions"
;;
esac