93 lines
2.5 KiB
Diff
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__)
|