/* This file is part of libbrandt. * Copyright (C) 2016 GNUnet e.V. * * libbrandt is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * libbrandt 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 General Public License for more details. * * You should have received a copy of the GNU General Public License along with * libbrandt. If not, see . */ /** * @file util.c * @brief Implementation of common utility functions. * @author Markus Teich */ #include "brandt_config.h" #include #include #include #include #include #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[in] fmt The format string * @param[in] ap The inputs to the format string */ static void xvprintf (const char *fmt, va_list ap) { fputs ("libbrandt: ", logstream ? logstream : stderr); vfprintf (logstream ? logstream : stderr, fmt, ap); if (fmt[0] && fmt[strlen (fmt) - 1] == ':') { fputc (' ', logstream ? logstream : stderr); fputs (strerror (errno), logstream ? logstream : stderr); } else { fputc ('\n', logstream ? logstream : stderr); } } /** * eprintf prints an error message and then calls abort() to terminate the * process. * * @param[in] fmt The format string * @param[in] ... The inputs to the format string */ void eprintf (const char *fmt, ...) { va_list ap; va_start (ap, fmt); xvprintf (fmt, ap); va_end (ap); abort (); } /** * weprintf prints a warning message * * @param[in] fmt The format string * @param[in] ... The inputs to the format string */ void weprintf (const char *fmt, ...) { va_list ap; va_start (ap, fmt); xvprintf (fmt, ap); va_end (ap); }