[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: libc6! Cross compilation issues

> Hi,
> I stumbled across the following definitions in <sys/param.h>, which are
> defined in Linux, but not in Hurd:
> /* BSD names for some <limits.h> values.  */
> #define NBBY            CHAR_BIT
> #ifndef NGROUPS
> #define NGROUPS         NGROUPS_MAX
> #endif
> #define MAXSYMLINKS     5
> #define CANBSIZ         MAX_CANON
> #define NCARGS          ARG_MAX
> #define MAXPATHLEN      PATH_MAX
> #define NOFILE          OPEN_MAX

The current hurd <sys/params.h> does define NBBY, NGROUPS, MAXSYMLINKS,
CANBSIZ, and NCARGS.  The NCARGS and NGROUPS definitions are fictitious,
since there are no actual limits on those things.

> Especially the last two are used frequently. 

No program that uses them unconditionally complies to 1003.1-1996.

> Notice that neither PATH_MAX nor OPEN_MAX are defined in Hurd, too.
> Why?

Because there are no limits.  Aside from runtime memory availability, there
is no limit whatsoever on the length of a file name imposed by the system
architecture (individual filesystems may have limits, which pathconf
reports).  The only limit on open file descriptors is the soft resource
limit settable with setrlimit(RLIM_NOFILE).

A POSIX-compliant program takes absence of these definitions to mean there
is no limit determinable at compile-time, and uses sysconf or pathconf as
appropriate to ascertain the run-time limits; in most cases, they can
return -1 to indicate there is no ascertainable limit.  When that is true
on the Hurd, that is what it returns.

I can dig the standard out and quote chapter and verse if it would help.

Reply to: