summaryrefslogtreecommitdiff
path: root/nix-test
diff options
context:
space:
mode:
Diffstat (limited to 'nix-test')
-rw-r--r--nix-test/Makefile2
-rw-r--r--nix-test/src/const.c281
-rw-r--r--nix-test/src/errno.c192
-rw-r--r--nix-test/src/lib.rs21
4 files changed, 297 insertions, 199 deletions
diff --git a/nix-test/Makefile b/nix-test/Makefile
index 4d04f10b..67674529 100644
--- a/nix-test/Makefile
+++ b/nix-test/Makefile
@@ -1,6 +1,6 @@
OUT = libnixtest.a
CFLAGS = -fPIC -D$(OS)
-OBJS = errno.o \
+OBJS = const.o \
sizes.o
$(OUT): $(OBJS)
diff --git a/nix-test/src/const.c b/nix-test/src/const.c
new file mode 100644
index 00000000..d9c1054a
--- /dev/null
+++ b/nix-test/src/const.c
@@ -0,0 +1,281 @@
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netinet/ip.h>
+#include <netinet/ip6.h>
+#include <netinet/tcp.h>
+#include <netinet/udp.h>
+
+#define GET_CONST(CONST) \
+ do { \
+ if (0 == strcmp(err, #CONST)) { \
+ return CONST; \
+ } \
+ } while (0)
+
+int
+get_int_const(const char* err) {
+
+ /*
+ *
+ * ===== ERRNO =====
+ *
+ */
+
+ GET_CONST(EPERM);
+ GET_CONST(ENOENT);
+ GET_CONST(ESRCH);
+ GET_CONST(EINTR);
+ GET_CONST(EIO);
+ GET_CONST(ENXIO);
+ GET_CONST(E2BIG);
+ GET_CONST(ENOEXEC);
+ GET_CONST(EBADF);
+ GET_CONST(ECHILD);
+ GET_CONST(EAGAIN);
+ GET_CONST(ENOMEM);
+ GET_CONST(EACCES);
+ GET_CONST(EFAULT);
+ GET_CONST(ENOTBLK);
+ GET_CONST(EBUSY);
+ GET_CONST(EEXIST);
+ GET_CONST(EXDEV);
+ GET_CONST(ENODEV);
+ GET_CONST(ENOTDIR);
+ GET_CONST(EISDIR);
+ GET_CONST(EINVAL);
+ GET_CONST(ENFILE);
+ GET_CONST(EMFILE);
+ GET_CONST(ENOTTY);
+ GET_CONST(ETXTBSY);
+ GET_CONST(EFBIG);
+ GET_CONST(ENOSPC);
+ GET_CONST(ESPIPE);
+ GET_CONST(EROFS);
+ GET_CONST(EMLINK);
+ GET_CONST(EPIPE);
+ GET_CONST(EDOM);
+ GET_CONST(ERANGE);
+ GET_CONST(EDEADLK);
+ GET_CONST(ENAMETOOLONG);
+ GET_CONST(ENOLCK);
+ GET_CONST(ENOSYS);
+ GET_CONST(ENOTEMPTY);
+ GET_CONST(ELOOP);
+ GET_CONST(ENOMSG);
+ GET_CONST(EIDRM);
+ GET_CONST(EINPROGRESS);
+ GET_CONST(EALREADY);
+ GET_CONST(ENOTSOCK);
+ GET_CONST(EDESTADDRREQ);
+ GET_CONST(EMSGSIZE);
+ GET_CONST(EPROTOTYPE);
+ GET_CONST(ENOPROTOOPT);
+ GET_CONST(EPROTONOSUPPORT);
+ GET_CONST(ESOCKTNOSUPPORT);
+ GET_CONST(EPFNOSUPPORT);
+ GET_CONST(EAFNOSUPPORT);
+ GET_CONST(EADDRINUSE);
+ GET_CONST(EADDRNOTAVAIL);
+ GET_CONST(ENETDOWN);
+ GET_CONST(ENETUNREACH);
+ GET_CONST(ENETRESET);
+ GET_CONST(ECONNABORTED);
+ GET_CONST(ECONNRESET);
+ GET_CONST(ENOBUFS);
+ GET_CONST(EISCONN);
+ GET_CONST(ENOTCONN);
+ GET_CONST(ESHUTDOWN);
+ GET_CONST(ETOOMANYREFS);
+ GET_CONST(ETIMEDOUT);
+ GET_CONST(ECONNREFUSED);
+ GET_CONST(EHOSTDOWN);
+ GET_CONST(EHOSTUNREACH);
+
+#ifdef LINUX
+ GET_CONST(ECHRNG);
+ GET_CONST(EL2NSYNC);
+ GET_CONST(EL3HLT);
+ GET_CONST(EL3RST);
+ GET_CONST(ELNRNG);
+ GET_CONST(EUNATCH);
+ GET_CONST(ENOCSI);
+ GET_CONST(EL2HLT);
+ GET_CONST(EBADE);
+ GET_CONST(EBADR);
+ GET_CONST(EXFULL);
+ GET_CONST(ENOANO);
+ GET_CONST(EBADRQC);
+ GET_CONST(EBADSLT);
+ GET_CONST(EBFONT);
+ GET_CONST(ENOSTR);
+ GET_CONST(ENODATA);
+ GET_CONST(ETIME);
+ GET_CONST(ENOSR);
+ GET_CONST(ENONET);
+ GET_CONST(ENOPKG);
+ GET_CONST(EREMOTE);
+ GET_CONST(ENOLINK);
+ GET_CONST(EADV);
+ GET_CONST(ESRMNT);
+ GET_CONST(ECOMM);
+ GET_CONST(EPROTO);
+ GET_CONST(EMULTIHOP);
+ GET_CONST(EDOTDOT);
+ GET_CONST(EBADMSG);
+ GET_CONST(EOVERFLOW);
+ GET_CONST(ENOTUNIQ);
+ GET_CONST(EBADFD);
+ GET_CONST(EREMCHG);
+ GET_CONST(ELIBACC);
+ GET_CONST(ELIBBAD);
+ GET_CONST(ELIBSCN);
+ GET_CONST(ELIBMAX);
+ GET_CONST(ELIBEXEC);
+ GET_CONST(EILSEQ);
+ GET_CONST(ERESTART);
+ GET_CONST(ESTRPIPE);
+ GET_CONST(EUSERS);
+ GET_CONST(EOPNOTSUPP);
+ GET_CONST(ESTALE);
+ GET_CONST(EUCLEAN);
+ GET_CONST(ENOTNAM);
+ GET_CONST(ENAVAIL);
+ GET_CONST(EISNAM);
+ GET_CONST(EREMOTEIO);
+ GET_CONST(EDQUOT);
+ GET_CONST(ENOMEDIUM);
+ GET_CONST(EMEDIUMTYPE);
+ GET_CONST(ECANCELED);
+ GET_CONST(ENOKEY);
+ GET_CONST(EKEYEXPIRED);
+ GET_CONST(EKEYREVOKED);
+ GET_CONST(EKEYREJECTED);
+ GET_CONST(EOWNERDEAD);
+ GET_CONST(ENOTRECOVERABLE);
+#ifndef __ANDROID__
+ GET_CONST(ERFKILL);
+ GET_CONST(EHWPOISON);
+#endif
+#endif
+
+#ifdef DARWIN
+ GET_CONST(ENOTSUP);
+ GET_CONST(EPROCLIM);
+ GET_CONST(EUSERS);
+ GET_CONST(EDQUOT);
+ GET_CONST(ESTALE);
+ GET_CONST(EREMOTE);
+ GET_CONST(EBADRPC);
+ GET_CONST(ERPCMISMATCH);
+ GET_CONST(EPROGUNAVAIL);
+ GET_CONST(EPROGMISMATCH);
+ GET_CONST(EPROCUNAVAIL);
+ GET_CONST(EFTYPE);
+ GET_CONST(EAUTH);
+ GET_CONST(ENEEDAUTH);
+ GET_CONST(EPWROFF);
+ GET_CONST(EDEVERR);
+ GET_CONST(EOVERFLOW);
+ GET_CONST(EBADEXEC);
+ GET_CONST(EBADARCH);
+ GET_CONST(ESHLIBVERS);
+ GET_CONST(EBADMACHO);
+ GET_CONST(ECANCELED);
+ GET_CONST(EILSEQ);
+ GET_CONST(ENOATTR);
+ GET_CONST(EBADMSG);
+ GET_CONST(EMULTIHOP);
+ GET_CONST(ENODATA);
+ GET_CONST(ENOLINK);
+ GET_CONST(ENOSR);
+ GET_CONST(ENOSTR);
+ GET_CONST(EPROTO);
+ GET_CONST(ETIME);
+ GET_CONST(EOPNOTSUPP);
+ GET_CONST(ENOPOLICY);
+ GET_CONST(ENOTRECOVERABLE);
+ GET_CONST(EOWNERDEAD);
+ GET_CONST(EQFULL);
+#endif
+
+ /*
+ *
+ * ===== SOCKET OPTIONS =====
+ *
+ */
+
+ GET_CONST(AF_UNIX);
+ GET_CONST(AF_LOCAL);
+ GET_CONST(AF_INET);
+ GET_CONST(AF_INET6);
+ GET_CONST(SOCK_STREAM);
+ GET_CONST(SOCK_DGRAM);
+ GET_CONST(SOCK_SEQPACKET);
+ GET_CONST(SOCK_RAW);
+ GET_CONST(SOCK_RDM);
+ GET_CONST(SOL_SOCKET);
+ GET_CONST(IPPROTO_IP);
+ GET_CONST(IPPROTO_IPV6);
+ GET_CONST(IPPROTO_TCP);
+ GET_CONST(IPPROTO_UDP);
+ GET_CONST(SO_ACCEPTCONN);
+ GET_CONST(SO_BROADCAST);
+ GET_CONST(SO_DEBUG);
+ GET_CONST(SO_ERROR);
+ GET_CONST(SO_DONTROUTE);
+ GET_CONST(SO_KEEPALIVE);
+ GET_CONST(SO_LINGER);
+ GET_CONST(SO_OOBINLINE);
+ GET_CONST(SO_RCVBUF);
+ GET_CONST(SO_RCVLOWAT);
+ GET_CONST(SO_SNDLOWAT);
+ GET_CONST(SO_RCVTIMEO);
+ GET_CONST(SO_SNDTIMEO);
+ GET_CONST(SO_REUSEADDR);
+ GET_CONST(SO_REUSEPORT);
+ GET_CONST(SO_SNDBUF);
+ GET_CONST(SO_TIMESTAMP);
+ GET_CONST(SO_TYPE);
+ GET_CONST(TCP_NODELAY);
+ GET_CONST(TCP_MAXSEG);
+ GET_CONST(IP_MULTICAST_IF);
+ GET_CONST(IP_MULTICAST_TTL);
+ GET_CONST(IP_MULTICAST_LOOP);
+ GET_CONST(IP_ADD_MEMBERSHIP);
+ GET_CONST(IP_DROP_MEMBERSHIP);
+ GET_CONST(INADDR_ANY);
+ GET_CONST(INADDR_NONE);
+ GET_CONST(INADDR_BROADCAST);
+ GET_CONST(MSG_OOB);
+ GET_CONST(MSG_PEEK);
+ GET_CONST(MSG_DONTWAIT);
+ GET_CONST(SHUT_RD);
+ GET_CONST(SHUT_WR);
+ GET_CONST(SHUT_RDWR);
+
+#ifdef LINUX
+ GET_CONST(SOL_IP);
+ GET_CONST(SOL_TCP);
+ GET_CONST(SOL_IPV6);
+ GET_CONST(SOL_UDP);
+ GET_CONST(SO_BINDTODEVICE);
+ GET_CONST(SO_BSDCOMPAT);
+ GET_CONST(SO_DOMAIN);
+ GET_CONST(SO_MARK);
+ GET_CONST(TCP_CORK);
+ GET_CONST(SO_BUSY_POLL);
+ GET_CONST(SO_RXQ_OVFL);
+ GET_CONST(SO_PASSCRED);
+ GET_CONST(SO_PRIORITY);
+ GET_CONST(SO_PROTOCOL);
+ GET_CONST(SO_RCVBUFFORCE);
+ GET_CONST(SO_PEEK_OFF);
+ GET_CONST(SO_PEERCRED);
+ GET_CONST(SO_SNDBUFFORCE);
+#endif
+
+ return -1;
+}
diff --git a/nix-test/src/errno.c b/nix-test/src/errno.c
deleted file mode 100644
index eaf882c8..00000000
--- a/nix-test/src/errno.c
+++ /dev/null
@@ -1,192 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#define ERRNO_EQ(ERR) \
- do { \
- if (0 == strcmp(err, #ERR)) { \
- return ERR; \
- } \
- } while (0)
-
-int
-assert_errno_eq(const char* err) {
- ERRNO_EQ(EPERM);
- ERRNO_EQ(ENOENT);
- ERRNO_EQ(ESRCH);
- ERRNO_EQ(EINTR);
- ERRNO_EQ(EIO);
- ERRNO_EQ(ENXIO);
- ERRNO_EQ(E2BIG);
- ERRNO_EQ(ENOEXEC);
- ERRNO_EQ(EBADF);
- ERRNO_EQ(ECHILD);
- ERRNO_EQ(EAGAIN);
- ERRNO_EQ(ENOMEM);
- ERRNO_EQ(EACCES);
- ERRNO_EQ(EFAULT);
- ERRNO_EQ(ENOTBLK);
- ERRNO_EQ(EBUSY);
- ERRNO_EQ(EEXIST);
- ERRNO_EQ(EXDEV);
- ERRNO_EQ(ENODEV);
- ERRNO_EQ(ENOTDIR);
- ERRNO_EQ(EISDIR);
- ERRNO_EQ(EINVAL);
- ERRNO_EQ(ENFILE);
- ERRNO_EQ(EMFILE);
- ERRNO_EQ(ENOTTY);
- ERRNO_EQ(ETXTBSY);
- ERRNO_EQ(EFBIG);
- ERRNO_EQ(ENOSPC);
- ERRNO_EQ(ESPIPE);
- ERRNO_EQ(EROFS);
- ERRNO_EQ(EMLINK);
- ERRNO_EQ(EPIPE);
- ERRNO_EQ(EDOM);
- ERRNO_EQ(ERANGE);
- ERRNO_EQ(EDEADLK);
- ERRNO_EQ(ENAMETOOLONG);
- ERRNO_EQ(ENOLCK);
- ERRNO_EQ(ENOSYS);
- ERRNO_EQ(ENOTEMPTY);
- ERRNO_EQ(ELOOP);
- ERRNO_EQ(ENOMSG);
- ERRNO_EQ(EIDRM);
- ERRNO_EQ(EINPROGRESS);
- ERRNO_EQ(EALREADY);
- ERRNO_EQ(ENOTSOCK);
- ERRNO_EQ(EDESTADDRREQ);
- ERRNO_EQ(EMSGSIZE);
- ERRNO_EQ(EPROTOTYPE);
- ERRNO_EQ(ENOPROTOOPT);
- ERRNO_EQ(EPROTONOSUPPORT);
- ERRNO_EQ(ESOCKTNOSUPPORT);
- ERRNO_EQ(EPFNOSUPPORT);
- ERRNO_EQ(EAFNOSUPPORT);
- ERRNO_EQ(EADDRINUSE);
- ERRNO_EQ(EADDRNOTAVAIL);
- ERRNO_EQ(ENETDOWN);
- ERRNO_EQ(ENETUNREACH);
- ERRNO_EQ(ENETRESET);
- ERRNO_EQ(ECONNABORTED);
- ERRNO_EQ(ECONNRESET);
- ERRNO_EQ(ENOBUFS);
- ERRNO_EQ(EISCONN);
- ERRNO_EQ(ENOTCONN);
- ERRNO_EQ(ESHUTDOWN);
- ERRNO_EQ(ETOOMANYREFS);
- ERRNO_EQ(ETIMEDOUT);
- ERRNO_EQ(ECONNREFUSED);
- ERRNO_EQ(EHOSTDOWN);
- ERRNO_EQ(EHOSTUNREACH);
-
-#ifdef LINUX
- ERRNO_EQ(ECHRNG);
- ERRNO_EQ(EL2NSYNC);
- ERRNO_EQ(EL3HLT);
- ERRNO_EQ(EL3RST);
- ERRNO_EQ(ELNRNG);
- ERRNO_EQ(EUNATCH);
- ERRNO_EQ(ENOCSI);
- ERRNO_EQ(EL2HLT);
- ERRNO_EQ(EBADE);
- ERRNO_EQ(EBADR);
- ERRNO_EQ(EXFULL);
- ERRNO_EQ(ENOANO);
- ERRNO_EQ(EBADRQC);
- ERRNO_EQ(EBADSLT);
- ERRNO_EQ(EBFONT);
- ERRNO_EQ(ENOSTR);
- ERRNO_EQ(ENODATA);
- ERRNO_EQ(ETIME);
- ERRNO_EQ(ENOSR);
- ERRNO_EQ(ENONET);
- ERRNO_EQ(ENOPKG);
- ERRNO_EQ(EREMOTE);
- ERRNO_EQ(ENOLINK);
- ERRNO_EQ(EADV);
- ERRNO_EQ(ESRMNT);
- ERRNO_EQ(ECOMM);
- ERRNO_EQ(EPROTO);
- ERRNO_EQ(EMULTIHOP);
- ERRNO_EQ(EDOTDOT);
- ERRNO_EQ(EBADMSG);
- ERRNO_EQ(EOVERFLOW);
- ERRNO_EQ(ENOTUNIQ);
- ERRNO_EQ(EBADFD);
- ERRNO_EQ(EREMCHG);
- ERRNO_EQ(ELIBACC);
- ERRNO_EQ(ELIBBAD);
- ERRNO_EQ(ELIBSCN);
- ERRNO_EQ(ELIBMAX);
- ERRNO_EQ(ELIBEXEC);
- ERRNO_EQ(EILSEQ);
- ERRNO_EQ(ERESTART);
- ERRNO_EQ(ESTRPIPE);
- ERRNO_EQ(EUSERS);
- ERRNO_EQ(EOPNOTSUPP);
- ERRNO_EQ(ESTALE);
- ERRNO_EQ(EUCLEAN);
- ERRNO_EQ(ENOTNAM);
- ERRNO_EQ(ENAVAIL);
- ERRNO_EQ(EISNAM);
- ERRNO_EQ(EREMOTEIO);
- ERRNO_EQ(EDQUOT);
- ERRNO_EQ(ENOMEDIUM);
- ERRNO_EQ(EMEDIUMTYPE);
- ERRNO_EQ(ECANCELED);
- ERRNO_EQ(ENOKEY);
- ERRNO_EQ(EKEYEXPIRED);
- ERRNO_EQ(EKEYREVOKED);
- ERRNO_EQ(EKEYREJECTED);
- ERRNO_EQ(EOWNERDEAD);
- ERRNO_EQ(ENOTRECOVERABLE);
-#ifndef __ANDROID__
- ERRNO_EQ(ERFKILL);
- ERRNO_EQ(EHWPOISON);
-#endif
-#endif
-
-#ifdef DARWIN
- ERRNO_EQ(ENOTSUP);
- ERRNO_EQ(EPROCLIM);
- ERRNO_EQ(EUSERS);
- ERRNO_EQ(EDQUOT);
- ERRNO_EQ(ESTALE);
- ERRNO_EQ(EREMOTE);
- ERRNO_EQ(EBADRPC);
- ERRNO_EQ(ERPCMISMATCH);
- ERRNO_EQ(EPROGUNAVAIL);
- ERRNO_EQ(EPROGMISMATCH);
- ERRNO_EQ(EPROCUNAVAIL);
- ERRNO_EQ(EFTYPE);
- ERRNO_EQ(EAUTH);
- ERRNO_EQ(ENEEDAUTH);
- ERRNO_EQ(EPWROFF);
- ERRNO_EQ(EDEVERR);
- ERRNO_EQ(EOVERFLOW);
- ERRNO_EQ(EBADEXEC);
- ERRNO_EQ(EBADARCH);
- ERRNO_EQ(ESHLIBVERS);
- ERRNO_EQ(EBADMACHO);
- ERRNO_EQ(ECANCELED);
- ERRNO_EQ(EILSEQ);
- ERRNO_EQ(ENOATTR);
- ERRNO_EQ(EBADMSG);
- ERRNO_EQ(EMULTIHOP);
- ERRNO_EQ(ENODATA);
- ERRNO_EQ(ENOLINK);
- ERRNO_EQ(ENOSR);
- ERRNO_EQ(ENOSTR);
- ERRNO_EQ(EPROTO);
- ERRNO_EQ(ETIME);
- ERRNO_EQ(EOPNOTSUPP);
- ERRNO_EQ(ENOPOLICY);
- ERRNO_EQ(ENOTRECOVERABLE);
- ERRNO_EQ(EOWNERDEAD);
- ERRNO_EQ(EQFULL);
-#endif
-
- return 0;
-}
diff --git a/nix-test/src/lib.rs b/nix-test/src/lib.rs
index 66a66413..25ab7fc7 100644
--- a/nix-test/src/lib.rs
+++ b/nix-test/src/lib.rs
@@ -1,24 +1,23 @@
extern crate libc;
+use std::fmt;
use std::ffi::CString;
-use libc::{c_int};
+use libc::{c_int, c_char};
mod ffi {
use libc::{c_int, c_char, size_t};
#[link(name = "nixtest", kind = "static")]
extern {
- pub fn assert_errno_eq(errno: *const c_char) -> c_int;
+ pub fn get_int_const(errno: *const c_char) -> c_int;
pub fn size_of(ty: *const c_char) -> size_t;
}
}
-pub fn assert_errno_eq(name: &str, actual: c_int) {
+pub fn assert_const_eq<T: GetConst>(name: &str, actual: T) {
unsafe {
let cstr = CString::new(name).unwrap();
- let expect = ffi::assert_errno_eq(cstr.as_ptr());
-
- assert!(expect > 0, "undefined errno {}", name);
+ let expect = GetConst::get_const(cstr.as_ptr());
if actual != expect {
panic!("incorrect value for errno {}; expect={}; actual={}",
@@ -42,3 +41,13 @@ pub fn assert_size_of<T>(name: &str) {
}
}
}
+
+pub trait GetConst : PartialEq<Self> + fmt::Display {
+ unsafe fn get_const(name: *const c_char) -> Self;
+}
+
+impl GetConst for c_int {
+ unsafe fn get_const(name: *const c_char) -> c_int {
+ ffi::get_int_const(name)
+ }
+}