From 4ed70a930202b103e7e80b8dc925e0aaa4622595 Mon Sep 17 00:00:00 2001 From: Martin Sustrik Date: Wed, 29 Jul 2009 12:07:54 +0200 Subject: initial commit --- src/err.hpp | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/err.hpp (limited to 'src/err.hpp') diff --git a/src/err.hpp b/src/err.hpp new file mode 100644 index 0000000..657eb3d --- /dev/null +++ b/src/err.hpp @@ -0,0 +1,90 @@ +/* + Copyright (c) 2007-2009 FastMQ Inc. + + This file is part of 0MQ. + + 0MQ is free software; you can redistribute it and/or modify it under + the terms of the Lesser GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + 0MQ 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 + Lesser GNU General Public License for more details. + + You should have received a copy of the Lesser GNU General Public License + along with this program. If not, see . +*/ + +#ifndef __ZS_ERR_HPP_INCLUDED__ +#define __ZS_ERR_HPP_INCLUDED__ + +#include +#include +#include +#include + +#include "platform.hpp" + +#ifdef ZS_HAVE_WINDOWS +#include "windows.hpp" +#else +#include +#endif + +#ifdef ZS_HAVE_WINDOWS + +namespace zs +{ + + const char *wsa_error (); + void win_error (char *buffer_, size_t buffer_size_); + +} + +// Provides convenient way to check WSA-style errors on Windows. +#define wsa_assert(x) do { if (!(x)){\ + const char *errstr = zs::wsa_error ();\ + if (errstr != NULL) {\ + fprintf (stderr, "Assertion failed: %s (%s:%d)\n", errstr, \ + __FILE__, __LINE__);\ + abort ();\ + }\ +}} while (false) + +// Provides convenient way to check GetLastError-style errors on Windows. +#define win_assert(x) do { if (!(x)) {\ + char errstr [256];\ + zs::win_error (errstr, 256);\ + fprintf (stderr, "Assertion failed: %s (%s:%d)\n", errstr, \ + __FILE__, __LINE__);\ + abort ();\ +}} while (false) + +#endif + +// This macro works in exactly the same way as the normal assert. It is used +// in its stead because standard assert on Win32 in broken - it prints nothing +// when used within the scope of JNI library. +#define zs_assert(x) do { if (!(x)){\ + fprintf (stderr, "Assertion failed: %s (%s:%d)\n", #x, \ + __FILE__, __LINE__);\ + abort ();\ +}} while (false) + +// Provides convenient way to check for errno-style errors. +#define errno_assert(x) do { if (!(x)) {\ + perror (NULL);\ + fprintf (stderr, "%s (%s:%d)\n", #x, __FILE__, __LINE__);\ + abort ();\ +}} while (false) + +// Provides convenient way to check for errors from getaddrinfo. +#define gai_assert(x) do { if (x) {\ + const char *errstr = gai_strerror (x);\ + fprintf (stderr, "%s (%s:%d)\n", errstr, __FILE__, __LINE__);\ + abort ();\ +}} while (false) + +#endif -- cgit v1.2.3