Use sysconf(_SC_SYMLOOP_MAX) instead of MAXSYMLINKS. If sysconf

returns an error, fall back to MAXSYMLINKS on platforms that
define it.  Fixes build on Hurd.  Patch from Justus Winter and
Debian.
This commit is contained in:
Petter Reinholdtsen 2014-01-28 10:13:10 +00:00
parent c26aaa4410
commit 834bcebcaf
2 changed files with 18 additions and 1 deletions

View File

@ -67,6 +67,10 @@ sysvinit (2.89dsf) UNRELEASED; urgency=low
* Define _XOPEN_SOURCE when building to get crypt() from <unistd.h> * Define _XOPEN_SOURCE when building to get crypt() from <unistd.h>
instead of using <crypt.h> in sulogin.c, to get the source building instead of using <crypt.h> in sulogin.c, to get the source building
with the musl C library. with the musl C library.
* Use sysconf(_SC_SYMLOOP_MAX) instead of MAXSYMLINKS. If sysconf
returns an error, fall back to MAXSYMLINKS on platforms that
define it. Fixes build on Hurd. Patch from Justus Winter and
Debian.
-- Petter Reinholdtsen <pere@hungry.com> Sun Apr 11 11:28:55 CEST 2010 -- Petter Reinholdtsen <pere@hungry.com> Sun Apr 11 11:28:55 CEST 2010

View File

@ -376,6 +376,19 @@ out:
return 0; return 0;
} }
/*
* Get the maximal number of symlinks to follow.
*/
static int maxsymlinks(void)
{
int v = sysconf(_SC_SYMLOOP_MAX);
#ifdef MAXSYMLINKS
if (v == -1)
return MAXSYMLINKS;
#endif
return v;
}
/* /*
* Check path is located on a network based partition. * Check path is located on a network based partition.
*/ */
@ -383,7 +396,7 @@ int check4nfs(const char * path, char * real)
{ {
char buf[PATH_MAX+1]; char buf[PATH_MAX+1];
const char *curr; const char *curr;
int deep = MAXSYMLINKS; int deep = maxsymlinks();
if (!nlist) return 0; if (!nlist) return 0;