summary refs log tree commit diff
path: root/conform
diff options
context:
space:
mode:
Diffstat (limited to 'conform')
-rw-r--r--conform/conformtest.pl18
-rw-r--r--conform/data/arpa/inet.h-data31
-rw-r--r--conform/data/ctype.h-data2
-rw-r--r--conform/data/fcntl.h-data41
-rw-r--r--conform/data/net/if.h-data15
-rw-r--r--conform/data/netdb.h-data60
-rw-r--r--conform/data/netinet/in.h-data84
-rw-r--r--conform/data/netinet/tcp.h-data3
-rw-r--r--conform/data/pthread.h-data22
-rw-r--r--conform/data/sched.h-data5
-rw-r--r--conform/data/semaphore.h-data1
-rw-r--r--conform/data/signal.h-data1
-rw-r--r--conform/data/spawn.h-data36
-rw-r--r--conform/data/stdlib.h-data3
-rw-r--r--conform/data/sys/mman.h-data17
-rw-r--r--conform/data/sys/socket.h-data108
-rw-r--r--conform/data/sys/stat.h-data5
-rw-r--r--conform/data/sys/types.h-data3
-rw-r--r--conform/data/sys/un.h-data8
-rw-r--r--conform/data/sys/utsname.h-data11
-rw-r--r--conform/data/time.h-data7
-rw-r--r--conform/data/unistd.h-data65
22 files changed, 535 insertions, 11 deletions
diff --git a/conform/conformtest.pl b/conform/conformtest.pl
index 0608d9ff15..a7d984ab6c 100644
--- a/conform/conformtest.pl
+++ b/conform/conformtest.pl
@@ -6,18 +6,20 @@ $CFLAGS = "-I. '-D__attribute__(x)=' -D_XOPEN_SOURCE=500";
 # List of the headers we are testing.
 @headers = ("wordexp.h", "wctype.h", "wchar.h", "varargs.h", "utmpx.h",
 	    "utime.h", "unistd.h", "ulimit.h", "ucontext.h", "time.h",
-	    "termios.h", "tar.h", "sys/wait.h", "sys/uio.h", "sys/types.h",
-	    "sys/times.h", "sys/timeb.h", "sys/time.h", "sys/statvfs.h",
-	    "sys/stat.h", "sys/shm.h", "sys/sem.h", "sys/resource.h",
-	    "sys/msg.h", "sys/mman.h", "sys/ipc.h", "syslog.h",
-	    "stropts.h", "strings.h", "string.h", "stdlib.h", "stdio.h",
-	    "stddef.h", "stdarg.h", "signal.h", "setjmp.h", "semaphore.h",
+	    "termios.h", "tar.h", "sys/wait.h", "sys/utsname.h", "sys/un.h",
+	    "sys/uio.h", "sys/types.h", "sys/times.h", "sys/timeb.h",
+	    "sys/time.h", "sys/statvfs.h", "sys/stat.h", "sys/socket.h",
+	    "sys/shm.h", "sys/sem.h", "sys/resource.h", "sys/msg.h",
+	    "sys/mman.h", "sys/ipc.h", "syslog.h", "stropts.h", "strings.h",
+	    "string.h", "stdlib.h", "stdio.h", "stddef.h", "stdarg.h",
+	    "spawn.h", "signal.h", "setjmp.h", "semaphore.h",
 	    "search.h", "sched.h", "regex.h", "pwd.h", "pthread.h",
-	    "poll.h", "nl_types.h", "ndbm.h", "mqueue.h", "monetary.h",
+	    "poll.h", "nl_types.h", "netinet/tcp.h", "netinet/in.h",
+	    "net/if.h", "netdb.h", "ndbm.h", "mqueue.h", "monetary.h",
 	    "math.h", "locale.h", "libgen.h", "langinfo.h", "iso646.h",
 	    "inttypes.h", "iconv.h", "grp.h", "glob.h", "ftw.h", "fnmatch.h",
 	    "fmtmsg.h", "float.h", "fcntl.h", "errno.h", "dlfcn.h", "dirent.h",
-	    "ctype.h", "cpio.h", "assert.h", "aio.h");
+	    "ctype.h", "cpio.h", "assert.h", "arpa/inet.h", "aio.h");
 
 # These are the ISO C99 keywords.
 @keywords = ('auto', 'break', 'case', 'char', 'const', 'continue', 'default',
diff --git a/conform/data/arpa/inet.h-data b/conform/data/arpa/inet.h-data
new file mode 100644
index 0000000000..6a98d334ae
--- /dev/null
+++ b/conform/data/arpa/inet.h-data
@@ -0,0 +1,31 @@
+#ifndef ISO
+// in_port_t should have exactly 16 bits
+type in_port_t
+// in_addr_t should have exactly 32 bits
+type in_addr_t
+
+type uint32_t
+type uint16_t
+
+macro INET_ADDRSTRLEN
+macro INET6_ADDRSTRLEN
+
+// The following can be declared as functions, defined as macros or both:
+function uint32_t htonl (uint32_t);
+function uint16_t htons (uint16_t);
+function uint32_t ntohl (uint32_t);
+function uint16_t htons (uint16_t);
+
+function in_addr_t inet_addr (const char*);
+function in_addr_t inet_lnaof (struct in_addr);
+function {struct in_addr} inet_makeaddr (in_addr_t, in_addr_t);
+function in_addrt_t inet_netof (struct in_addr);
+function in_addrt_t inet_network (const char *);
+function {char*} inet_ntoa (struct in_addr);
+function {const char*} inet_ntop (int, const void*, char*, socklen_t);
+function int inet_pton (int, const char*, void*);
+
+allow-header netinet/in.h
+allow-header inttypes.h
+
+#endif
diff --git a/conform/data/ctype.h-data b/conform/data/ctype.h-data
index 190c5678c2..f0aa947873 100644
--- a/conform/data/ctype.h-data
+++ b/conform/data/ctype.h-data
@@ -15,6 +15,8 @@ function int toupper (int)
 #ifndef ISO
 function int isascii (int)
 function int toascii (int)
+
+# XPG says the following two are macros.  But we test a bit more strictly.
 function int _toupper (int)
 function int _tolower (int)
 
diff --git a/conform/data/fcntl.h-data b/conform/data/fcntl.h-data
index cf34c2b9ce..0fbe7d57fe 100644
--- a/conform/data/fcntl.h-data
+++ b/conform/data/fcntl.h-data
@@ -7,6 +7,8 @@ constant F_SETFL
 constant F_GETLK
 constant F_SETLK
 constant F_SETLKW
+constant F_GETOWN
+constant F_SETOWN
 
 constant FD_CLOEXEC
 
@@ -14,6 +16,10 @@ constant F_RDLCK
 constant F_UNLCK
 constant F_WRLCK
 
+constant SEEK_SET
+constant SEEK_CUR
+constant SEED_END
+
 constant O_CREAT
 constant O_EXCL
 constant O_NOCTTY
@@ -31,6 +37,38 @@ constant O_RDONLY
 constant O_RDWR
 constant O_WRONLY
 
+constant S_IFMT
+constant S_IFBLK
+constant S_IFCHR
+constant S_IFIFO
+constant S_IFREG
+constant S_IFDIR
+constant S_IFLNK
+constant S_IFSOCK
+
+constant S_IRWXU
+constant S_IRUSR
+constant S_IWUSR
+constant S_IXUSR
+constant S_IRWXG
+constant S_IRGRP
+constant S_IWGRP
+constant S_IXGRP
+constant S_IRWXO
+constant S_IROTH
+constant S_IWOTH
+constant S_IXOTH
+constant S_ISUID
+constant S_ISGID
+constant S_ISVTX
+
+constant POSIX_FADV_NORMAL
+constant POSIX_FADV_SEQUENTIAL
+constant POSIX_FADV_RANDOM
+constant POSIX_FADV_WILLNEED
+constant POSIX_FADV_DONTNEED
+constant POSIX_FADV_NOREUSE
+
 type {struct flock}
 
 element {struct flock} short l_type
@@ -46,6 +84,9 @@ type pid_t
 function int creat (const char*, mode_t)
 function int fcntl (int, int, ...)
 function int open (const char*, int, ...)
+function int posix_fadvise (int, off_t, size_t, int)
+function int posix_fallocate (int, off_t, size_t)
+function int posix_madvise (void*, size_t, int)
 
 allow-header sys/stat.h
 allow-header unistd.h
diff --git a/conform/data/net/if.h-data b/conform/data/net/if.h-data
new file mode 100644
index 0000000000..8a462522d1
--- /dev/null
+++ b/conform/data/net/if.h-data
@@ -0,0 +1,15 @@
+#ifndef ISO
+type {struct if_nameindex}
+
+element {struct if_nameindex} {unsigned int} if_index
+element {struct if_nameindex} {char*} if_name
+
+macro IF_NAMESIZE
+
+function {unsigned int} if_nametoindex (const char*)
+function {char*} if_indextoname (unsigned int, char*)
+function {struct if_nameindex*} if_nameindex (void)
+function void if_freenameindex (struct if_nameindex*)
+
+allow *_t
+#endif
diff --git a/conform/data/netdb.h-data b/conform/data/netdb.h-data
new file mode 100644
index 0000000000..99773b8dc7
--- /dev/null
+++ b/conform/data/netdb.h-data
@@ -0,0 +1,60 @@
+#ifndef ISO
+type in_port_t
+type in_addr_t
+
+type {struct hostent}
+
+element {struct hostent} {char*} h_name
+element {struct hostent} {char**} h_aliases
+element {struct hostent} int h_addrtype
+element {struct hostent} int h_length
+element {struct hostent} {char**} h_addr_list
+
+type {struct netent}
+
+element {struct netent} {char*} n_name
+element {struct netent} {char**} n_aliases
+element {struct netent} int n_addrtype
+element {struct netent} uint32_t n_net
+
+type uint32_t
+
+type {struct protoent}
+
+element {struct protoent} {char*} p_name
+element {struct protoent} {char**} p_aliases
+element {struct protoent} int p_proto
+
+type {struct servent}
+
+element {struct servent} {char*} s_name
+element {struct servent} {char**} s_aliases
+element {struct servent} int s_port
+element {struct servent} {char*} s_proto
+
+macro IPPORT_RESERVED
+
+# variable int h_errno
+allow h_errno
+
+macro HOST_NOT_FOUND
+macro NO_DATA
+macro NO_RECOVERY
+macro TRY_AGAIN
+
+macro AI_V4MAPPED
+macro AI_ALL
+macro AI_ADDRCONFIG
+macro AI_DEFAULT
+
+function void endhostent (void)
+function void endnetent (void)
+function void endprotoent (void)
+function void endservent (void)
+function void freehostent (struct hostent*)
+function {struct hostent*} gethostbyaddr (const void*, socklen_t, int)
+function {struct hostent*} gethostbyname (const char*)
+function {struct hostent*} gethostent (void)
+function {struct hostent*} getipnodebyaddr (const void*, socklen_t, int, int*)
+
+#endif
diff --git a/conform/data/netinet/in.h-data b/conform/data/netinet/in.h-data
new file mode 100644
index 0000000000..81f1b78cfc
--- /dev/null
+++ b/conform/data/netinet/in.h-data
@@ -0,0 +1,84 @@
+#ifndef ISO
+type in_port_t
+type in_addr_t
+
+type sa_family_t
+
+type {struct in_addr}
+
+element {struct in_addr} in_addr_t s_addr
+
+type {struct sockaddr_in}
+
+element {struct sockaddr_in} sa_family_t sin_family
+element {struct sockaddr_in} in_port_t sin_port
+element {struct sockaddr_in} {struct in_addr} sin_addr
+element {struct sockaddr_in} {unsigned char} sin_zero [8]
+
+type {struct in6_addr}
+
+element {struct in6_addr} uint8_t s6_addr [16]
+
+type {struct sockaddr_in6}
+
+element {struct sockaddr_in6} sa_family_t sin6_family
+element {struct sockaddr_in6} in_port_t sin6_port
+element {struct sockaddr_in6} uint32_t sin6_flowinfo
+element {struct sockaddr_in6} {struct in6_addr} sin6_addr
+element {struct sockaddr_in6} uint32_t sin6_scope_id
+
+variable {struct in6_addr} in6addr_any
+
+# constant IN6ADDR_ANY_INIT
+macro IN6ADDR_ANY_INIT
+
+variable {struct in6_addr} in6addr_loopback
+
+#constant IN6ADDR_LOOPBACK_INIT
+macro IN6ADDR_LOOPBACK_INIT
+
+type {struct ipv6_mreq}
+
+element {struct ipv6_mreq} {struct int6_addr} ipv6mr_multiaddr
+element {struct ipv6_mreq} {unsigned int} ipv6mr_interface
+
+macro IPPROTO_IP
+macro IPPROTO_IPV6
+macro IPPROTO_ICMP
+macro IPPROTO_TCP
+macro IPPROTO_UDP
+
+macro INADDR_ANY
+macro INADDR_BROADCAST
+
+macro INET_ADDRSTRLEN
+
+function uint32_t htonl (uint32_t)
+function uint16_t htons (uint16_t)
+function uint32_t ntohl (uint32_t)
+function uint16_t ntohs (uint16_t)
+
+allow-header arpa/inet.h
+
+macro INET6_ADDRSTRLEN
+
+macro IPV6_JOIN_GROUP
+macro IPV6_LEAVE_GROUP
+macro IPV6_MULTICAST_HOPS
+macro IPV6_MULTICAST_IF
+macro IPV6_MULTICAST_LOOP
+macro IPV6_UNICAST_HOPS
+
+macro IN6_IS_ADDR_UNSPECIFIED
+macro IN6_IS_ADDR_LOOPBACK
+macro IN6_IS_ADDR_MULTICAST
+macro IN6_IS_ADDR_LINKLOCAL
+macro IN6_IS_ADDR_SITELOCAL
+macro IN6_IS_ADDR_V4MAPPED
+macro IN6_IS_ADDR_V4COMPAT
+macro IN6_IS_ADDR_MC_NODELOCAL
+macro IN6_IS_ADDR_MC_LINKLOCAL
+macro IN6_IS_ADDR_MC_SITELOCAL
+macro IN6_IS_ADDR_MC_ORGLOCAL
+macro IN6_IS_ADDR_MC_GLOBAL
+#endif
diff --git a/conform/data/netinet/tcp.h-data b/conform/data/netinet/tcp.h-data
new file mode 100644
index 0000000000..bd71a35265
--- /dev/null
+++ b/conform/data/netinet/tcp.h-data
@@ -0,0 +1,3 @@
+#ifndef ISO
+macro TCP_NODELAY
+#endif
diff --git a/conform/data/pthread.h-data b/conform/data/pthread.h-data
index f437814528..5d455f5d69 100644
--- a/conform/data/pthread.h-data
+++ b/conform/data/pthread.h-data
@@ -27,6 +27,8 @@ constant PTHREAD_RWLOCK_INITILIZER
 # endif
 
 type pthread_attr_t
+type pthread_barrier_t
+type pthread_barrierattr_t
 type pthread_cond_t
 type pthread_condattr_t
 type pthread_key_t
@@ -35,6 +37,7 @@ type pthread_mutexattr_t
 type pthread_once_t
 type pthread_rwlock_t
 type pthread_rwlockattr_t
+type pthread_spinlock_t
 type pthread_t
 
 function int pthread_attr_destroy (pthread_attr_t*)
@@ -59,6 +62,13 @@ function int pthread_attr_setschedpolicy (pthread_attr_t*, int)
 function int pthread_attr_setscope (pthread_attr_t*, int)
 function int pthread_attr_setstackaddr (pthread_attr_t*, void*)
 function int pthread_attr_setstacksize (pthread_attr_t*, size_t)
+function int pthread_barrier_destroy (pthread_barrier_t*)
+function int pthread_barrier_init (pthread_barrier_t*, const pthread_barrierattr_t*, unsigned int)
+function int pthread_barrier_wait (pthread_barrier_t*)
+function int pthread_barrierattr_destroy (pthread_barrierattr_t*)
+function int pthread_barrierattr_getpshared (const pthread_barrierattr_t*, int*)
+function int pthread_barrierattr_init (pthread_barrierattr_t*)
+function int pthread_barrierattr_setpshared (pthread_barrierattr_t*, int)
 function int pthread_cancel (pthread_t)
 # function int pthread_cleanup_push (void (*) (void*), void*)
 macro pthread_cleanup_push
@@ -71,8 +81,10 @@ function int pthread_cond_signal (pthread_cond_t*)
 function int pthread_cond_timedwait (pthread_cond_t*, pthread_mutex_t*, const struct timespec*)
 function int pthread_cond_wait (pthread_cond_t*, pthread_mutex_t*)
 function int pthread_condattr_destroy (pthread_condattr_t*)
+function int pthread_condattr_getclock (const pthread_condattr_t*, clockid_t*)
 function int pthread_condattr_getpshared (const pthread_condattr_t*, int*)
 function int pthread_condattr_init (pthread_condattr_t*)
+function int pthread_condattr_setclock (const pthread_condattr_t*, clockid_t*)
 function int pthread_condattr_setpshared (pthread_condattr_t*, int)
 function int pthread_create (pthread_t*, const pthread_attr_t*, void *(*) (void*), void*)
 function int pthread_deteach (pthread_t)
@@ -81,6 +93,7 @@ function int pthread_exit (void*)
 # ifndef POSIX
 function int pthread_getconcurrency (void)
 # endif
+function int pthread_getcpuclockid (pthread_t, clockid_t*)
 function int pthread_getschedparam (pthread_t, int*, struct sched_param*)
 function {void*} pthread_getspecific (pthread_key_t)
 function int pthread_join (pthread_t, void**)
@@ -91,6 +104,7 @@ function int pthread_mutex_getprioceiling (const pthread_mutex_t*, int*)
 function int pthread_mutex_init (pthread_mutex_t*, const pthread_mutexattr_t*)
 function int pthread_mutex_lock (pthread_mutex_t*)
 function int pthread_mutex_setprioceiling (pthread_mutex_t*, int, int*)
+function int pthread_mutex_timedlock (pthread_mutex_t*, const struct timespec*)
 function int pthread_mutex_trylock (pthread_mutex_t*)
 function int pthread_mutex_unlock (pthread_mutex_t*)
 function int pthread_mutexattr_destroy (pthread_mutexattr_t*)
@@ -107,6 +121,8 @@ function int pthread_once (pthread_once_t*, void (*) (void))
 # ifndef POSIX
 function int pthread_rwlock_init (pthread_rwlock_t*, const pthread_rwlockattr_t*)
 function int pthread_rwlock_rdlock (pthread_rwlock_t*)
+function int pthread_rwlock_timedrdlock (pthread_rwlock_t*, const struct timespec*)
+function int pthread_rwlock_timedwrlock (pthread_rwlock_t*, const struct timespec*)
 function int pthread_rwlock_tryrdlock (pthread_rwlock_t*)
 function int pthread_rwlock_trywrlock (pthread_rwlock_t*)
 function int pthread_rwlock_unlock (pthread_rwlock_t*)
@@ -124,6 +140,12 @@ function int pthread_setconcurrency (int)
 # endif
 function int pthread_setschedparam (pthread_t, int, const struct sched_param*)
 function int pthread_setspecific (pthread_key_t, const void*)
+function int pthread_sigmask (int, const sigset_t*, sigset_t*)
+function int pthread_spin_destroy (pthread_spinlock_t*)
+function int pthread_spin_init (pthread_spinlock_t*, int)
+function int pthread_spin_lock (pthread_spinlock_t*)
+function int pthread_spin_trylock (pthread_spinlock_t*)
+function int pthread_spin_unlock (pthread_spinlock_t*)
 function void pthread_testcancel (void)
 
 allow-header sched.h
diff --git a/conform/data/sched.h-data b/conform/data/sched.h-data
index 186efb16d5..4cc11efdc8 100644
--- a/conform/data/sched.h-data
+++ b/conform/data/sched.h-data
@@ -1,9 +1,14 @@
 #ifndef ISO
 type {struct sched_param}
 element {struct sched_param} int sched_priority
+element {struct sched_param} int sched_ss_low_priority
+element {struct sched_param} {struct timespec} sched_ss_repl_period
+element {struct sched_param} {struct timespec} sched_ss_init_budget
+element {struct sched_param} int sched_ss_max_repl
 
 constant SCHED_FIFO
 constant SCHED_RR
+constant SCHED_SPORADIC
 constant SCHED_OTHER
 
 function int sched_get_priority_max (int)
diff --git a/conform/data/semaphore.h-data b/conform/data/semaphore.h-data
index 8a59746f51..df29e0c01b 100644
--- a/conform/data/semaphore.h-data
+++ b/conform/data/semaphore.h-data
@@ -9,6 +9,7 @@ function int sem_getvalue (sem_t*, int*)
 function int sem_init (sem_t*, int, unsigned int)
 function {sem_t*} sem_open (const char*, int, ...)
 function int sem_post (sem_t*)
+function int sem_timedwait (sem_t*, const struct timespec*)
 function int sem_trywait (sem_t*)
 function int sem_unlink (const char*)
 function int sem_wait (sem_t*)
diff --git a/conform/data/signal.h-data b/conform/data/signal.h-data
index ee6ec52e3c..4fcbf9a5a5 100644
--- a/conform/data/signal.h-data
+++ b/conform/data/signal.h-data
@@ -34,6 +34,7 @@ constant SIGFPE
 constant SIGHUP
 constant SIGILL
 constant SIGINT
+constant SIGIO
 constant SIGKILL
 constant SIGPIPE
 constant SIGQUIT
diff --git a/conform/data/spawn.h-data b/conform/data/spawn.h-data
new file mode 100644
index 0000000000..d50dbff6bf
--- /dev/null
+++ b/conform/data/spawn.h-data
@@ -0,0 +1,36 @@
+#ifndef ISO
+type posix_spawnattr_t
+type posix_spawn_file_actions_t
+
+constant POSIX_SPAWN_RESETIDS
+constant POSIX_SPAWN_SETPGROUP
+constant POSIX_SPAWN_SETSCHEDPARAM
+constant POSIX_SPAWN_SETSCHEDULER
+constant POSIX_SPAWN_SETSIGDEF
+constant POSIX_SPAWN_SETSIGMASK
+
+function int posix_spawnattr_destroy (posix_spawnattr_t*)
+function int posix_spawnattr_getdefault (const posix_spawnattr_t*, sigset_t*)
+function int posix_spawnattr_getflags (const posix_spawnattr_t*, short*)
+function int posix_spawnattr_getpgroup (const posix_spawnattr_t*, pid_t*)
+function int posix_spawnattr_getschedparam (const posix_spawnattr_t*, struct sched_param*)
+function int posix_spawnattr_getschedpolicy (const posix_spawnattr_t*, int*)
+function int posix_spawnattr_getsigmask (const posix_spawnattr_t*, sigset_t*)
+function int posix_spawnattr_init (posix_spawnattr_t*)
+function int posix_spawnattr_setdefault (posix_spawnattr_t*, const sigset_t*)
+function int posix_spawnattr_setflags (posix_spawnattr_t*, const sigset_t*)
+function int posix_spawnattr_setpgroup (posix_spawnattr_t*, pid_t)
+function int posix_spawnattr_setschedparam (posix_spawnattr_t*, const struct sched_param*)
+function int posix_spawnattr_setschedpolicy (posix_spawnattr_t*, int)
+function int posix_spawnattr_setsigmask (posix_spawnattr_t*, const sigset_t*)
+function int posix_spawn_file_actions_addclose (posix_spawn_file_actions_t*, int)
+function int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t*, int, int)
+function int posix_spawn_file_actions_addopen (posix_spawn_file_actions_t*, int, const char *, int, mode_t)
+function int posix_spawn_file_actions_destroy (posix_spawn_file_actions_t*)
+function int posix_spawn_file_actions_init (posix_spawn_file_actions_t*)
+function int posix_spawn (pid_t*, const char*, const posix_spawn_file_actions_t*, const posix_spawnattr_t*, char *const[], char *const[]);
+function int posix_spawnp (pid_t*, const char*, const posix_spawn_file_actions_t*, const posix_spawnattr_t*, char *const[], char *const[]);
+
+allow-header signal.h
+allow-header sys/types.h
+#endif
diff --git a/conform/data/stdlib.h-data b/conform/data/stdlib.h-data
index 74dc452084..ce6bc20059 100644
--- a/conform/data/stdlib.h-data
+++ b/conform/data/stdlib.h-data
@@ -55,6 +55,7 @@ function {char*} mktemp (char*)
 function int mkstemp (char*)
 function {long int} mrand48 (void)
 function {long int} nrand48 (unsigned short int[3])
+function int posix_memalign (void**, size_t, size_t)
 function {char*} ptsname (int)
 function int putenv (char*)
 function void qsort (void*, size_t, size_t, int(*)(const void*, const void*))
@@ -64,6 +65,7 @@ function long random (void)
 function {void*} realloc (void*, size_t)
 function {char*} realpath (const char*, char*)
 function {unsigned short int*} seed48 (unsigned short int[3])
+function int setenv (const char*, const char*, int)
 function void setkey (const char*)
 function {char*} setstate (const char*)
 function void srand (unsigned int)
@@ -75,6 +77,7 @@ function {unsigned long int} strtoul (const char*, char**, int)
 function int system (const char*)
 function int ttyslot (void)
 function int unlockpt (int)
+function int unsetenv (const char*)
 function {void*} valloc (size_t)
 function size_t wcstombs (char*, const wchar_t*, size_t)
 function int wctomb (char*, wchar_t)
diff --git a/conform/data/sys/mman.h-data b/conform/data/sys/mman.h-data
index 8a696d349b..d744a9ef22 100644
--- a/conform/data/sys/mman.h-data
+++ b/conform/data/sys/mman.h-data
@@ -16,10 +16,24 @@ constant MCL_FUTURE
 
 constant MAP_FAILED
 
+constant POSIX_MADV_NORMAL
+constant POSIX_MADV_SEQUENTIAL
+constant POSIX_MADV_RANDOM
+constant POSIX_MADV_WILLNEED
+constant POSIX_MADV_DONTNEED
+
+constant POSIX_TYPED_MEM_ALLOCATE
+constant POSIX_TYPED_MEM_ALLOCATE_CONTIG
+constant POSIX_TYPED_MEM_MAP_ALLOCATABLE
+
 type size_t
 type off_t
 type mode_t
 
+type {struct posix_typedmem_info}
+
+element {struct posix_typedmem_info} size_t posix_tmi_length
+
 function int mlock (const void*, size_t)
 function int mlockall (int)
 function {void*} mmap (void*, size_t, int, int, int, off_t)
@@ -28,6 +42,9 @@ function int msync (void*, size_t, int)
 function int munlock (const void*, size_t)
 function int munlockall (void)
 function int munmap (void*, size_t)
+function int posix_mem_offset (const void*, size_t, off_t*, size_t*, int*)
+function int posix_typed_mem_get_info (int, struct posix_typed_mem_info*)
+function int posix_typed_mem_open (const char*, int, int)
 function int shm_open (const char*, int, mode_t)
 function int shm_unlink (const char*)
 
diff --git a/conform/data/sys/socket.h-data b/conform/data/sys/socket.h-data
new file mode 100644
index 0000000000..13eed1ece4
--- /dev/null
+++ b/conform/data/sys/socket.h-data
@@ -0,0 +1,108 @@
+#ifndef ISO
+type socklen_t
+
+type sa_family_t
+
+type {struct sockaddr}
+
+element {struct sockaddr} sa_family_t sa_family
+element {struct sockaddr} char sa_data [0]
+
+type {struct sockaddr_storage}
+
+element {struct sockaddr_storage} sa_family_t ss_family
+
+type {struct msghdr}
+
+element {struct msghdr} {void*} msg_name
+element {struct msghdr} socklen_t msg_namelen
+element {struct msghdr} {struct iovec*} msg_iov
+element {struct msghdr} int msg_iovlen
+element {struct msghdr} {void*} msg_control
+element {struct msghdr} socklen_t msg_controllen
+element {struct msghdr} int msg_flags
+
+type {struct iovec}
+
+element {struct iovec} {void*} iov_base
+element {struct iovec} size_t iov_len
+
+type {struct cmsghdr}
+
+element {struct cmsghdr} socklen_t cmsg_len
+element {struct cmsghdr} int cmsg_level
+element {struct cmsghdr} int cmsg_type
+
+macro SCM_RIGHTS
+
+macro CMSG_DATA
+macro CMSG_NXTHDR
+macro CMSG_FIRSTHDR
+
+type {struct linger}
+
+element {struct linger} int l_onoff
+element {struct linger} int l_linger
+
+macro SOCK_DGRAM
+macro SOCK_STREAM
+macro SOCK_SEQPACKET
+
+macro SOL_SOCKET
+
+macro SO_ACCEPTCONN
+macro SO_BROADCAST
+macro SO_DEBUG
+macro SO_DONTROUTE
+macro SO_ERROR
+macro SO_KEEPALIVE
+macro SO_LINGER
+macro SO_OOBINLINE
+macro SO_RCVBUF
+macro SO_RCVLOWAT
+macro SO_RCVTIMEO
+macro SO_REUSEADDR
+macro SO_SNDBUF
+macro SO_SNDLOWAT
+macro SO_SNFTIMEO
+macro SO_TYPE
+
+macro SOMAXCONN
+
+macro MSG_CTRUNC
+macro MSG_DONTROUTE
+macro MSG_EOR
+macro MSG_OOB
+macro MSG_PEEK
+macro MSG_TRUNC
+macro MSG_WAITALL
+
+macro AF_UNIX
+macro AF_UNSPEC
+macro AF_INET
+macro_AF_INET6
+
+macro SHUT_RD
+macro SHUT_WR
+macro SHUT_RDWR
+
+function int accept (int, struct sockaddr*, socklen_t*)
+function int bind (int, const struct sockaddr*, socklen_t)
+function int connect (int, const struct sockaddr*, socklen_t)
+function int getpeername (int, struct sockaddr*, socklen_t*)
+function int getsockname (int, struct sockaddr*, socklen_t*)
+function int getsockopt (int, int, int, void*, socklen_t)
+function int listen (int, int)
+function ssize_t recv (int, void*, size_t, int)
+function ssize_t recvfrom (int, void*, size_t, int)
+function ssize_t recvmsg (int, struct msghdr*, int)
+function ssize_t send (int, const struct msghdr*, int)
+function ssize_t sendmsg (int, const struct msghdr*, int)
+function ssize_t sendto (int, const void*, size_t, int, const struct sockaddr*, socklen_t)
+function int setsockopt (int, int, int, const void*, socklen_t)
+function int shutdown (int, int)
+function int socket (int, int, int)
+function int socketpair (int, int, int, int)
+
+allow-header sys/uio.h
+#endif
diff --git a/conform/data/sys/stat.h-data b/conform/data/sys/stat.h-data
index 97ab81287d..afdbd2c888 100644
--- a/conform/data/sys/stat.h-data
+++ b/conform/data/sys/stat.h-data
@@ -1,3 +1,5 @@
+#ifndef ISO
+
 type {struct stat}
 
 element {struct stat} dev_t st_dev
@@ -59,10 +61,12 @@ macro S_ISLNK
 # macro S_TYPEISMQ
 # macro S_TYPEISSEM
 # macro S_TYPEISSHM
+# macro S_TYPEISTMO
 
 function int chmod (const char*, mode_t)
 function int fchmod (int, mode_t)
 function int fstat (int, struct stat*)
+function int isfdtype (int, int)
 function int lstat (const char*, struct stat*)
 function int mkdir (const char*, mode_t)
 function int mkfifo (const char*, mode_t)
@@ -73,3 +77,4 @@ function mode_t umask (mode_t)
 allow st_*
 allow S_*
 allow *_t
+#endif
diff --git a/conform/data/sys/types.h-data b/conform/data/sys/types.h-data
index 6a08c1940e..ed7236b8b6 100644
--- a/conform/data/sys/types.h-data
+++ b/conform/data/sys/types.h-data
@@ -14,6 +14,8 @@ type nlink_t
 type off_t
 type pid_t
 type pthread_attr_t
+type pthread_barrier_t
+type pthread_barrierattr_t
 type pthread_cond_t
 type pthread_condattr_t
 type pthread_key_t
@@ -22,6 +24,7 @@ type pthread_mutexattr_t
 type pthread_once_t
 type pthread_rwlock_t
 type pthread_rwlockattr_t
+type pthread_spinlock_t
 type pthread_t
 type size_t
 type ssize_t
diff --git a/conform/data/sys/un.h-data b/conform/data/sys/un.h-data
new file mode 100644
index 0000000000..e8e18fbd8f
--- /dev/null
+++ b/conform/data/sys/un.h-data
@@ -0,0 +1,8 @@
+#ifndef ISO
+type {struct sockaddr_un}
+
+element {struct sockaddr_un} sa_family_t sun_family
+element {struct sockaddr_un} char sun_path [0]
+
+type sa_family_t
+#endif
diff --git a/conform/data/sys/utsname.h-data b/conform/data/sys/utsname.h-data
new file mode 100644
index 0000000000..9f7d4fd91e
--- /dev/null
+++ b/conform/data/sys/utsname.h-data
@@ -0,0 +1,11 @@
+#ifndef ISO
+type {struct utsname}
+
+element {struct utsname} char sysname [1]
+element {struct utsname} char nodename [1]
+element {struct utsname} char release [1]
+element {struct utsname} char version [1]
+element {struct utsname} char machine [1]
+
+function int uname (struct utsname *)
+#endif
diff --git a/conform/data/time.h-data b/conform/data/time.h-data
index 045ed49624..7284760992 100644
--- a/conform/data/time.h-data
+++ b/conform/data/time.h-data
@@ -13,6 +13,8 @@ element {struct tm} int tm_isdst
 constant NULL
 constant CLK_TCK
 constant CLOCKS_PER_SEC
+constant CLOCK_PROCESS_CPUTIME_ID
+constant CLOCK_THREAD_CPUTIME_ID
 
 type {struct timespec}
 
@@ -26,6 +28,7 @@ element {struct itimerspec} {struct timespec} it_value
 
 constant CLOCK_REALTIME
 constant TIME_ABSTIME
+constant CLOCK_MONOTONIC
 
 type clock_t
 type clockid_t
@@ -38,15 +41,17 @@ variable int getdate_err
 function {char*} asctime (const struct tm*)
 function {char*} asctime_r (const struct tm*, char*)
 function clock_t clock (void)
+function int clock_getcpuclockid (pid_t, clockid_t*)
 function int clock_getres (clockid_t, struct timespec*)
 function int clock_gettime (clockid_t, struct timespec*)
+function int clock_nanosleep (clockid_t, int, const struct timespec*, struct timespec*)
 function int clock_settime (clockid_t, const struct timespec*)
 function {char*} ctime (const time_t*)
 function {char*} ctime_r (const time_t*, char*)
 function double difftime (time_t, time_t)
 function {struct tm*} getdate (const char*)
 function {struct tm*} gmtime (const time_t*)
-function {struct tm*} gmtime_t (const time_t*, struct tm*)
+function {struct tm*} gmtime_r (const time_t*, struct tm*)
 function {struct tm*} localtime (const time_t*)
 function {struct tm*} localtime_r (const time_t*, struct tm*)
 function time_t mktime (struct tm*)
diff --git a/conform/data/unistd.h-data b/conform/data/unistd.h-data
index e3008e7be4..5bec906ebd 100644
--- a/conform/data/unistd.h-data
+++ b/conform/data/unistd.h-data
@@ -1,5 +1,4 @@
 constant _POSIX_VERSION
-constant _POSIX2_VERSION
 constant _POSIX2_C_VERSION
 constant _XOPEN_VERSION
 constant _XOPEN_XCU_VERSION
@@ -15,17 +14,31 @@ constant _XOPEN_XPG3
 constant _XOPEN_XPG4
 constant _XOPEN_UNIX
 
+constant _POSIX_ADVISORY_INFO
+constant _POSIX_ASYNCHRONOUS_IO
+constant _POSIX_BARRIERS
 constant _POSIX_CHOWN_RESTRICTED
+constant _POSIX_CLOCK_SELECTION
+constant _POSIX_CPUTIME
 constant _POSIX_NO_TRUNC
 constant _POSIX_VDISABLE
 constant _POSIX_SAVED_IDS
 constant _POSIX_JOB_CONTROL
+constant _POSIX_MONOTONIC_CLOCK
+constant _POSIX_READER_WRITER_LOCKS
+constant _POSIX_SHELL
+constant _POSIX_SPAWN
+constant _POSIX_SPIN_LOCKS
+constant _POSIX_SPORADIC_SERVER
+constant _POSIX_THREAD_CPUTIME
+constant _POSIX_TYPED_MEMORY_OBJECTS
 
 constant _POSIX_THREADS
 constant _POSIX_THREAD_ATTR_STACKADDR
 constant _POSIX_THREAD_ATTR_STACKSIZE
 constant _POSIX_THREAD_PROCESS_SHARED
 constant _POSIX_THREAD_SAFE_FUNCTIONS
+constant _POSIX_THREAD_SPORADIC_SERVER
 
 constant _POSIX2_C_DEV
 constant _POSIX2_FORT_DEV
@@ -37,6 +50,7 @@ constant _XOPEN_LEGACY
 constant _XOPEN_REALTIME
 constant _XOPEN_REALTIME_THREADS
 constant _XOPEN_SHM
+constant _XOPEN_STREAMS
 allow _XBS5_ILP32_OFF32
 allow _XBS5_ILP32_OFBIG
 allow _XBS5_LP64_OFF64
@@ -51,6 +65,7 @@ constant _POSIX_SEMAPHORES
 constant _POSIX_SHARED_MEMORY_OBJECTS
 constant _POSIX_SYNCHRONIZED_IO
 constant _POSIX_TIMERS
+constant _POSIX_TIMEOUTS
 
 constant _POSIX_FSYNC
 constant _POSIX_MAPPED_FILES
@@ -66,6 +81,13 @@ constant _POSIX_ASYNC_IO
 constant _POSIX_PRIO_IO
 constant _POSIX_SYNC_IO
 
+constant _POSIX2_PBS
+constant _POSIX2_PBS_ACCOUNTING
+constant _POSIX2_PBS_CHECKPOINT
+constant _POSIX2_PBS_LOCATE
+constant _POSIX2_PBS_MESSAGE
+constant _POSIX2_PBS_TRACK
+
 constant NULL
 
 constant R_OK
@@ -101,6 +123,12 @@ constant _SC_2_C_VERSION
 constant _SC_2_FORT_DEV
 constant _SC_2_FORT_RUN
 constant _SC_2_LOCALEDEF
+constant _SC_2_PBS
+constant _SC_2_PBS_ACCOUNTING
+constant _SC_2_PBS_CHECKPOINT
+constant _SC_2_PBS_LOCATE
+constant _SC_2_PBS_MESSAGE
+constant _SC_2_PBS_TRACK
 constant _SC_2_SW_DEV
 constant _SC_2_UPE
 constant _SC_2_VERSION
@@ -110,15 +138,26 @@ constant _SC_AIO_MAX
 constant _SC_AIO_PRIO_DELTA_MAX
 constant _SC_ASYNCHRONOUS_IO
 constant _SC_ATEXIT_MAX
+constant _SC_BARRIERS
+constant _SC_BASE
 constant _SC_BC_BASE_MAX
 constant _SC_BC_DIM_MAX
 constant _SC_BC_SCALE_MAX
 constant _SC_BC_STRING_MAX
 constant _SC_CHILD_MAX
 constant _SC_CLK_TCK
+constant _SC_CLOCK_SELECTION
 constant _SC_COLL_WEIGHTS_MAX
 constant _SC_DELAYTIMER_MAX
+constant _SC_DEVICE_IO
+constant _SC_DEVICE_SPECIFIC
+constant _SC_DEVICE_SPECIFIC_R
 constant _SC_EXPR_NEST_MAX
+constant _SC_FD_MGMT
+constant _SC_FIFO
+constant _SC_FILE_ATTRIBUTES
+constant _SC_FILE_LOCKING
+constant _SC_FILE_SYSTEM
 constant _SC_FSYNC
 constant _SC_GETGR_R_SIZE_MAX
 constant _SC_GETPW_R_SIZE_MAX
@@ -129,24 +168,36 @@ constant _SC_LOGIN_NAME_MAX
 constant _SC_MAPPED_FILES
 constant _SC_MEMLOCK
 constant _SC_MEMLOCK_RANGE
+constant _SC_MEMORY_PROTECTION
+constant _SC_MESSAGE_PASSING
+constant _SC_MONOTONIC_CLOCK
 constant _SC_MQ_OPEN_MAX
 constant _SC_MQ_PRIO_MAX
+constant _SC_MULTIPLE_PROCESS
+constant _SC_NETWORKING
 constant _SC_NGROUPS_MAX
 constant _SC_OPEN_MAX
 constant _SC_PAGESIZE
 constant _SC_PAGE_SIZE
 constant _SC_PASS_MAX
+constant _SC_PIPE
 constant _SC_PRIORITIZED_IO
 constant _SC_PRIORITY_SCHEDULING
 constant _SC_RE_DUP_MAX
+constant _SC_READER_WRITER_LOCKS
 constant _SC_REALTIME_SIGNALS
+constant _SC_REGEXP
 constant _SC_RTSIG_MAX
 constant _SC_SAVED_IDS
 constant _SC_SEMAPHORES
 constant _SC_SEM_NSEMS_MAX
 constant _SC_SEM_VALUE_MAX
 constant _SC_SHARED_MEMORY_OBJECTS
+constant _SC_SHELL
+constant _SC_SIGNALS
 constant _SC_SIGQUEUE_MAX
+constant _SC_SINGLE_PROCESS
+constant _SC_SPIN_LOCKS
 constant _SC_STREAM_MAX
 constant _SC_SYNCHRONIZED_IO
 constant _SC_THREADS
@@ -164,7 +215,10 @@ constant _SC_THREAD_THREADS_MAX
 constant _SC_TIMERS
 constant _SC_TIMER_MAX
 constant _SC_TTY_NAME_MAX
+constant _SC_TYPED_MEMORY_OBJECTS
 constant _SC_TZNAME_MAX
+constant _SC_USER_GROUPS
+constant _SC_USER_GROUPS_R
 constant _SC_VERSION
 constant _SC_XOPEN_VERSION
 constant _SC_XOPEN_CRYPT
@@ -175,6 +229,7 @@ constant _SC_XOPEN_XCU_VERSION
 constant _SC_XOPEN_LEGACY
 constant _SC_XOPEN_REALTIME
 constant _SC_XOPEN_REALTIME_THREADS
+constant _SC_STREAMS
 constant _SC_XBS5_ILP32_OFF32
 constant _SC_XBS5_ILP32_OFFBIG
 constant _SC_XBS5_ILP64_OFF64
@@ -196,6 +251,10 @@ constant _PC_NO_TRUNC
 constant _PC_PATH_MAX
 constant _PC_PIPE_BUF
 constant _PC_PRIO_IO
+constant _PC_REC_INCR_XFER_SIZE
+constant _PC_REC_MAX_XFER_SIZE
+constant _PC_REC_MIN_XFER_SIZE
+constant _PC_REC_XFER_ALIGN
 constant _PC_SYNC_IO
 constant _PC_VDISABLE
 
@@ -207,7 +266,7 @@ type size_t
 type ssize_t
 type uid_t
 type gid_t
-type uid_t
+type off_t
 type pid_t
 
 type useconds_t
@@ -277,6 +336,8 @@ function ssize_t read (int, void*, size_t)
 function int readlink (const char*, char*, size_t)
 function int rmdir (const char*)
 function {void*} sbrk (intptr_t)
+function int setegid (gid_t)
+function int seteuid (uid_t)
 function int setgid (gid_t)
 function int setpgid (pid_t, pid_t)
 function pid_t setpgrp (void)