Blame posix/tst-sysconf.c

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