diff options
-rw-r--r-- | libdimension/Makefile.am | 4 | ||||
-rw-r--r-- | libdimension/dimension.h | 18 | ||||
-rw-r--r-- | libdimension/dimension/error.h | 44 | ||||
-rw-r--r-- | libdimension/error.c | 22 |
4 files changed, 61 insertions, 27 deletions
diff --git a/libdimension/Makefile.am b/libdimension/Makefile.am index fa508d8..2c2d9cf 100644 --- a/libdimension/Makefile.am +++ b/libdimension/Makefile.am @@ -17,10 +17,10 @@ ## along with this program. If not, see <http://www.gnu.org/licenses/>. ## ########################################################################### -nobase_include_HEADERS = dimension.h dimension/geometry.h dimension/color.h dimension/canvas.h +nobase_include_HEADERS = dimension.h dimension/canvas.h dimension/color.h dimension/error.h dimension/geometry.h lib_LTLIBRARIES = libdimension.la -libdimension_la_SOURCES = dimension.h dimension/geometry.h dimension/color.h dimension/canvas.h canvas.c color.c error.c geometry.c +libdimension_la_SOURCES = $(nobase_include_HEADERS) canvas.c color.c error.c geometry.c libdimension_la_LDFLAGS = -version-info 0:0:0 libdimension_la_LIBADD = -lm -lpthread diff --git a/libdimension/dimension.h b/libdimension/dimension.h index df50524..97f07a5 100644 --- a/libdimension/dimension.h +++ b/libdimension/dimension.h @@ -28,23 +28,7 @@ extern "C" { #endif -/* Debug and error handling stuff */ - -typedef enum { - DMNSN_SEVERITY_LOW, /* Only die on low resilience */ - DMNSN_SEVERITY_MEDIUM, /* Die on low or medium resilience */ - DMNSN_SEVERITY_HIGH /* Always die */ -} dmnsn_severity; - -#define dmnsn_error(severity, str) \ - dmnsn_report_error(severity, __PRETTY_FUNCTION__, str) - -void dmnsn_report_error(dmnsn_severity severity, - const char *func, const char *str); -dmnsn_severity dmnsn_get_resilience(); -void dmnsn_set_resilience(dmnsn_severity resilience); - -/* More includes */ +#include <dimension/error.h> #include <dimension/geometry.h> #include <dimension/color.h> #include <dimension/canvas.h> diff --git a/libdimension/dimension/error.h b/libdimension/dimension/error.h new file mode 100644 index 0000000..9fdfdd8 --- /dev/null +++ b/libdimension/dimension/error.h @@ -0,0 +1,44 @@ +/************************************************************************* + * Copyright (C) 2008 Tavian Barnes <tavianator@gmail.com> * + * * + * This file is part of The Dimension Library. * + * * + * The Dimension 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 3 of the * + * License, or (at your option) any later version. * + * * + * The Dimension 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 program. If not, see * + * <http://www.gnu.org/licenses/>. * + *************************************************************************/ + +/* + * Error handling. + */ + +#ifndef DIMENSION_ERROR_H +#define DIMENSION_ERROR_H + +/* Debug and error handling stuff */ + +typedef enum { + DMNSN_SEVERITY_LOW, /* Only die on low resilience */ + DMNSN_SEVERITY_MEDIUM, /* Die on low or medium resilience */ + DMNSN_SEVERITY_HIGH /* Always die */ +} dmnsn_severity; + +#define dmnsn_error(severity, str) \ + dmnsn_report_error(severity, __PRETTY_FUNCTION__, __LINE__, str) + +void dmnsn_report_error(dmnsn_severity severity, + const char *func, unsigned int line, const char *str); +dmnsn_severity dmnsn_get_resilience(); +void dmnsn_set_resilience(dmnsn_severity resilience); + +#endif /* DIMENSION_ERROR_H */ diff --git a/libdimension/error.c b/libdimension/error.c index 6edf577..728652b 100644 --- a/libdimension/error.c +++ b/libdimension/error.c @@ -27,13 +27,14 @@ static dmnsn_severity dmnsn_resilience = DMNSN_SEVERITY_MEDIUM; static pthread_mutex_t dmnsn_resilience_mutex = PTHREAD_MUTEX_INITIALIZER; void -dmnsn_report_error(dmnsn_severity severity, const char *func, const char *str) +dmnsn_report_error(dmnsn_severity severity, const char *func, unsigned int line, + const char *str) { if (severity >= dmnsn_get_resilience()) { - fprintf(stderr, "Dimension ERROR: %s: %s\n", func, str); + fprintf(stderr, "Dimension ERROR: %s, line %u: %s\n", func, line, str); exit(EXIT_FAILURE); } else { - fprintf(stderr, "Dimension WARNING: %s: %s\n", func, str); + fprintf(stderr, "Dimension WARNING: %s, line %u: %s\n", func, line, str); } } @@ -42,12 +43,14 @@ dmnsn_get_resilience() { dmnsn_severity resilience; if (pthread_mutex_lock(&dmnsn_resilience_mutex) != 0) { - fprintf(stderr, "Dimension WARNING: %s: %s\n", __PRETTY_FUNCTION__, + fprintf(stderr, "Dimension WARNING: %s, line %u: %s\n", + __PRETTY_FUNCTION__, __LINE__, "Couldn't lock resilience mutex."); } resilience = dmnsn_resilience; if (pthread_mutex_unlock(&dmnsn_resilience_mutex) != 0) { - fprintf(stderr, "Dimension WARNING: %s: %s\n", __PRETTY_FUNCTION__, + fprintf(stderr, "Dimension WARNING: %s, line %u: %s\n", + __PRETTY_FUNCTION__, __LINE__, "Couldn't unlock resilience mutex."); } return resilience; @@ -57,18 +60,21 @@ void dmnsn_set_resilience(dmnsn_severity resilience) { if (resilience > DMNSN_SEVERITY_HIGH) { - fprintf(stderr, "Dimension ERROR: %s: %s\n", __PRETTY_FUNCTION__, + fprintf(stderr, "Dimension ERROR: %s, line %u: %s\n", + __PRETTY_FUNCTION__, __LINE__, "Resilience has wrong value."); exit(EXIT_FAILURE); } if (pthread_mutex_lock(&dmnsn_resilience_mutex) != 0) { - fprintf(stderr, "Dimension WARNING: %s: %s\n", __PRETTY_FUNCTION__, + fprintf(stderr, "Dimension WARNING: %s, line %u: %s\n", + __PRETTY_FUNCTION__, __LINE__, "Couldn't lock resilience mutex."); } dmnsn_resilience = resilience; if (pthread_mutex_unlock(&dmnsn_resilience_mutex) != 0) { - fprintf(stderr, "Dimension WARNING: %s: %s\n", __PRETTY_FUNCTION__, + fprintf(stderr, "Dimension WARNING: %s, line %u: %s\n", + __PRETTY_FUNCTION__, __LINE__, "Couldn't unlock resilience mutex."); } } |