X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ffailtest%2Ffailtest.h;h=9af5669678f2295edccb5cbea4cb777016f40b8f;hp=294c28b970066fda3b0e22fb3bf7ffe03140ad72;hb=c438ec17d7b2efe76e56e5fc5ab88bd4a02735e8;hpb=9571a41e8494f3135557e3ec50c2de856392173e diff --git a/ccan/failtest/failtest.h b/ccan/failtest/failtest.h index 294c28b9..9af56696 100644 --- a/ccan/failtest/failtest.h +++ b/ccan/failtest/failtest.h @@ -47,6 +47,8 @@ enum failtest_call_type { FAILTEST_READ, FAILTEST_WRITE, FAILTEST_FCNTL, + FAILTEST_MMAP, + FAILTEST_LSEEK }; struct calloc_call { @@ -71,6 +73,10 @@ struct open_call { const char *pathname; int flags; mode_t mode; + bool always_save; + bool closed; + /* This is used for O_TRUNC opens on existing files. */ + struct contents_saved *saved; }; struct close_call { @@ -97,6 +103,9 @@ struct write_call { const void *buf; size_t count; off_t off; + bool is_pwrite; + struct failtest_call *opener; + struct contents_saved *saved; }; struct fcntl_call { @@ -110,6 +119,26 @@ struct fcntl_call { } arg; }; +struct mmap_call { + void *ret; + void *addr; + size_t length; + int prot; + int flags; + int fd; + off_t offset; + struct failtest_call *opener; + struct contents_saved *saved; +}; + +struct lseek_call { + ssize_t ret; + int fd; + off_t offset; + int whence; + off_t old_off; +}; + /** * struct failtest_call - description of a call redirected to failtest module * @type: the call type @@ -136,7 +165,12 @@ struct failtest_call { /* What we set errno to. */ int error; /* How do we clean this up? */ - void (*cleanup)(void *u); + void (*cleanup)(void *u, bool restore); + /* Should their program have cleaned up? */ + bool can_leak; + /* Backtrace of call chain. */ + void **backtrace; + unsigned int backtrace_num; /* The actual call data. */ union { struct calloc_call calloc; @@ -148,6 +182,8 @@ struct failtest_call { struct read_call read; struct write_call write; struct fcntl_call fcntl; + struct mmap_call mmap; + struct lseek_call lseek; } u; }; @@ -178,7 +214,7 @@ enum failtest_result { * static enum failtest_result dont_fail_alloc(struct tlist_calls *history) * { * struct failtest_call *call; - * call = tlist_tail(history, struct failtest_call, list); + * call = tlist_tail(history, list); * if (call->type == FAILTEST_MALLOC * || call->type == FAILTEST_CALLOC * || call->type == FAILTEST_REALLOC)