[libvirt] [PATCH] tests: Do not ignore mode parameter in mocked open()
Daniel P. Berrange
berrange at redhat.com
Wed Oct 4 12:33:16 UTC 2017
On Tue, Oct 03, 2017 at 02:07:18PM +0200, Jiri Denemark wrote:
> From: Luyao Huang <lhuang at redhat.com>
>
> 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 at redhat.com>
> ---
> 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);
> + }
This breaks the build with clang due to use of mode_t type
virfilewrapper.c:270:27: error: second argument to 'va_arg' is of promotable type 'mode_t' (aka 'unsigned short'); this va_arg has undefined behavior because arguments will be promoted to 'int' [-Werror,-Wvarargs]
mode = va_arg(ap, mode_t);
^~~~~~
I guess we should use 'int' as the arg to va_arg(), and then cast the
result back to mode_t ?
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
More information about the libvir-list
mailing list