| 1 | #include <stdbool.h>
|
|---|
| 2 | #include <stdio.h>
|
|---|
| 3 | #include <unistd.h>
|
|---|
| 4 |
|
|---|
| 5 | static struct
|
|---|
| 6 | {
|
|---|
| 7 | long int _P_val;
|
|---|
| 8 | const char *name;
|
|---|
| 9 | int _SC_val;
|
|---|
| 10 | bool positive;
|
|---|
| 11 | bool posix2;
|
|---|
| 12 | } posix_options[] =
|
|---|
| 13 | {
|
|---|
| 14 | #define N_(name, pos) { _POSIX_##name, #name, _SC_##name, pos, false }
|
|---|
| 15 | #define NP(name) N_ (name, true)
|
|---|
| 16 | #define N(name) N_ (name, false)
|
|---|
| 17 | #define N2(name) { _POSIX2_##name, #name, _SC_2_##name, false, true }
|
|---|
| 18 | N (ADVISORY_INFO),
|
|---|
| 19 | N (ASYNCHRONOUS_IO),
|
|---|
| 20 | N (BARRIERS),
|
|---|
| 21 | N (CLOCK_SELECTION),
|
|---|
| 22 | N (CPUTIME),
|
|---|
| 23 | N (FSYNC),
|
|---|
| 24 | N (IPV6),
|
|---|
| 25 | NP (JOB_CONTROL),
|
|---|
| 26 | N (MAPPED_FILES),
|
|---|
| 27 | N (MEMLOCK),
|
|---|
| 28 | N (MEMLOCK_RANGE),
|
|---|
| 29 | N (MEMORY_PROTECTION),
|
|---|
| 30 | N (MESSAGE_PASSING),
|
|---|
| 31 | N (MONOTONIC_CLOCK),
|
|---|
| 32 | N (PRIORITIZED_IO),
|
|---|
| 33 | N (PRIORITY_SCHEDULING),
|
|---|
| 34 | N (RAW_SOCKETS),
|
|---|
| 35 | N (READER_WRITER_LOCKS),
|
|---|
| 36 | N (REALTIME_SIGNALS),
|
|---|
| 37 | NP (REGEXP),
|
|---|
| 38 | NP (SAVED_IDS),
|
|---|
| 39 | N (SEMAPHORES),
|
|---|
| 40 | N (SHARED_MEMORY_OBJECTS),
|
|---|
| 41 | NP (SHELL),
|
|---|
| 42 | N (SPAWN),
|
|---|
| 43 | N (SPIN_LOCKS),
|
|---|
| 44 | N (SPORADIC_SERVER),
|
|---|
| 45 | N (SYNCHRONIZED_IO),
|
|---|
| 46 | N (THREAD_ATTR_STACKADDR),
|
|---|
| 47 | N (THREAD_ATTR_STACKSIZE),
|
|---|
| 48 | N (THREAD_CPUTIME),
|
|---|
| 49 | N (THREAD_PRIO_INHERIT),
|
|---|
| 50 | N (THREAD_PRIO_PROTECT),
|
|---|
| 51 | N (THREAD_PRIORITY_SCHEDULING),
|
|---|
| 52 | N (THREAD_PROCESS_SHARED),
|
|---|
| 53 | N (THREAD_SAFE_FUNCTIONS),
|
|---|
| 54 | N (THREAD_SPORADIC_SERVER),
|
|---|
| 55 | N (THREADS),
|
|---|
| 56 | N (TIMEOUTS),
|
|---|
| 57 | N (TIMERS),
|
|---|
| 58 | N (TRACE),
|
|---|
| 59 | N (TRACE_EVENT_FILTER),
|
|---|
| 60 | N (TRACE_INHERIT),
|
|---|
| 61 | N (TRACE_LOG),
|
|---|
| 62 | N (TYPED_MEMORY_OBJECTS),
|
|---|
| 63 | N2 (C_BIND),
|
|---|
| 64 | N2 (C_DEV),
|
|---|
| 65 | N2 (CHAR_TERM)
|
|---|
| 66 | };
|
|---|
| 67 | #define nposix_options (sizeof (posix_options) / sizeof (posix_options[0]))
|
|---|
| 68 |
|
|---|
| 69 | static int
|
|---|
| 70 | do_test (void)
|
|---|
| 71 | {
|
|---|
| 72 | int result = 0;
|
|---|
| 73 |
|
|---|
| 74 | for (int i = 0; i < nposix_options; ++i)
|
|---|
| 75 | {
|
|---|
| 76 | long int scret = sysconf (posix_options[i]._SC_val);
|
|---|
| 77 |
|
|---|
| 78 | if (scret == 0)
|
|---|
| 79 | {
|
|---|
| 80 | printf ("sysconf(_SC_%s%s) returned zero\n",
|
|---|
| 81 | posix_options[i].posix2 ? "2_" : "", posix_options[i].name);
|
|---|
| 82 | result = 1;
|
|---|
| 83 | }
|
|---|
| 84 | if (posix_options[i]._P_val != 0 && posix_options[i]._P_val != scret)
|
|---|
| 85 | {
|
|---|
| 86 | printf ("sysconf(_SC_%s%s) = %ld does not match _POSIX%s_%s = %ld\n",
|
|---|
| 87 | posix_options[i].posix2 ? "2_" : "", posix_options[i].name,
|
|---|
| 88 | scret,
|
|---|
| 89 | posix_options[i].posix2 ? "2" : "", posix_options[i].name,
|
|---|
| 90 | posix_options[i]._P_val);
|
|---|
| 91 | result = 1;
|
|---|
| 92 | }
|
|---|
| 93 | else if (posix_options[i].positive && scret < 0)
|
|---|
| 94 | {
|
|---|
| 95 | printf ("sysconf(_SC_%s%s) must be > 0\n",
|
|---|
| 96 | posix_options[i].posix2 ? "2_" : "", posix_options[i].name);
|
|---|
| 97 | result = 1;
|
|---|
| 98 | }
|
|---|
| 99 |
|
|---|
| 100 | #define STDVER 200112L
|
|---|
| 101 | if (scret > 0 && scret != STDVER && !posix_options[i].positive)
|
|---|
| 102 | {
|
|---|
| 103 | printf ("sysconf(_SC_%s%s) must be %ldL\n",
|
|---|
| 104 | posix_options[i].posix2 ? "2_" : "", posix_options[i].name,
|
|---|
| 105 | STDVER);
|
|---|
| 106 | result = 1;
|
|---|
| 107 | }
|
|---|
| 108 | }
|
|---|
| 109 |
|
|---|
| 110 | return result;
|
|---|
| 111 | }
|
|---|
| 112 |
|
|---|
| 113 | #define TEST_FUNCTION do_test ()
|
|---|
| 114 | #include "../test-skeleton.c"
|
|---|