diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/io_real.c | 17 | ||||
| -rw-r--r-- | tests/tests.c | 2 | ||||
| -rw-r--r-- | tests/wraps.h | 2 | 
3 files changed, 20 insertions, 1 deletions
| diff --git a/tests/io_real.c b/tests/io_real.c index 9f9e9d6d..429027fb 100644 --- a/tests/io_real.c +++ b/tests/io_real.c @@ -25,6 +25,12 @@ static int io_real_open(void *state, const char *pathname, int flags, mode_t mod  	return __real_open(pathname, flags, mode);  } +static FILE *io_real_fopen(void *state, const char *pathname, const char *mode) +{ +	LOG_ME; +	return __real_fopen(pathname, mode); +} +  static FILE *io_real_fdopen(void *state, int fd, const char *mode)  {  	LOG_ME; @@ -36,13 +42,21 @@ static size_t io_real_fwrite(void *state, const void *ptr, size_t size, size_t n  	return __real_fwrite(ptr, size, nmemb, fp);  } +static int io_real_fclose(void *state, FILE *fp) +{ +	LOG_ME; +	return __real_fclose(fp); +} +  /* Mock ios that defer to the real io functions.   * These exist so that code coverage can print to real files on disk.   */  static const struct io_mock real_io = {  	.iom_open = io_real_open, +	.iom_fopen = io_real_fopen,  	.iom_fwrite = io_real_fwrite,  	.iom_fdopen = io_real_fdopen, +	.iom_fclose = io_real_fclose,  };  /* Return 0 if string ends with suffix. */ @@ -58,6 +72,7 @@ static int check_suffix(const char *string, const char *suffix)  void maybe_unmock_io(const char *pathname)  {  	const char *gcov_suffix = ".gcda"; -	if (!check_suffix(pathname, gcov_suffix)) +	const char *llvm_cov_suffix = ".profraw"; +	if (!check_suffix(pathname, gcov_suffix) || !check_suffix(pathname, llvm_cov_suffix))  		io_mock_register(&real_io);  } diff --git a/tests/tests.c b/tests/tests.c index b11f6421..a1dcacae 100644 --- a/tests/tests.c +++ b/tests/tests.c @@ -170,6 +170,7 @@ int __wrap_read(int fd, void *buf, size_t sz)  FILE *__wrap_fopen(const char *pathname, const char *mode)  {  	LOG_ME; +	maybe_unmock_io(pathname);  	if (get_io() && get_io()->iom_fopen)  		return get_io()->iom_fopen(get_io()->state, pathname, mode);  	return not_null(); @@ -178,6 +179,7 @@ FILE *__wrap_fopen(const char *pathname, const char *mode)  FILE *__wrap_fopen64(const char *pathname, const char *mode)  {  	LOG_ME; +	maybe_unmock_io(pathname);  	if (get_io() && get_io()->iom_fopen)  		return get_io()->iom_fopen(get_io()->state, pathname, mode);  	return not_null(); diff --git a/tests/wraps.h b/tests/wraps.h index 92b0c42c..6cc95677 100644 --- a/tests/wraps.h +++ b/tests/wraps.h @@ -36,6 +36,7 @@ int __wrap_ioctl(int fd, unsigned long int request, ...);  int __wrap_write(int fd, const void *buf, size_t sz);  int __wrap_read(int fd, void *buf, size_t sz);  FILE *__wrap_fopen(const char *pathname, const char *mode); +FILE *__real_fopen(const char *pathname, const char *mode);  FILE *__wrap_fopen64(const char *pathname, const char *mode);  FILE *__wrap_fdopen(int fd, const char *mode);  FILE *__real_fdopen(int fd, const char *mode); @@ -59,6 +60,7 @@ int __wrap_setvbuf(FILE *fp, char *buf, int type, size_t size);  int __wrap_fprintf(FILE *fp, const char *fmt, ...);  int __wrap___vfprintf_chk(FILE *fp, const char *fmt, va_list args);  int __wrap_fclose(FILE *fp); +int __real_fclose(FILE *fp);  int __wrap_feof(FILE *fp);  int __wrap_ferror(FILE *fp);  void __wrap_clearerr(FILE *fp); | 
