From db6835f616e24c3e5371c9d77d082a29a2f00ea6 Mon Sep 17 00:00:00 2001 From: Alon Levy Date: Mon, 28 Feb 2011 18:56:16 +0200 Subject: [PATCH] server/common: introduce common/spice_common.h move all the ASSERT/PANIC/PANIC_ON/red_error/red_printf* macros to a common file to be used with ring.h that is going to be used externally (by spice-gtk). --- spice_common.h | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 spice_common.h diff --git a/spice_common.h b/spice_common.h new file mode 100644 index 0000000..bacd24a --- /dev/null +++ b/spice_common.h @@ -0,0 +1,70 @@ +/* + Copyright (C) 2009 Red Hat, Inc. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, see . +*/ + +#ifndef H_SPICE_COMMON +#define H_SPICE_COMMON + +#include +#include +#include + +#define ASSERT(x) if (!(x)) { \ + printf("%s: ASSERT %s failed\n", __FUNCTION__, #x); \ + abort(); \ +} + +#define PANIC(format, ...) { \ + printf("%s: panic: " format "\n", __FUNCTION__, ## __VA_ARGS__ ); \ + abort(); \ +} + +#define PANIC_ON(x) if ((x)) { \ + printf("%s: panic %s\n", __FUNCTION__, #x); \ + abort(); \ +} + +#define red_error(format, ...) { \ + printf("%s: " format "\n", __FUNCTION__, ## __VA_ARGS__ ); \ + abort(); \ +} + +#define red_printf(format, ...) \ + printf("%s: " format "\n", __FUNCTION__, ## __VA_ARGS__ ) + +#define red_printf_once(format, ...) { \ + static int do_print = TRUE; \ + if (do_print) { \ + do_print = FALSE; \ + printf("%s: " format "\n", __FUNCTION__, ## __VA_ARGS__ ); \ + } \ +} + +#define red_printf_some(every, format, ...) { \ + static int count = 0; \ + if (count++ % (every) == 0) { \ + printf("%s: " format "\n", __FUNCTION__, ## __VA_ARGS__ ); \ + } \ +} + +static inline uint64_t get_time_stamp() +{ + struct timespec time_space; + clock_gettime(CLOCK_MONOTONIC, &time_space); + return time_space.tv_sec * 1000 * 1000 * 1000 + time_space.tv_nsec; +} + +#endif