From 0d407904ddede0a7b5a0c2c77e9a6be7fb3bade0 Mon Sep 17 00:00:00 2001 From: Alexander Egorenkov Date: Wed, 24 Nov 2021 15:17:22 +0100 Subject: [PATCH] zdump/zg: Convert print macros to functions which can be mocked MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change allows mocking of print macros in unit tests. Being able to do this in unit tests, enables us to catch output from zgetdump functions and test it. Signed-off-by: Alexander Egorenkov Reviewed-by: Marc Hartmayer Signed-off-by: Jan Höppner --- zdump/Makefile | 2 +- zdump/zg.h | 23 ++++++-------------- zdump/zg_print.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 18 deletions(-) create mode 100644 zdump/zg_print.c diff --git a/zdump/Makefile b/zdump/Makefile index 3d6817a0..81700746 100644 --- a/zdump/Makefile +++ b/zdump/Makefile @@ -41,7 +41,7 @@ check_dep_zlib: all: check_dep_fuse check_dep_zlib zgetdump -OBJECTS = zgetdump.o opts.o zg.o zg_error.o \ +OBJECTS = zgetdump.o opts.o zg.o zg_error.o zg_print.o \ dfi.o dfi_mem_chunk.o dfi_vmcoreinfo.o \ dfi_lkcd.o dfi_elf.o \ dfi_s390.o dfi_s390_ext.o\ diff --git a/zdump/zg.h b/zdump/zg.h index 627bb9ca..dc1bdace 100644 --- a/zdump/zg.h +++ b/zdump/zg.h @@ -82,24 +82,13 @@ void zg_abort(const char *fmt, ...); #define ERR_EXIT_ERRNO(fmt, ...) zg_err_exit_errno(fmt, ## __VA_ARGS__) #define ABORT(fmt, ...) zg_abort(fmt, ## __VA_ARGS__) -#define STDERR(x...) \ -do { \ - fprintf(stderr, x); \ - fflush(stderr); \ -} while (0) - -#define STDERR_PR(x...) \ -do { \ - fprintf(stderr, "\r%s: ", "zgetdump"); \ - fprintf(stderr, x); \ -} while (0) - -#define STDOUT(x...) \ -do { \ - fprintf(stdout, x); \ - fflush(stdout); \ -} while (0) +void zg_stderr(const char *fmt, ...); +void zg_stderr_pr(const char *fmt, ...); +void zg_stdout(const char *fmt, ...); +#define STDERR(fmt, ...) zg_stderr(fmt, ## __VA_ARGS__) +#define STDERR_PR(fmt, ...) zg_stderr_pr(fmt, ## __VA_ARGS__) +#define STDOUT(fmt, ...) zg_stdout(fmt, ## __VA_ARGS__) /* * Misc */ diff --git a/zdump/zg_print.c b/zdump/zg_print.c new file mode 100644 index 00000000..80c60c24 --- /dev/null +++ b/zdump/zg_print.c @@ -0,0 +1,55 @@ +/* + * Copyright IBM Corp. 2001, 2017, 2021 + * + * s390-tools is free software; you can redistribute it and/or modify + * it under the terms of the MIT license. See LICENSE for details. + */ + +#include + +#include "zg.h" + +static inline void _zg_stderr(const char *fmt, va_list ap) +{ + vfprintf(stderr, fmt, ap); + fflush(stderr); +} + +static inline void _zg_stderr_pr(const char *fmt, va_list ap) +{ + fprintf(stderr, "\r%s: ", "zgetdump"); + vfprintf(stderr, fmt, ap); +} + +static inline void _zg_stdout(const char *fmt, va_list ap) +{ + vfprintf(stdout, fmt, ap); + fflush(stdout); +} + +void zg_stderr(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + _zg_stderr(fmt, ap); + va_end(ap); +} + +void zg_stderr_pr(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + _zg_stderr_pr(fmt, ap); + va_end(ap); +} + +void zg_stdout(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + _zg_stdout(fmt, ap); + va_end(ap); +}