diff --git a/uncrustify/conf b/uncrustify/conf index b901341..c89e346 100644 --- a/uncrustify/conf +++ b/uncrustify/conf @@ -1373,7 +1373,7 @@ pp_indent = ignore # ignore/add/remove/force pp_indent_at_level = false # false/true # If pp_indent_at_level=false, specifies the number of columns to indent per level. Default=1. -pp_indent_count = 1 # number +pp_indent_count = 0 # number # Add or remove space after # based on pp_level of #if blocks pp_space = ignore # ignore/add/remove/force diff --git a/util.c b/util.c index 2b44710..1eff0d4 100644 --- a/util.c +++ b/util.c @@ -16,9 +16,10 @@ /** * @file util.c - * @brief \todo + * @brief Implementation of common utility functions. * @author Markus Teich */ +#include #include #include #include @@ -27,30 +28,44 @@ #include "util.h" +static FILE *logstream = NULL; + + +/** + * setlog sets another output for logging. + * + * @param[in] stream The new logging target. + */ +void +setlog (FILE *stream) +{ + logstream = stream; +} + + /** * xvprintf prints a formatstring with prefix "libbrandt: ". If the format * string ends with a ':', the strerror() from errno.h output will be appended. * The output is always terminated with a newline. * - * @param fmt The format string - * @param ap The inputs to the format string + * @param[in] fmt The format string + * @param[in] ap The inputs to the format string */ -void +static void xvprintf (const char *fmt, va_list ap) { - /**\todo: provide other logging target than stderr */ - fputs ("libbrandt: ", stderr); + fputs ("libbrandt: ", logstream ? logstream : stderr); - vfprintf (stderr, fmt, ap); + vfprintf (logstream ? logstream : stderr, fmt, ap); if (fmt[0] && fmt[strlen (fmt) - 1] == ':') { - fputc (' ', stderr); - perror (NULL); + fputc (' ', logstream ? logstream : stderr); + fputs (strerror (errno), logstream ? logstream : stderr); } else { - fputc ('\n', stderr); + fputc ('\n', logstream ? logstream : stderr); } } @@ -59,8 +74,8 @@ xvprintf (const char *fmt, va_list ap) * eprintf prints an error message and then calls abort() to terminate the * process. * - * @param fmt The format string - * @param ... The inputs to the format string + * @param[in] fmt The format string + * @param[in] ... The inputs to the format string */ void eprintf (const char *fmt, ...) @@ -78,8 +93,8 @@ eprintf (const char *fmt, ...) /** * weprintf prints a warning message * - * @param fmt The format string - * @param ... The inputs to the format string + * @param[in] fmt The format string + * @param[in] ... The inputs to the format string */ void weprintf (const char *fmt, ...) diff --git a/util.h b/util.h index d21cc89..faf893a 100644 --- a/util.h +++ b/util.h @@ -16,38 +16,58 @@ /** * @file util.h - * @brief \todo + * @brief Interface for the common utility functions. * @author Markus Teich */ #ifndef _BRANDT_UTIL_H #define _BRANDT_UTIL_H -void eprintf(const char *fmt, ...); -void weprintf(const char *fmt, ...); +void setlog (FILE *stream); +void eprintf (const char *fmt, ...); +void weprintf (const char *fmt, ...); -# undef brandt_assert -# undef brandt_assert_perror -# undef brandt_assert_gpgerr +#undef brandt_assert +#undef brandt_assert_perror +#undef brandt_assert_gpgerr #ifdef NDEBUG -# define brandt_assert(expr) ((expr) ? (void)(0) : \ -eprintf("Assertion failed in file %s line %d function %s: %s", __FILE__, __LINE__, __PRETTY_FUNCTION__, (#expr))) -# define brandt_assert_perror(errnum) (!(errnum) ? (void)(0) : \ -eprintf("Assertion failed in file %s line %d function %s:", __FILE__, __LINE__, __PRETTY_FUNCTION__)) -# define brandt_assert_gpgerr(errnum) (!(errnum) ? (void)(0) : \ -eprintf("Assertion failed in file %s line %d function %s: %s", __FILE__, __LINE__, __PRETTY_FUNCTION__, gcry_strerror((errnum)))) +#define brandt_assert(expr) do { \ + (expr) ? (void)(0) : eprintf ( \ + "Assertion failed in file %s line %d function %s: %s", \ + __FILE__, \ + __LINE__, \ + __PRETTY_FUNCTION__, \ + (# expr)); \ +} while (0) -# define DP(point) ((void)(gcry_log_debugpnt (#point, point, ec_ctx))) -# define DM(mpi) ((void)(gcry_log_debugmpi (#mpi, mpi, ec_ctx))) +#define brandt_assert_perror(errnum) do { \ + !(errnum) ? (void)(0) : eprintf ( \ + "Assertion failed in file %s line %d function %s:", \ + __FILE__, \ + __LINE__, \ + __PRETTY_FUNCTION__); \ +} while (0) -#else +#define brandt_assert_gpgerr(errnum) do { \ + !(errnum) ? (void)(0) : eprintf ( \ + "Assertion failed in file %s line %d function %s: %s", \ + __FILE__, \ + __LINE__, \ + __PRETTY_FUNCTION__, \ + gcry_strerror ((errnum))); \ +} while (0) -# define brandt_assert(expr) ((void)(expr)) -# define brandt_assert_perror(errnum) ((void)(errnum)) -# define brandt_assert_gpgerr(errnum) ((void)(errnum)) +#define DP(point) ((void)(gcry_log_debugpnt (# point, point, ec_ctx))) +#define DM(mpi) ((void)(gcry_log_debugmpi (# mpi, mpi, ec_ctx))) -#endif +#else /* ifdef NDEBUG */ -#endif +#define brandt_assert(expr) ((void)(expr)) +#define brandt_assert_perror(errnum) ((void)(errnum)) +#define brandt_assert_gpgerr(errnum) ((void)(errnum)) + +#endif /* ifdef NDEBUG */ + +#endif /* ifndef _BRANDT_UTIL_H */