From a45356a50cb18d73b34f6e9485f843c1f120b8e6 Mon Sep 17 00:00:00 2001 From: Cyrill Gorcunov Date: Thu, 25 Mar 2010 00:14:25 +0300 Subject: [PATCH] Add utility functions Move helpers out to separate files. Mostly borrowed from perf Signed-off-by: Cyrill Gorcunov Signed-off-by: Pekka Enberg --- tools/kvm/Makefile | 1 + tools/kvm/kvm.c | 20 ++------------- tools/kvm/util.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++ tools/kvm/util.h | 44 ++++++++++++++++++++++++++++++++ 4 files changed, 109 insertions(+), 18 deletions(-) create mode 100644 tools/kvm/util.c create mode 100644 tools/kvm/util.h diff --git a/tools/kvm/Makefile b/tools/kvm/Makefile index d53777576681..3db5fc4c610b 100644 --- a/tools/kvm/Makefile +++ b/tools/kvm/Makefile @@ -2,6 +2,7 @@ PROGRAM = kvm OBJS += kvm.o OBJS += cpu.o +OBJS += util.o CFLAGS += -Iinclude diff --git a/tools/kvm/kvm.c b/tools/kvm/kvm.c index 1859f4e10ad9..566a453e8315 100644 --- a/tools/kvm/kvm.c +++ b/tools/kvm/kvm.c @@ -12,6 +12,8 @@ #include #include +#include "util.h" + /* * Compatibility code. Remove this when we move to tools/kvm. */ @@ -31,24 +33,6 @@ struct kvm { struct kvm_regs regs; }; -static void die_perror(const char *s) -{ - perror(s); - exit(1); -} - -static void die(const char *format, ...) -{ - va_list ap; - - va_start(ap, format); - vprintf(format, ap); - va_end(ap); - - printf("\n"); - exit(1); -} - static inline bool kvm__supports_extension(struct kvm *self, unsigned int extension) { int ret; diff --git a/tools/kvm/util.c b/tools/kvm/util.c new file mode 100644 index 000000000000..2ef547e3180c --- /dev/null +++ b/tools/kvm/util.c @@ -0,0 +1,62 @@ +/* + * Taken from perf which in turn take it from GIT + */ + +#include "util.h" + +static void report(const char *prefix, const char *err, va_list params) +{ + char msg[1024]; + vsnprintf(msg, sizeof(msg), err, params); + fprintf(stderr, " %s%s\n", prefix, msg); +} + +static NORETURN void die_builtin(const char *err, va_list params) +{ + report(" Fatal: ", err, params); + exit(128); +} + +static void error_builtin(const char *err, va_list params) +{ + report(" Error: ", err, params); +} + +static void warn_builtin(const char *warn, va_list params) +{ + report(" Warning: ", warn, params); +} + +void die(const char *err, ...) +{ + va_list params; + + va_start(params, err); + die_builtin(err, params); + va_end(params); +} + +int error(const char *err, ...) +{ + va_list params; + + va_start(params, err); + error_builtin(err, params); + va_end(params); + return -1; +} + +void warning(const char *warn, ...) +{ + va_list params; + + va_start(params, warn); + warn_builtin(warn, params); + va_end(params); +} + +void die_perror(const char *s) +{ + perror(s); + exit(1); +} diff --git a/tools/kvm/util.h b/tools/kvm/util.h new file mode 100644 index 000000000000..3c553de5db31 --- /dev/null +++ b/tools/kvm/util.h @@ -0,0 +1,44 @@ +#ifndef UTIL_H_ +#define UTIL_H_ + +/* + * Some bits are stolen from perf tool :) + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __GNUC__ +#define NORETURN __attribute__((__noreturn__)) +#else +#define NORETURN +#ifndef __attribute__ +#define __attribute__(x) +#endif +#endif + +#define __stringify_1(x) #x +#define __stringify(x) __stringify_1(x) + +extern void die(const char *err, ...) NORETURN __attribute__((format (printf, 1, 2))); +extern void die_perror(const char *s) NORETURN; +extern int error(const char *err, ...) __attribute__((format (printf, 1, 2))); +extern void warning(const char *err, ...) __attribute__((format (printf, 1, 2))); +extern void set_die_routine(void (*routine)(const char *err, va_list params) NORETURN); + +#define DIE_IF(cnd) \ +do { \ + if (cnd) \ + die(" at (" __FILE__ ":" __stringify(__LINE__) "): " \ + __stringify(cnd) "\n"); \ +} while (0) + +#endif /* UTIL_H_ */ -- 2.39.5