Merge branch 'master' of gnunet.org:libbrandt

This commit is contained in:
Christian Grothoff 2016-07-13 13:38:51 +02:00
commit 442078e737
3 changed files with 70 additions and 35 deletions

View File

@ -1373,7 +1373,7 @@ pp_indent = ignore # ignore/add/remove/force
pp_indent_at_level = false # false/true pp_indent_at_level = false # false/true
# If pp_indent_at_level=false, specifies the number of columns to indent per level. Default=1. # 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 # Add or remove space after # based on pp_level of #if blocks
pp_space = ignore # ignore/add/remove/force pp_space = ignore # ignore/add/remove/force

43
util.c
View File

@ -16,9 +16,10 @@
/** /**
* @file util.c * @file util.c
* @brief \todo * @brief Implementation of common utility functions.
* @author Markus Teich * @author Markus Teich
*/ */
#include <errno.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -27,30 +28,44 @@
#include "util.h" #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 * xvprintf prints a formatstring with prefix "libbrandt: ". If the format
* string ends with a ':', the strerror() from errno.h output will be appended. * string ends with a ':', the strerror() from errno.h output will be appended.
* The output is always terminated with a newline. * The output is always terminated with a newline.
* *
* @param fmt The format string * @param[in] fmt The format string
* @param ap The inputs to the format string * @param[in] ap The inputs to the format string
*/ */
void static void
xvprintf (const char *fmt, va_list ap) xvprintf (const char *fmt, va_list ap)
{ {
/**\todo: provide other logging target than stderr */ fputs ("libbrandt: ", logstream ? logstream : stderr);
fputs ("libbrandt: ", stderr);
vfprintf (stderr, fmt, ap); vfprintf (logstream ? logstream : stderr, fmt, ap);
if (fmt[0] && fmt[strlen (fmt) - 1] == ':') if (fmt[0] && fmt[strlen (fmt) - 1] == ':')
{ {
fputc (' ', stderr); fputc (' ', logstream ? logstream : stderr);
perror (NULL); fputs (strerror (errno), logstream ? logstream : stderr);
} }
else 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 * eprintf prints an error message and then calls abort() to terminate the
* process. * process.
* *
* @param fmt The format string * @param[in] fmt The format string
* @param ... The inputs to the format string * @param[in] ... The inputs to the format string
*/ */
void void
eprintf (const char *fmt, ...) eprintf (const char *fmt, ...)
@ -78,8 +93,8 @@ eprintf (const char *fmt, ...)
/** /**
* weprintf prints a warning message * weprintf prints a warning message
* *
* @param fmt The format string * @param[in] fmt The format string
* @param ... The inputs to the format string * @param[in] ... The inputs to the format string
*/ */
void void
weprintf (const char *fmt, ...) weprintf (const char *fmt, ...)

40
util.h
View File

@ -16,13 +16,14 @@
/** /**
* @file util.h * @file util.h
* @brief \todo * @brief Interface for the common utility functions.
* @author Markus Teich * @author Markus Teich
*/ */
#ifndef _BRANDT_UTIL_H #ifndef _BRANDT_UTIL_H
#define _BRANDT_UTIL_H #define _BRANDT_UTIL_H
void setlog (FILE *stream);
void eprintf (const char *fmt, ...); void eprintf (const char *fmt, ...);
void weprintf (const char *fmt, ...); void weprintf (const char *fmt, ...);
@ -32,22 +33,41 @@ void weprintf(const char *fmt, ...);
#ifdef NDEBUG #ifdef NDEBUG
# define brandt_assert(expr) ((expr) ? (void)(0) : \ #define brandt_assert(expr) do { \
eprintf("Assertion failed in file %s line %d function %s: %s", __FILE__, __LINE__, __PRETTY_FUNCTION__, (#expr))) (expr) ? (void)(0) : eprintf ( \
# define brandt_assert_perror(errnum) (!(errnum) ? (void)(0) : \ "Assertion failed in file %s line %d function %s: %s", \
eprintf("Assertion failed in file %s line %d function %s:", __FILE__, __LINE__, __PRETTY_FUNCTION__)) __FILE__, \
# define brandt_assert_gpgerr(errnum) (!(errnum) ? (void)(0) : \ __LINE__, \
eprintf("Assertion failed in file %s line %d function %s: %s", __FILE__, __LINE__, __PRETTY_FUNCTION__, gcry_strerror((errnum)))) __PRETTY_FUNCTION__, \
(# expr)); \
} while (0)
#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)
#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 DP(point) ((void)(gcry_log_debugpnt (# point, point, ec_ctx))) #define DP(point) ((void)(gcry_log_debugpnt (# point, point, ec_ctx)))
#define DM(mpi) ((void)(gcry_log_debugmpi (# mpi, mpi, ec_ctx))) #define DM(mpi) ((void)(gcry_log_debugmpi (# mpi, mpi, ec_ctx)))
#else #else /* ifdef NDEBUG */
#define brandt_assert(expr) ((void)(expr)) #define brandt_assert(expr) ((void)(expr))
#define brandt_assert_perror(errnum) ((void)(errnum)) #define brandt_assert_perror(errnum) ((void)(errnum))
#define brandt_assert_gpgerr(errnum) ((void)(errnum)) #define brandt_assert_gpgerr(errnum) ((void)(errnum))
#endif #endif /* ifdef NDEBUG */
#endif #endif /* ifndef _BRANDT_UTIL_H */