conformance fixes
[libc-test] / src / api / unistd.c
index 10a94cd..522ccdc 100644 (file)
@@ -1,14 +1,72 @@
 #include <unistd.h>
+#include "options.h"
 #define T(t) (t*)0;
 #define F(t,n) {t *y = &x.n;}
 #define C(n) switch(n){case n:;}
+#define A(n) {char p[n];}
 static void f()
 {
-C(_POSIX_VERSION)
-C(_POSIX2_VERSION)
-#ifdef _XOPEN_SOURCE)
-C(_XOPEN_VERSION)
+A(_POSIX_VERSION >= 200809L)
+A(_POSIX2_VERSION >= 200809L)
+#ifdef _XOPEN_SOURCE
+A(_XOPEN_VERSION >= 700)
+// A(_XOPEN_CRYPT >= 0)
+ A(_XOPEN_ENH_I18N > 0)
+// A(_XOPEN_REALTIME >= 0)
+// A(_XOPEN_REALTIME_THREADS >= 0)
+// A(_XOPEN_SHM >= 0)
+ A(_XOPEN_UNIX >= 0)
+#endif
+A(_POSIX_ASYNCHRONOUS_IO >= 200809L)
+A(_POSIX_BARRIERS >= 200809L)
+A(_POSIX_CHOWN_RESTRICTED >= 0)
+A(_POSIX_CLOCK_SELECTION >= 200809L)
+A(_POSIX_JOB_CONTROL > 0)
+A(_POSIX_MAPPED_FILES >= 200809L)
+A(_POSIX_MEMORY_PROTECTION >= 200809L)
+A(_POSIX_NO_TRUNC >= 0)
+A(_POSIX_READER_WRITER_LOCKS >= 200809L)
+A(_POSIX_REALTIME_SIGNALS >= 200809L)
+A(_POSIX_REGEXP > 0)
+A(_POSIX_SAVED_IDS > 0)
+A(_POSIX_SEMAPHORES >= 200809L)
+A(_POSIX_SHELL > 0)
+A(_POSIX_SPIN_LOCKS >= 200809L)
+A(_POSIX_THREAD_SAFE_FUNCTIONS >= 200809L)
+A(_POSIX_THREADS >= 200809L)
+A(_POSIX_TIMEOUTS >= 200809L)
+A(_POSIX_TIMERS >= 200809L)
+#if _POSIX_V7_ILP32_OFFBIG<=0 && _POSIX_V7_LP64_OFF64<=0 && _POSIX_V7_LPBIG_OFFBIG<=0
+#error _POSIX_V7_ILP32_OFFBIG<=0 && _POSIX_V7_LP64_OFF64<=0 && _POSIX_V7_LPBIG_OFFBIG<=0
 #endif
+A(_POSIX2_C_BIND >= 200809L)
+// not required by the standard
+ A(_POSIX_ADVISORY_INFO >= 0)
+ A(_POSIX_CPUTIME >= 0)
+ A(_POSIX_FSYNC >= 0)
+ A(_POSIX_IPV6 >= 0)
+ A(_POSIX_MEMLOCK >= 0)
+ A(_POSIX_MEMLOCK_RANGE >= 0)
+ A(_POSIX_MESSAGE_PASSING >= 0)
+ A(_POSIX_MONOTONIC_CLOCK >= 0)
+// A(_POSIX_PRIORITIZED_IO >= 0)
+// A(_POSIX_PRIORITY_SCHEDULING >= 0)
+ A(_POSIX_RAW_SOCKETS >= 0)
+// A(_POSIX_SHARED_MEMORY_OBJECTS >= 0)
+ A(_POSIX_SPAWN >= 0)
+// A(_POSIX_SPORADIC_SERVER >= 0)
+// A(_POSIX_SYNCHRONIZED_IO >= 0)
+ A(_POSIX_THREAD_ATTR_STACKADDR >= 0)
+ A(_POSIX_THREAD_ATTR_STACKSIZE >= 0)
+ A(_POSIX_THREAD_CPUTIME >= 0)
+// A(_POSIX_THREAD_PRIO_INHERIT >= 0)
+// A(_POSIX_THREAD_PRIO_PROTECT >= 0)
+ A(_POSIX_THREAD_PRIORITY_SCHEDULING >= 0)
+ A(_POSIX_THREAD_PROCESS_SHARED >= 0)
+// A(_POSIX_THREAD_ROBUST_PRIO_INHERIT >= 0)
+// A(_POSIX_THREAD_ROBUST_PRIO_PROTECT >= 0)
+// A(_POSIX_THREAD_SPORADIC_SERVER >= 0)
+// A(_POSIX_TYPED_MEMORY_OBJECTS >= 0)
 C(F_OK)
 C(R_OK)
 C(W_OK)
@@ -190,93 +248,94 @@ T(gid_t)
 T(off_t)
 T(pid_t)
 T(intptr_t)
-void(*p__exit)(int) = _exit;
-int(*p_access)(const char*,int) = access;
-unsigned(*p_alarm)(unsigned) = alarm;
-int(*p_chdir)(const char*) = chdir;
-int(*p_chown)(const char*,uid_t,gid_t) = chown;
-int(*p_close)(int) = close;
-size_t(*p_confstr)(int,char*,size_t) = confstr;
-char*(*p_ctermid)(char*) = ctermid;
-int(*p_dup)(int) = dup;
-int(*p_dup2)(int,int) = dup2;
-{char **x = environ};
-int(*p_execl)(const char*,const char*,...) = execl;
-int(*p_execle)(const char*,const char*,...) = execle;
-int(*p_execlp)(const char*,const char*,...) = execlp;
-int(*p_execv)(const char*,char*const[]) = execv;
-int(*p_execve)(const char*,char*const[],char*const[]) = execve;
-int(*p_execvp)(const char*,char*const[]) = execvp;
-int(*p_faccessat)(int,const char*,int,int) = faccessat;
-int(*p_fchdir)(int) = fchdir;
-int(*p_fchown)(int,uid_t,gid_t) = fchown;
-int(*p_fchownat)(int,const char*,uid_t,gid_t,int) = fchownat;
-int(*p_fdatasync)(int) = fdatasync;
-int(*p_fexecve)(int,char*const[],char*const[]) = fexecve;
-pid_t(*p_fork)(void) = fork;
-long(*p_fpathconf)(int,int) = fpathconf;
-int(*p_fsync)(int) = fsync;
-int(*p_ftruncate)(int,off_t) = ftruncate;
-char*(*p_getcwd)(char*,size_t) = getcwd;
-gid_t(*p_getegid)(void) = getegid;
-uid_t(*p_geteuid)(void) = geteuid;
-gid_t(*p_getgid)(void) = getgid;
-int(*p_getgroups)(int,gid_t[]) = getgroups;
-int(*p_gethostname)(char*,size_t) = gethostname;
-char*(*p_getlogin)(void) = getlogin;
-int(*p_getlogin_r)(char*,size_t) = getlogin_r;
-int(*p_getopt)(int,char*const[],const char*) = getopt;
-pid_t(*p_getpgid)(pid_t) = getpgid;
-pid_t(*p_getpgrp)(void) = getpgrp;
-pid_t(*p_getpid)(void) = getpid;
-pid_t(*p_getppid)(void) = getppid;
-pid_t(*p_getsid)(pid_t) = getsid;
-uid_t(*p_getuid)(void) = getuid;
-int(*p_isatty)(int) = isatty;
-int(*p_lchown)(const char*,uid_t,gid_t) = lchown;
-int(*p_link)(const char*,const char*) = link;
-int(*p_linkat)(int,const char*,int,const char*,int) = linkat;
-off_t(*p_lseek)(int,off_t,int) = lseek;
+{void(*p)(int) = _exit;}
+{int(*p)(const char*,int) = access;}
+{unsigned(*p)(unsigned) = alarm;}
+{int(*p)(const char*) = chdir;}
+{int(*p)(const char*,uid_t,gid_t) = chown;}
+{int(*p)(int) = close;}
+{size_t(*p)(int,char*,size_t) = confstr;}
+{int(*p)(int) = dup;}
+{int(*p)(int,int) = dup2;}
+{extern char **environ; char **x = environ;};
+{int(*p)(const char*,const char*,...) = execl;}
+{int(*p)(const char*,const char*,...) = execle;}
+{int(*p)(const char*,const char*,...) = execlp;}
+{int(*p)(const char*,char*const[]) = execv;}
+{int(*p)(const char*,char*const[],char*const[]) = execve;}
+{int(*p)(const char*,char*const[]) = execvp;}
+{int(*p)(int,const char*,int,int) = faccessat;}
+{int(*p)(int) = fchdir;}
+{int(*p)(int,uid_t,gid_t) = fchown;}
+{int(*p)(int,const char*,uid_t,gid_t,int) = fchownat;}
+#ifdef POSIX_SYNCHRONIZED_IO
+{int(*p)(int) = fdatasync;}
+#endif
+{int(*p)(int,char*const[],char*const[]) = fexecve;}
+{pid_t(*p)(void) = fork;}
+{long(*p)(int,int) = fpathconf;}
+{int(*p)(int) = fsync;}
+{int(*p)(int,off_t) = ftruncate;}
+{char*(*p)(char*,size_t) = getcwd;}
+{gid_t(*p)(void) = getegid;}
+{uid_t(*p)(void) = geteuid;}
+{gid_t(*p)(void) = getgid;}
+{int(*p)(int,gid_t[]) = getgroups;}
+{int(*p)(char*,size_t) = gethostname;}
+{char*(*p)(void) = getlogin;}
+{int(*p)(char*,size_t) = getlogin_r;}
+{int(*p)(int,char*const[],const char*) = getopt;}
+{pid_t(*p)(pid_t) = getpgid;}
+{pid_t(*p)(void) = getpgrp;}
+{pid_t(*p)(void) = getpid;}
+{pid_t(*p)(void) = getppid;}
+{pid_t(*p)(pid_t) = getsid;}
+{uid_t(*p)(void) = getuid;}
+{int(*p)(int) = isatty;}
+{int(*p)(const char*,uid_t,gid_t) = lchown;}
+{int(*p)(const char*,const char*) = link;}
+{int(*p)(int,const char*,int,const char*,int) = linkat;}
+{off_t(*p)(int,off_t,int) = lseek;}
 {char *x = optarg;}
 {int i = opterr;}
 {int i = optind;}
 {int i = optopt;}
-long(*p_pathconf)(const char*,int) = pathconf;
-int(*p_pause)(void) = pause;
-int(*p_pipe)(int[]) = pipe;
-ssize_t(*p_pread)(int,void*,size_t,off_t) = pread;
-ssize_t(*p_pwrite)(int,const void*,size_t,off_t) = pwrite;
-ssize_t(*p_read)(int,void*,size_t) = read;
-ssize_t(*p_readlink)(const char*restrict,char*restrict,size_t) = readlink;
-ssize_t(*p_readlinkat)(int,const char*restrict,char*restrict,size_t) = readlinkat;
-int(*p_rmdir)(const char*) = rmdir;
-int(*p_setegid)(gid_t) = setegid;
-int(*p_seteuid)(uid_t) = seteuid;
-int(*p_setgid)(gid_t) = setgid;
-int(*p_setpgid)(pid_t,pid_t) = setpgid;
-pid_t(*p_setsid)(void) = setsid;
-int(*p_setuid)(uid_t) = setuid;
-unsigned(*p_sleep)(unsigned) = sleep;
-int(*p_symlink)(const char*,const char*) = symlink;
-int(*p_symlinkat)(const char*,int,const char*) = symlinkat;
-long(*p_sysconf)(int) = sysconf;
-pid_t(*p_tcgetpgrp)(int) = tcgetpgrp;
-int(*p_tcsetpgrp)(int,pid_t) = tcsetpgrp;
-int(*p_truncate)(const char*,off_t) = truncate;
-char*(*p_ttyname)(int) = ttyname;
-int(*p_ttyname_r)(int,char*,size_t) = ttyname_r;
-int(*p_unlink)(const char*) = unlink;
-int(*p_unlinkat)(int,const char*,int) = unlinkat;
-ssize_t(*p_write)(int,const void*,size_t) = write;
+{long(*p)(const char*,int) = pathconf;}
+{int(*p)(void) = pause;}
+{int(*p)(int[]) = pipe;}
+{ssize_t(*p)(int,void*,size_t,off_t) = pread;}
+{ssize_t(*p)(int,const void*,size_t,off_t) = pwrite;}
+{ssize_t(*p)(int,void*,size_t) = read;}
+{ssize_t(*p)(const char*restrict,char*restrict,size_t) = readlink;}
+{ssize_t(*p)(int,const char*restrict,char*restrict,size_t) = readlinkat;}
+{int(*p)(const char*) = rmdir;}
+{int(*p)(gid_t) = setegid;}
+{int(*p)(uid_t) = seteuid;}
+{int(*p)(gid_t) = setgid;}
+{int(*p)(pid_t,pid_t) = setpgid;}
+{pid_t(*p)(void) = setsid;}
+{int(*p)(uid_t) = setuid;}
+{unsigned(*p)(unsigned) = sleep;}
+{int(*p)(const char*,const char*) = symlink;}
+{int(*p)(const char*,int,const char*) = symlinkat;}
+{long(*p)(int) = sysconf;}
+{pid_t(*p)(int) = tcgetpgrp;}
+{int(*p)(int,pid_t) = tcsetpgrp;}
+{int(*p)(const char*,off_t) = truncate;}
+{char*(*p)(int) = ttyname;}
+{int(*p)(int,char*,size_t) = ttyname_r;}
+{int(*p)(const char*) = unlink;}
+{int(*p)(int,const char*,int) = unlinkat;}
+{ssize_t(*p)(int,const void*,size_t) = write;}
 #ifdef _XOPEN_SOURCE
-char*(*p_crypt)(const char*,const char*) = crypt;
-void(*p_encrypt)(char[],int) = encrypt;
-long(*p_gethostid)(void) = gethostid;
-int(*p_lockf)(int,int,off_t) = lockf;
-int(*p_nice)(int) = nice;
-int(*p_setregid)(gid_t,gid_t) = setregid;
-int(*p_setreuid)(uid_t,uid_t) = setreuid;
-void(*p_swab)(const void*restrict,void*restrict,ssize_t) = swab;
-void(*p_sync)(void) = sync;
+{char*(*p)(const char*,const char*) = crypt;}
+{void(*p)(char[],int) = encrypt;}
+{long(*p)(void) = gethostid;}
+{int(*p)(int,int,off_t) = lockf;}
+{int(*p)(int) = nice;}
+{int(*p)(gid_t,gid_t) = setregid;}
+{int(*p)(uid_t,uid_t) = setreuid;}
+{void(*p)(const void*restrict,void*restrict,ssize_t) = swab;}
+{void(*p)(void) = sync;}
 #endif
 }