X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Fcommon_logging.c;h=0cefa194d128bebe8311614e53f0e14f4061f124;hb=17516001adc7afeea0c32a226e0cd7090813241a;hp=5faa4af73d13dde9ac01e99f6c1c9e91f469ac5b;hpb=de3edfe8540884dc55e90d3ab18eae3449cba04f;p=oweals%2Fgnunet.git diff --git a/src/util/common_logging.c b/src/util/common_logging.c index 5faa4af73..0cefa194d 100644 --- a/src/util/common_logging.c +++ b/src/util/common_logging.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2006-2013 Christian Grothoff (and other contributing authors) + Copyright (C) 2006-2013 GNUnet e.V. GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -14,8 +14,8 @@ You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /** @@ -24,7 +24,8 @@ * @author Christian Grothoff */ #include "platform.h" -#include "gnunet_util_lib.h" +#include "gnunet_crypto_lib.h" +#include "gnunet_strings_lib.h" #include @@ -148,7 +149,7 @@ static struct CustomLogger *loggers; /** * Number of log calls to ignore. */ -int skip_log = 0; +static int skip_log = 0; /** * File descriptor to use for "stderr", or NULL for none. @@ -281,7 +282,7 @@ resize_logdefs () * Abort the process, generate a core dump if possible. */ void -GNUNET_abort () +GNUNET_abort_ () { #if WINDOWS DebugBreak (); @@ -328,7 +329,6 @@ setup_log_file (const struct tm *tm) { static char last_fn[PATH_MAX + 1]; char fn[PATH_MAX + 1]; - int dirwarn; int altlog_fd; int dup_return; FILE *altlog; @@ -342,17 +342,21 @@ setup_log_file (const struct tm *tm) if ( (NULL != leftsquare) && (']' == leftsquare[1]) ) { char *logfile_copy = GNUNET_strdup (fn); + logfile_copy[leftsquare - fn] = '\0'; logfile_copy[leftsquare - fn + 1] = '\0'; - snprintf (fn, PATH_MAX, "%s%d%s", - logfile_copy, getpid (), &logfile_copy[leftsquare - fn + 2]); + snprintf (fn, + PATH_MAX, + "%s%d%s", + logfile_copy, + getpid (), + &logfile_copy[leftsquare - fn + 2]); GNUNET_free (logfile_copy); } if (0 == strcmp (fn, last_fn)) return GNUNET_OK; /* no change */ log_rotate (last_fn); strcpy (last_fn, fn); - dirwarn = (GNUNET_OK != GNUNET_DISK_directory_create_for_file (fn)); #if WINDOWS altlog_fd = OPEN (fn, O_APPEND | O_BINARY | @@ -386,16 +390,13 @@ setup_log_file (const struct tm *tm) if (-1 == altlog_fd) { GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, "open", fn); - if (dirwarn) - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - _("Failed to create or access directory for log file `%s'\n"), - fn); return GNUNET_SYSERR; } GNUNET_stderr = altlog; return GNUNET_OK; } + /** * Utility function - adds a parsed definition to logdefs array. * @@ -409,8 +410,13 @@ setup_log_file (const struct tm *tm) * @return 0 on success, regex-specific error otherwise */ static int -add_definition (char *component, char *file, char *function, int from_line, - int to_line, int level, int force) +add_definition (const char *component, + const char *file, + const char *function, + int from_line, + int to_line, + int level, + int force) { struct LogDef n; int r; @@ -465,8 +471,11 @@ add_definition (char *component, char *file, char *function, int from_line, * @return 0 to disallow the call, 1 to allow it */ int -GNUNET_get_log_call_status (int caller_level, const char *comp, - const char *file, const char *function, int line) +GNUNET_get_log_call_status (int caller_level, + const char *comp, + const char *file, + const char *function, + int line) { struct LogDef *ld; int i; @@ -700,13 +709,17 @@ GNUNET_log_setup (const char *comp, /** - * Add a custom logger. + * Add a custom logger. Note that installing any custom logger + * will disable the standard logger. When multiple custom loggers + * are installed, all will be called. The standard logger will + * only be used if no custom loggers are present. * * @param logger log function * @param logger_cls closure for @a logger */ void -GNUNET_logger_add (GNUNET_Logger logger, void *logger_cls) +GNUNET_logger_add (GNUNET_Logger logger, + void *logger_cls) { struct CustomLogger *entry; @@ -725,7 +738,8 @@ GNUNET_logger_add (GNUNET_Logger logger, void *logger_cls) * @param logger_cls closure for @a logger */ void -GNUNET_logger_remove (GNUNET_Logger logger, void *logger_cls) +GNUNET_logger_remove (GNUNET_Logger logger, + void *logger_cls) { struct CustomLogger *pos; struct CustomLogger *prev; @@ -760,17 +774,26 @@ CRITICAL_SECTION output_message_cs; * @param msg the actual message */ static void -output_message (enum GNUNET_ErrorType kind, const char *comp, - const char *datestr, const char *msg) +output_message (enum GNUNET_ErrorType kind, + const char *comp, + const char *datestr, + const char *msg) { struct CustomLogger *pos; + #if WINDOWS EnterCriticalSection (&output_message_cs); #endif - if (NULL != GNUNET_stderr) + /* only use the standard logger if no custom loggers are present */ + if ( (NULL != GNUNET_stderr) && + (NULL == loggers) ) { - FPRINTF (GNUNET_stderr, "%s %s %s %s", datestr, comp, - GNUNET_error_type_to_string (kind), msg); + FPRINTF (GNUNET_stderr, + "%s %s %s %s", + datestr, + comp, + GNUNET_error_type_to_string (kind), + msg); fflush (GNUNET_stderr); } pos = loggers; @@ -1137,11 +1160,12 @@ GNUNET_i2s_full (const struct GNUNET_PeerIdentity *pid) * will be overwritten by next call to #GNUNET_a2s. */ const char * -GNUNET_a2s (const struct sockaddr *addr, socklen_t addrlen) +GNUNET_a2s (const struct sockaddr *addr, + socklen_t addrlen) { #ifndef WINDOWS #define LEN GNUNET_MAX ((INET6_ADDRSTRLEN + 8), \ - (sizeof (struct sockaddr_un) - sizeof (sa_family_t))) + (1 + sizeof (struct sockaddr_un) - sizeof (sa_family_t))) #else #define LEN (INET6_ADDRSTRLEN + 8) #endif @@ -1188,9 +1212,12 @@ GNUNET_a2s (const struct sockaddr *addr, socklen_t addrlen) if ('\0' == un->sun_path[0]) off++; memset (buf, 0, sizeof (buf)); - snprintf (buf, sizeof (buf) - 1, "%s%.*s", (off == 1) ? "@" : "", - (int) (addrlen - sizeof (sa_family_t) - 1 - off), - &un->sun_path[off]); + GNUNET_snprintf (buf, + sizeof (buf), + "%s%.*s", + (1 == off) ? "@" : "", + (int) (addrlen - sizeof (sa_family_t) - off), + &un->sun_path[off]); return buf; default: return _("invalid address"); @@ -1249,7 +1276,7 @@ GNUNET_util_cl_init () #endif #if WINDOWS if (!InitializeCriticalSectionAndSpinCount (&output_message_cs, 0x00000400)) - GNUNET_abort (); + GNUNET_abort_ (); #endif }