void-packages/srcpkgs/libnss-cache/patches/0001-Add-compatibility-for-...

93 lines
2.5 KiB
Diff

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__)