|
Packit |
6c4009 |
#include <stdbool.h>
|
|
Packit |
6c4009 |
#include <stdio.h>
|
|
Packit |
6c4009 |
#include <unistd.h>
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
static struct
|
|
Packit |
6c4009 |
{
|
|
Packit |
6c4009 |
long int _P_val;
|
|
Packit |
6c4009 |
const char *name;
|
|
Packit |
6c4009 |
int _SC_val;
|
|
Packit |
6c4009 |
bool positive;
|
|
Packit |
6c4009 |
bool posix2;
|
|
Packit |
6c4009 |
} posix_options[] =
|
|
Packit |
6c4009 |
{
|
|
Packit |
6c4009 |
#define N_(name, pos) { _POSIX_##name, #name, _SC_##name, pos, false }
|
|
Packit |
6c4009 |
#define NP(name) N_ (name, true)
|
|
Packit |
6c4009 |
#define N(name) N_ (name, false)
|
|
Packit |
6c4009 |
#define N2(name) { _POSIX2_##name, #name, _SC_2_##name, false, true }
|
|
Packit |
6c4009 |
N (ADVISORY_INFO),
|
|
Packit |
6c4009 |
N (ASYNCHRONOUS_IO),
|
|
Packit |
6c4009 |
N (BARRIERS),
|
|
Packit |
6c4009 |
N (CLOCK_SELECTION),
|
|
Packit |
6c4009 |
N (CPUTIME),
|
|
Packit |
6c4009 |
N (FSYNC),
|
|
Packit |
6c4009 |
N (IPV6),
|
|
Packit |
6c4009 |
NP (JOB_CONTROL),
|
|
Packit |
6c4009 |
N (MAPPED_FILES),
|
|
Packit |
6c4009 |
N (MEMLOCK),
|
|
Packit |
6c4009 |
N (MEMLOCK_RANGE),
|
|
Packit |
6c4009 |
N (MEMORY_PROTECTION),
|
|
Packit |
6c4009 |
N (MESSAGE_PASSING),
|
|
Packit |
6c4009 |
N (MONOTONIC_CLOCK),
|
|
Packit |
6c4009 |
#ifdef _POSIX_PRIORITIZED_IO
|
|
Packit |
6c4009 |
N (PRIORITIZED_IO),
|
|
Packit |
6c4009 |
#endif
|
|
Packit |
6c4009 |
#ifdef _POSIX_PRIORITY_SCHEDULING
|
|
Packit |
6c4009 |
N (PRIORITY_SCHEDULING),
|
|
Packit |
6c4009 |
#endif
|
|
Packit |
6c4009 |
N (RAW_SOCKETS),
|
|
Packit |
6c4009 |
N (READER_WRITER_LOCKS),
|
|
Packit |
6c4009 |
N (REALTIME_SIGNALS),
|
|
Packit |
6c4009 |
NP (REGEXP),
|
|
Packit |
6c4009 |
NP (SAVED_IDS),
|
|
Packit |
6c4009 |
N (SEMAPHORES),
|
|
Packit |
6c4009 |
N (SHARED_MEMORY_OBJECTS),
|
|
Packit |
6c4009 |
NP (SHELL),
|
|
Packit |
6c4009 |
N (SPAWN),
|
|
Packit |
6c4009 |
N (SPIN_LOCKS),
|
|
Packit |
6c4009 |
N (SPORADIC_SERVER),
|
|
Packit |
6c4009 |
#ifdef _POSIX_SYNCHRONIZED_IO
|
|
Packit |
6c4009 |
N (SYNCHRONIZED_IO),
|
|
Packit |
6c4009 |
#endif
|
|
Packit |
6c4009 |
N (THREAD_ATTR_STACKADDR),
|
|
Packit |
6c4009 |
N (THREAD_ATTR_STACKSIZE),
|
|
Packit |
6c4009 |
N (THREAD_CPUTIME),
|
|
Packit |
6c4009 |
N (THREAD_PRIO_INHERIT),
|
|
Packit |
6c4009 |
N (THREAD_PRIO_PROTECT),
|
|
Packit |
6c4009 |
N (THREAD_PRIORITY_SCHEDULING),
|
|
Packit |
6c4009 |
N (THREAD_PROCESS_SHARED),
|
|
Packit |
6c4009 |
N (THREAD_SAFE_FUNCTIONS),
|
|
Packit |
6c4009 |
N (THREAD_SPORADIC_SERVER),
|
|
Packit |
6c4009 |
N (THREADS),
|
|
Packit |
6c4009 |
N (TIMEOUTS),
|
|
Packit |
6c4009 |
N (TIMERS),
|
|
Packit |
6c4009 |
N (TRACE),
|
|
Packit |
6c4009 |
N (TRACE_EVENT_FILTER),
|
|
Packit |
6c4009 |
N (TRACE_INHERIT),
|
|
Packit |
6c4009 |
N (TRACE_LOG),
|
|
Packit |
6c4009 |
N (TYPED_MEMORY_OBJECTS),
|
|
Packit |
6c4009 |
N2 (C_BIND),
|
|
Packit |
6c4009 |
N2 (C_DEV),
|
|
Packit |
6c4009 |
N2 (CHAR_TERM)
|
|
Packit |
6c4009 |
};
|
|
Packit |
6c4009 |
#define nposix_options (sizeof (posix_options) / sizeof (posix_options[0]))
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
static int
|
|
Packit |
6c4009 |
do_test (void)
|
|
Packit |
6c4009 |
{
|
|
Packit |
6c4009 |
int result = 0;
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
for (int i = 0; i < nposix_options; ++i)
|
|
Packit |
6c4009 |
{
|
|
Packit |
6c4009 |
long int scret = sysconf (posix_options[i]._SC_val);
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
if (scret == 0)
|
|
Packit |
6c4009 |
{
|
|
Packit |
6c4009 |
printf ("sysconf(_SC_%s%s) returned zero\n",
|
|
Packit |
6c4009 |
posix_options[i].posix2 ? "2_" : "", posix_options[i].name);
|
|
Packit |
6c4009 |
result = 1;
|
|
Packit |
6c4009 |
}
|
|
Packit |
6c4009 |
if (posix_options[i]._P_val != 0 && posix_options[i]._P_val != scret)
|
|
Packit |
6c4009 |
{
|
|
Packit |
6c4009 |
printf ("sysconf(_SC_%s%s) = %ld does not match _POSIX%s_%s = %ld\n",
|
|
Packit |
6c4009 |
posix_options[i].posix2 ? "2_" : "", posix_options[i].name,
|
|
Packit |
6c4009 |
scret,
|
|
Packit |
6c4009 |
posix_options[i].posix2 ? "2" : "", posix_options[i].name,
|
|
Packit |
6c4009 |
posix_options[i]._P_val);
|
|
Packit |
6c4009 |
result = 1;
|
|
Packit |
6c4009 |
}
|
|
Packit |
6c4009 |
else if (posix_options[i].positive && scret < 0)
|
|
Packit |
6c4009 |
{
|
|
Packit |
6c4009 |
printf ("sysconf(_SC_%s%s) must be > 0\n",
|
|
Packit |
6c4009 |
posix_options[i].posix2 ? "2_" : "", posix_options[i].name);
|
|
Packit |
6c4009 |
result = 1;
|
|
Packit |
6c4009 |
}
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
#define STDVER 200809L
|
|
Packit |
6c4009 |
if (scret > 0 && scret != STDVER && !posix_options[i].positive)
|
|
Packit |
6c4009 |
{
|
|
Packit |
6c4009 |
printf ("sysconf(_SC_%s%s) must be %ldL\n",
|
|
Packit |
6c4009 |
posix_options[i].posix2 ? "2_" : "", posix_options[i].name,
|
|
Packit |
6c4009 |
STDVER);
|
|
Packit |
6c4009 |
result = 1;
|
|
Packit |
6c4009 |
}
|
|
Packit |
6c4009 |
}
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
return result;
|
|
Packit |
6c4009 |
}
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
#define TEST_FUNCTION do_test ()
|
|
Packit |
6c4009 |
#include "../test-skeleton.c"
|