summaryrefslogtreecommitdiff
path: root/lib/ccan/failtest
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2012-03-21 11:20:06 +1030
committerRusty Russell <rusty@rustcorp.com.au>2012-03-22 01:57:37 +0100
commitb3a6ffd7b269f7a34334d24b54591c225da773a5 (patch)
tree11ee5b831e28a9460d19a4045560ad307c145f1d /lib/ccan/failtest
parent675593221c25dbebaaf8e4ce9f4271a8fb0171d0 (diff)
downloadsamba-b3a6ffd7b269f7a34334d24b54591c225da773a5.tar.gz
samba-b3a6ffd7b269f7a34334d24b54591c225da773a5.tar.bz2
samba-b3a6ffd7b269f7a34334d24b54591c225da773a5.zip
lib/ccan/failtest: compile fix for OpenBSD
OpenBSD doesn't idempotent-wrap sys/mman.h, so when we #define mmap to an alternative, it fails to compile when sys/mman.h is included again. Workaround is not to #define mmap to add arguments on Open BSD. (Imported from CCAN commit e18e80fe175422d26efe689addc0f67bdba0e097) Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'lib/ccan/failtest')
-rw-r--r--lib/ccan/failtest/failtest.c9
-rw-r--r--lib/ccan/failtest/failtest_override.h6
-rw-r--r--lib/ccan/failtest/failtest_proto.h2
3 files changed, 17 insertions, 0 deletions
diff --git a/lib/ccan/failtest/failtest.c b/lib/ccan/failtest/failtest.c
index 5f68394518..a4a374f4fb 100644
--- a/lib/ccan/failtest/failtest.c
+++ b/lib/ccan/failtest/failtest.c
@@ -1177,6 +1177,15 @@ void *failtest_mmap(void *addr, size_t length, int prot, int flags,
return p->u.mmap.ret;
}
+/* Since OpenBSD can't handle adding args, we use this file and line.
+ * This will make all mmaps look the same, reducing coverage. */
+void *failtest_mmap_noloc(void *addr, size_t length, int prot, int flags,
+ int fd, off_t offset)
+{
+ return failtest_mmap(addr, length, prot, flags, fd, offset,
+ __FILE__, __LINE__);
+}
+
static void cleanup_pipe(struct pipe_call *call, bool restore)
{
trace("cleaning up pipe fd=%i%s,%i%s\n",
diff --git a/lib/ccan/failtest/failtest_override.h b/lib/ccan/failtest/failtest_override.h
index 204494b086..b056d538d4 100644
--- a/lib/ccan/failtest/failtest_override.h
+++ b/lib/ccan/failtest/failtest_override.h
@@ -64,9 +64,15 @@
#define fcntl(fd, ...) failtest_fcntl((fd), __FILE__, __LINE__, __VA_ARGS__)
#undef mmap
+/* OpenBSD doesn't idempotent-protect sys/mman.h, so we can't add args. */
+#ifdef __OpenBSD__
+#define mmap(addr, length, prot, flags, fd, offset) \
+ failtest_mmap_noloc((addr), (length), (prot), (flags), (fd), (offset))
+#else
#define mmap(addr, length, prot, flags, fd, offset) \
failtest_mmap((addr), (length), (prot), (flags), (fd), (offset), \
__FILE__, __LINE__)
+#endif /* !__OpenBSD__ */
#undef lseek
#define lseek(fd, offset, whence) \
diff --git a/lib/ccan/failtest/failtest_proto.h b/lib/ccan/failtest/failtest_proto.h
index c7e6b48984..3c2df1d31d 100644
--- a/lib/ccan/failtest/failtest_proto.h
+++ b/lib/ccan/failtest/failtest_proto.h
@@ -23,6 +23,8 @@ ssize_t failtest_pwrite(int fd, const void *buf, size_t count, off_t offset,
const char *file, unsigned line);
void *failtest_mmap(void *addr, size_t length, int prot, int flags,
int fd, off_t offset, const char *file, unsigned line);
+void *failtest_mmap_noloc(void *addr, size_t length, int prot, int flags,
+ int fd, off_t offset);
off_t failtest_lseek(int fd, off_t offset, int whence,
const char *file, unsigned line);
int failtest_close(int fd, const char *file, unsigned line);