Loading...
gen/FreeBSD/sysconf.c Libc-1725.40.4 Libc-583
--- Libc/Libc-1725.40.4/gen/FreeBSD/sysconf.c
+++ Libc/Libc-583/gen/FreeBSD/sysconf.c
@@ -13,6 +13,10 @@
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
  * 4. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
@@ -34,15 +38,13 @@
 static char sccsid[] = "@(#)sysconf.c	8.2 (Berkeley) 3/20/94";
 #endif /* LIBC_SCCS and not lint */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: lib/libc/gen/sysconf.c r168718 $");
+__FBSDID("$FreeBSD: src/lib/libc/gen/sysconf.c,v 1.20 2002/11/17 08:54:29 dougb Exp $");
 
 #include <sys/param.h>
 #include <sys/time.h>
 #include <sys/sysctl.h>
 #include <sys/resource.h>
 #include <sys/socket.h>
-#include <sys/aio.h>
-#include <sys/semaphore.h>
 
 #include <errno.h>
 #include <limits.h>
@@ -51,8 +53,8 @@
 #include <time.h>
 #include <unistd.h>
 
-#include "../../stdlib/FreeBSD/atexit.h"
-#include "../../stdtime/FreeBSD/tzfile.h"
+#include "../stdlib/atexit.h"
+#include "../stdtime/tzfile.h"
 
 #define	_PATH_ZONEINFO	TZDIR	/* from tzfile.h */
 
@@ -69,15 +71,16 @@
  * less useful than returning up-to-date values, however.
  */
 long
-sysconf(int name)
+sysconf(name)
+	int name;
 {
 	struct rlimit rl;
-	quad_t qdvalue;	/* for kern.sysv.shmmin */
 	size_t len;
-	int mib[3], sverrno, value;
-	long lvalue, defaultresult;
+	int mib[2], sverrno, value;
+	long defaultresult;
 	const char *path;
 
+	len = sizeof(value);
 	defaultresult = -1;
 
 	switch (name) {
@@ -105,36 +108,13 @@
 	case _SC_STREAM_MAX:	/* assume fds run out before memory does */
 		if (getrlimit(RLIMIT_NOFILE, &rl) != 0)
 			return (-1);
-#if __LP64__
-		/*
-		 * In 64 bit world, sysconf is able to correctly represent
-		 * rlim_t values (8 bytes).
-		 */
-		if (rl.rlim_cur > RLIM_INFINITY)
+		if (rl.rlim_cur == RLIM_INFINITY)
 			return (-1);
 		if (rl.rlim_cur > LONG_MAX) {
 			errno = EOVERFLOW;
 			return (-1);
 		}
-		lvalue = rl.rlim_cur;
-#else
-		/*
-		 * In 32 bit world (watches), sysconf falls back to the
-		 * old behavior: use (int) OPEN_MAX as max limit.  Ideally
-		 * we would use maxfilesperproc as max limit, which is a
-		 * system value adjusted by the kernel based on available
-		 * RAM size. This value defaults to OPEN_MAX for systems
-		 * with less than 8G of RAM.  So we use OPEN_MAX (defined
-		 * in sys/syslimits.h) as max limit here in case
-		 * applications with strict sandbox rules prevent libc
-		 * from reading maxfilesperproc via sysctl.
-		 */
-		if (rl.rlim_cur > OPEN_MAX)
-			lvalue = OPEN_MAX;
-		else
-			lvalue = (long)rl.rlim_cur;
-#endif
-		return lvalue;
+		return ((long)rl.rlim_cur);
 	case _SC_JOB_CONTROL:
 		return (_POSIX_JOB_CONTROL);
 	case _SC_SAVED_IDS:
@@ -190,11 +170,11 @@
 do_NAME_MAX:
 		sverrno = errno;
 		errno = 0;
-		lvalue = pathconf(path, _PC_NAME_MAX);
-		if (lvalue == -1 && errno != 0)
+		value = pathconf(path, _PC_NAME_MAX);
+		if (value == -1 && errno != 0)
 			return (-1);
 		errno = sverrno;
-		return (lvalue);
+		return (value);
 
 	case _SC_ASYNCHRONOUS_IO:
 #if _POSIX_ASYNCHRONOUS_IO == 0
@@ -274,105 +254,55 @@
 		return (_POSIX_TIMERS);
 #endif
 	case _SC_AIO_LISTIO_MAX:
-#if defined(CTL_P1003_1B) && defined(CTL_P1003_1B_AIO_LISTIO_MAX)
 		mib[0] = CTL_P1003_1B;
 		mib[1] = CTL_P1003_1B_AIO_LISTIO_MAX;
-#else
-		mib[0] = CTL_KERN;;
-		mib[1] = KERN_AIOMAX;
-#endif
 		break;
 	case _SC_AIO_MAX:
-#if defined(CTL_P1003_1B) && defined(CTL_P1003_1B_AIO_MAX)
 		mib[0] = CTL_P1003_1B;
 		mib[1] = CTL_P1003_1B_AIO_MAX;
-#else
-		mib[0] = CTL_KERN;;
-		mib[1] = KERN_AIOMAX;
-#endif
 		break;
 	case _SC_AIO_PRIO_DELTA_MAX:
-#if defined(CTL_P1003_1B) && defined(CTL_P1003_1B_AIO_PRIO_DELTA_MAX)
 		mib[0] = CTL_P1003_1B;
 		mib[1] = CTL_P1003_1B_AIO_PRIO_DELTA_MAX;
 		break;
-#else
-		return (-1);
-#endif
 	case _SC_DELAYTIMER_MAX:
-#if defined(CTL_P1003_1B) && defined(CTL_P1003_1B_DELAYTIMER_MAX)
 		mib[0] = CTL_P1003_1B;
 		mib[1] = CTL_P1003_1B_DELAYTIMER_MAX;
 		goto yesno;
-#else
-		return (-1);
-#endif
 	case _SC_MQ_OPEN_MAX:
-#if defined(CTL_P1003_1B) && defined(CTL_P1003_1B_MQ_OPEN_MAX)
 		mib[0] = CTL_P1003_1B;
 		mib[1] = CTL_P1003_1B_MQ_OPEN_MAX;
 		goto yesno;
-#else
-		return (-1);
-#endif
 	case _SC_PAGESIZE:
 		defaultresult = getpagesize();
-#if defined(CTL_P1003_1B) && defined(CTL_P1003_1B_PAGESIZE)
 		mib[0] = CTL_P1003_1B;
 		mib[1] = CTL_P1003_1B_PAGESIZE;
 		goto yesno;
-#else
-		return defaultresult;
-#endif
 	case _SC_RTSIG_MAX:
-#if defined(CTL_P1003_1B) && defined(CTL_P1003_1B_RTSIG_MAX)
 		mib[0] = CTL_P1003_1B;
 		mib[1] = CTL_P1003_1B_RTSIG_MAX;
 		goto yesno;
-#else
-		return (-1);
-#endif
 	case _SC_SEM_NSEMS_MAX:
-#if defined(CTL_P1003_1B) && defined(CTL_P1003_1B_RTSIG_MAX)
 		mib[0] = CTL_P1003_1B;
 		mib[1] = CTL_P1003_1B_SEM_NSEMS_MAX;
 		goto yesno;
-#else
-		len = sizeof(value);
-		return (sysctlbyname("kern.sysv.semmns", &value, &len, NULL, 0) == -1 ? -1 : value);
-#endif
-
 	case _SC_SEM_VALUE_MAX:
-#if SEM_VALUE_MAX == 0
 		mib[0] = CTL_P1003_1B;
 		mib[1] = CTL_P1003_1B_SEM_VALUE_MAX;
 		goto yesno;
-#else
-		return (SEM_VALUE_MAX);
-#endif
 	case _SC_SIGQUEUE_MAX:
-#if defined(CTL_P1003_1B) && defined(CTL_P1003_1B_SIGQUEUE_MAX)
 		mib[0] = CTL_P1003_1B;
 		mib[1] = CTL_P1003_1B_SIGQUEUE_MAX;
 		goto yesno;
-#else
-		return (-1);
-#endif
 	case _SC_TIMER_MAX:
-#if defined(CTL_P1003_1B) && defined(CTL_P1003_1B_TIMER_MAX)
 		mib[0] = CTL_P1003_1B;
 		mib[1] = CTL_P1003_1B_TIMER_MAX;
-#else
-		return (-1);
-#endif
-
-yesno:
-		len = sizeof(value);
-		if (sysctl(mib, 2, &value, &len, NULL, 0) == -1)
+
+yesno:		if (sysctl(mib, 2, &value, &len, NULL, 0) == -1)
 			return (-1);
 		if (value == 0)
 			return (defaultresult);
-		return ((long)value);
+		return (value);
 
 	case _SC_2_PBS:
 	case _SC_2_PBS_ACCOUNTING:
@@ -418,12 +348,18 @@
 #else
 		return (_POSIX_CPUTIME);
 #endif
+#ifdef notdef
 	case _SC_FILE_LOCKING:
+		/*
+		 * XXX - The standard doesn't tell us how to define
+		 * _POSIX_FILE_LOCKING, so we can't answer this one.
+		 */
+#endif
+#if _POSIX_THREAD_SAFE_FUNCTIONS > -1
 	case _SC_GETGR_R_SIZE_MAX:
-/*		return sizeof(group) + group_name_max + group_passwd_max + max_group_member*(MAXLOGNAME+1); */
-		return 4096;	/* INT_MAX is too big for Perl */
 	case _SC_GETPW_R_SIZE_MAX:
-		return 4096;
+#error "somebody needs to implement this"
+#endif
 	case _SC_HOST_NAME_MAX:
 		return (MAXHOSTNAMELEN - 1); /* does not include \0 */
 	case _SC_LOGIN_NAME_MAX:
@@ -434,8 +370,10 @@
 #else
 		return (_POSIX_MONOTONIC_CLOCK);
 #endif
+#if _POSIX_MESSAGE_PASSING > -1
 	case _SC_MQ_PRIO_MAX:
-		return (-1);
+		return (MQ_PRIO_MAX);
+#endif
 	case _SC_READER_WRITER_LOCKS:
 		return (_POSIX_READER_WRITER_LOCKS);
 	case _SC_REGEXP:
@@ -472,16 +410,10 @@
 		return (_POSIX_THREAD_PROCESS_SHARED);
 	case _SC_THREAD_SAFE_FUNCTIONS:
 		return (_POSIX_THREAD_SAFE_FUNCTIONS);
-	case _SC_THREAD_SPORADIC_SERVER:
-		return (_POSIX_THREAD_SPORADIC_SERVER);
 	case _SC_THREAD_STACK_MIN:
 		return (PTHREAD_STACK_MIN);
 	case _SC_THREAD_THREADS_MAX:
-#ifdef PTHREAD_THREADS_MAX
 		return (PTHREAD_THREADS_MAX); /* XXX wrong type! */
-#else
-		return (-1);
-#endif
 	case _SC_TIMEOUTS:
 		return (_POSIX_TIMEOUTS);
 	case _SC_THREADS:
@@ -493,14 +425,16 @@
 #else
 		return (_POSIX_TRACE);
 #endif
+#if _POSIX_TRACE > -1
 	case _SC_TRACE_EVENT_FILTER:
 		return (_POSIX_TRACE_EVENT_FILTER);
 	case _SC_TRACE_INHERIT:
 		return (_POSIX_TRACE_INHERIT);
 	case _SC_TRACE_LOG:
 		return (_POSIX_TRACE_LOG);
+#endif
 	case _SC_TTY_NAME_MAX:
-		path = "/"; // should be _PATH_DEV (PR-3624562)
+		path = _PATH_DEV;
 		goto do_NAME_MAX;
 	case _SC_TYPED_MEMORY_OBJECTS:
 #if _POSIX_TYPED_MEMORY_OBJECTS == 0
@@ -557,15 +491,11 @@
 		return (_V6_LPBIG_OFFBIG);
 #endif
 	case _SC_ATEXIT_MAX:
-		return (INT_MAX);	/* unlimited */
+		return (ATEXIT_SIZE);
 	case _SC_IOV_MAX:
-#ifdef KERN_IOV_MAX
 		mib[0] = CTL_KERN;
 		mib[1] = KERN_IOV_MAX;
 		break;
-#else
-		return (IOV_MAX);
-#endif
 	case _SC_XOPEN_CRYPT:
 		return (_XOPEN_CRYPT);
 	case _SC_XOPEN_ENH_I18N:
@@ -601,8 +531,7 @@
 #endif
 	case _SC_XOPEN_SHM:
 		sverrno = errno;
-		len = sizeof(qdvalue);
-		if (sysctlbyname("kern.sysv.shmmin", &qdvalue, &len, NULL, 
+		if (sysctlbyname("kern.ipc.shmmin", &value, &len, NULL, 
 		    0) == -1) {
 			errno = sverrno;
 			return (-1);
@@ -639,69 +568,15 @@
 		return (_POSIX_IPV6);
 #endif
 
-#ifdef _SC_NPROCESSORS_CONF
 	case _SC_NPROCESSORS_CONF:
-#endif
-#ifdef _SC_NPROCESSORS_ONLN
 	case _SC_NPROCESSORS_ONLN:
-#endif
-#if defined(_SC_NPROCESSORS_CONF) || defined(_SC_NPROCESSORS_ONLN)
 		mib[0] = CTL_HW;
 		mib[1] = HW_NCPU;
 		break;
-#endif
-	case _SC_XBS5_ILP32_OFF32:
-		return (_XBS5_ILP32_OFF32);
-	case _SC_XBS5_ILP32_OFFBIG:
-		return (_XBS5_ILP32_OFFBIG);
-	case _SC_XBS5_LP64_OFF64:
-		return (_XBS5_LP64_OFF64);
-	case _SC_XBS5_LPBIG_OFFBIG:
-		return (_XBS5_LPBIG_OFFBIG);
-	case _SC_SS_REPL_MAX:
-		return (_POSIX_SS_REPL_MAX);
-	case _SC_TRACE_EVENT_NAME_MAX:
-		return (_POSIX_TRACE_EVENT_NAME_MAX);
-	case _SC_TRACE_NAME_MAX:
-		return (_POSIX_TRACE_NAME_MAX);
-	case _SC_TRACE_SYS_MAX:
-		return (_POSIX_TRACE_SYS_MAX);
-	case _SC_TRACE_USER_EVENT_MAX:
-		return (_POSIX_TRACE_USER_EVENT_MAX);
-	case _SC_PASS_MAX:
-		return (PASS_MAX);
-
-#ifdef _SC_PHYS_PAGES
-	case _SC_PHYS_PAGES:
-#ifdef __APPLE__
-		{
-			long memsize;
-			long pagesize;
-
-			len = sizeof(memsize);
-			if (sysctlbyname("hw.memsize", &memsize, &len, NULL, 0) == -1)
-				return (-1);
-
-			len = sizeof(pagesize);
-			if (sysctlbyname("hw.pagesize", &pagesize, &len, NULL, 0) == -1)
-				return (-1);
-
-			return (memsize / pagesize);
-		}
-#else
-		len = sizeof(lvalue);
-		if (sysctlbyname("hw.availpages", &lvalue, &len, NULL, 0) == -1)
-			return (-1);
-		return (lvalue);
-#endif
-#endif
 
 	default:
 		errno = EINVAL;
 		return (-1);
 	}
-	len = sizeof(value);
-	if (sysctl(mib, 2, &value, &len, NULL, 0) == -1)
-		value = -1;
-	return ((long)value);
+	return (sysctl(mib, 2, &value, &len, NULL, 0) == -1 ? -1 : value);
 }