]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Add utility functions
authorCyrill Gorcunov <gorcunov@gmail.com>
Wed, 24 Mar 2010 21:14:25 +0000 (00:14 +0300)
committerPekka Enberg <penberg@cs.helsinki.fi>
Thu, 25 Mar 2010 15:26:12 +0000 (17:26 +0200)
Move helpers out to separate files.
Mostly borrowed from perf

Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
tools/kvm/Makefile
tools/kvm/kvm.c
tools/kvm/util.c [new file with mode: 0644]
tools/kvm/util.h [new file with mode: 0644]

index d53777576681e491931ea3bebbcb056c2a0ecc89..3db5fc4c610b88aa8c60a6d469302c6c26eec3e3 100644 (file)
@@ -2,6 +2,7 @@ PROGRAM = kvm
 
 OBJS   += kvm.o
 OBJS   += cpu.o
+OBJS   += util.o
 
 CFLAGS += -Iinclude
 
index 1859f4e10ad9f08ab110ea4ab98a68d5c229a910..566a453e831596070175ea49eea5cd1f56b91e9e 100644 (file)
@@ -12,6 +12,8 @@
 #include <stdio.h>
 #include <fcntl.h>
 
+#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 (file)
index 0000000..2ef547e
--- /dev/null
@@ -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 (file)
index 0000000..3c553de
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef UTIL_H_
+#define UTIL_H_
+
+/*
+ * Some bits are stolen from perf tool :)
+ */
+
+#include <unistd.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <errno.h>
+#include <limits.h>
+#include <sys/param.h>
+#include <sys/types.h>
+
+#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_ */