From: Luyao Huang <lhuang@xxxxxxxxxx> This is normally not an issue since the tests which use mocked open() do not create files. But once coverage build is enabled, gcov_open will use O_CREATE and real_open will read random data rather than the actual mode argument. Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx> --- tests/virfilewrapper.c | 13 ++++++++++++- tests/virusbmock.c | 15 ++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/tests/virfilewrapper.c b/tests/virfilewrapper.c index fede7b2e89..1d1d182708 100644 --- a/tests/virfilewrapper.c +++ b/tests/virfilewrapper.c @@ -257,10 +257,21 @@ int open(const char *path, int flags, ...) { int ret = -1; char *newpath = NULL; + va_list ap; + mode_t mode = 0; PATH_OVERRIDE(newpath, path); - ret = real_open(newpath, flags); + /* The mode argument is mandatory when O_CREAT is set in flags, + * otherwise the argument is ignored. + */ + if (flags & O_CREAT) { + va_start(ap, flags); + mode = va_arg(ap, mode_t); + va_end(ap); + } + + ret = real_open(newpath, flags, mode); VIR_FREE(newpath); diff --git a/tests/virusbmock.c b/tests/virusbmock.c index 8d60664944..f430a2edad 100644 --- a/tests/virusbmock.c +++ b/tests/virusbmock.c @@ -87,13 +87,26 @@ int open(const char *pathname, int flags, ...) { char *path; int ret; + va_list ap; + mode_t mode = 0; init_syms(); path = get_fake_path(pathname); if (!path) return -1; - ret = realopen(path, flags); + + /* The mode argument is mandatory when O_CREAT is set in flags, + * otherwise the argument is ignored. + */ + if (flags & O_CREAT) { + va_start(ap, flags); + mode = va_arg(ap, mode_t); + va_end(ap); + } + + ret = realopen(path, flags, mode); + VIR_FREE(path); return ret; } -- 2.14.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list