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); +}