aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-07-13 13:38:51 +0200
committerChristian Grothoff <christian@grothoff.org>2016-07-13 13:38:51 +0200
commit442078e737beac4161236ebe1ee67b7c483f24df (patch)
treedf8178df6661fa41c439fadc13c227ca0ccfd5de
parentae6f37b6298e855dbe998637cffba15493a62c0d (diff)
parent8a1d2917f64d425212f0a3d2e8d91ca9f3c20122 (diff)
Merge branch 'master' of gnunet.org:libbrandt
-rw-r--r--uncrustify/conf2
-rw-r--r--util.c43
-rw-r--r--util.h60
3 files changed, 70 insertions, 35 deletions
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 <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
@@ -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 */