Loading...
--- 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);
}