/**
* @file util/common_logging.c
* @brief error handling API
- *
* @author Christian Grothoff
*/
#include "platform.h"
-#include "gnunet_common.h"
#include "gnunet_util_lib.h"
#include <regex.h>
* Rotate logs, deleting the oldest log.
*
* @param new_name new name to add to the rotation
- */
+ */
static void
log_rotate (const char *new_name)
{
GNUNET_free (discard);
}
rotation[rotation_off % ROTATION_KEEP] = GNUNET_strdup (new_name);
- rotation_off++;
+ rotation_off++;
}
* Setup the log file.
*
* @param tm timestamp for which we should setup logging
- * @return GNUNET_OK on success, GNUNET_SYSERR on error
+ * @return #GNUNET_OK on success, #GNUNET_SYSERR on error
*/
static int
setup_log_file (const struct tm *tm)
{
- static char last_fn[PATH_MAX + 1];
+ static char last_fn[PATH_MAX + 1];
char fn[PATH_MAX + 1];
int dirwarn;
int altlog_fd;
int dup_return;
FILE *altlog;
char *leftsquare;
-
+
if (NULL == log_file_name)
return GNUNET_SYSERR;
if (0 == strftime (fn, sizeof (fn), log_file_name, tm))
fn);
return GNUNET_SYSERR;
}
- GNUNET_stderr = altlog;
+ GNUNET_stderr = altlog;
return GNUNET_OK;
}
* @param comp default component to use
* @param loglevel what types of messages should be logged
* @param logfile which file to write log messages to (can be NULL)
- * @return GNUNET_OK on success
+ * @return #GNUNET_OK on success
*/
int
-GNUNET_log_setup (const char *comp, const char *loglevel, const char *logfile)
+GNUNET_log_setup (const char *comp,
+ const char *loglevel,
+ const char *logfile)
{
const char *env_logfile;
const struct tm *tm;
* Add a custom logger.
*
* @param logger log function
- * @param logger_cls closure for logger
+ * @param logger_cls closure for @a logger
*/
void
GNUNET_logger_add (GNUNET_Logger logger, void *logger_cls)
{
struct CustomLogger *entry;
- entry = GNUNET_malloc (sizeof (struct CustomLogger));
+ entry = GNUNET_new (struct CustomLogger);
entry->logger = logger;
entry->logger_cls = logger_cls;
entry->next = loggers;
* Remove a custom logger.
*
* @param logger log function
- * @param logger_cls closure for logger
+ * @param logger_cls closure for @a logger
*/
void
GNUNET_logger_remove (GNUNET_Logger logger, void *logger_cls)
prev = NULL;
pos = loggers;
- while ((pos != NULL) &&
+ while ((NULL != pos) &&
((pos->logger != logger) || (pos->logger_cls != logger_cls)))
{
prev = pos;
pos = pos->next;
}
- GNUNET_assert (pos != NULL);
- if (prev == NULL)
+ GNUNET_assert (NULL != pos);
+ if (NULL == prev)
loggers = pos->next;
else
prev->next = pos->next;
* Ignore the next n calls to the log function.
*
* @param n number of log calls to ignore (could be negative)
- * @param check_reset GNUNET_YES to assert that the log skip counter is currently zero
+ * @param check_reset #GNUNET_YES to assert that the log skip counter is currently zero
*/
void
-GNUNET_log_skip (int n, int check_reset)
+GNUNET_log_skip (int n,
+ int check_reset)
{
int ok;
}
}
+
/**
* Get the number of log calls that are going to be skipped
*
return skip_log;
}
+
/**
* Output a log message using the default mechanism.
*
* @param va arguments to the format string "message"
*/
static void
-mylog (enum GNUNET_ErrorType kind, const char *comp, const char *message,
+mylog (enum GNUNET_ErrorType kind,
+ const char *comp,
+ const char *message,
va_list va)
{
char date[DATE_STR_SIZE];
strftime (date2, DATE_STR_SIZE, "%b %d %H:%M:%S-%%06u", tmptr);
snprintf (date, sizeof (date), date2, timeofday.tv_usec);
}
-#endif
+#endif
VSNPRINTF (buf, size, message, va);
if (NULL != tmptr)
(void) setup_log_file (tmptr);
{
last_bulk_repeat++;
if ( (GNUNET_TIME_absolute_get_duration (last_bulk_time).rel_value_us >
- BULK_DELAY_THRESHOLD) ||
+ BULK_DELAY_THRESHOLD) ||
(last_bulk_repeat > BULK_REPEAT_THRESHOLD) )
flush_bulk (date);
return;
* @param ... arguments for format string
*/
void
-GNUNET_log_nocheck (enum GNUNET_ErrorType kind, const char *message, ...)
+GNUNET_log_nocheck (enum GNUNET_ErrorType kind,
+ const char *message, ...)
{
va_list va;
*
* @param pid the peer identity
* @return string form of the pid; will be overwritten by next
- * call to GNUNET_i2s.
+ * call to #GNUNET_i2s.
*/
const char *
GNUNET_i2s (const struct GNUNET_PeerIdentity *pid)
{
- static struct GNUNET_CRYPTO_HashAsciiEncoded ret;
-
- GNUNET_CRYPTO_hash_to_enc (&pid->hashPubKey, &ret);
- ret.encoding[4] = '\0';
- return (const char *) ret.encoding;
+ static char buf[256];
+ char *ret;
+
+ ret = GNUNET_CRYPTO_eddsa_public_key_to_string (&pid->public_key);
+ strcpy (buf, ret);
+ GNUNET_free (ret);
+ buf[4] = '\0';
+ return buf;
}
*
* @param pid the peer identity
* @return string form of the pid; will be overwritten by next
- * call to GNUNET_i2s.
+ * call to #GNUNET_i2s_full.
*/
const char *
GNUNET_i2s_full (const struct GNUNET_PeerIdentity *pid)
{
- static struct GNUNET_CRYPTO_HashAsciiEncoded ret;
+ static char buf[256];
+ char *ret;
- GNUNET_CRYPTO_hash_to_enc (&pid->hashPubKey, &ret);
- return (const char *) ret.encoding;
+ ret = GNUNET_CRYPTO_eddsa_public_key_to_string (&pid->public_key);
+ strcpy (buf, ret);
+ GNUNET_free (ret);
+ return buf;
}
* in the entire API that is NOT reentrant!
*
* @param addr the address
- * @param addrlen the length of the address
+ * @param addrlen the length of the address in @a addr
* @return nicely formatted string for the address
- * will be overwritten by next call to GNUNET_a2s.
+ * will be overwritten by next call to #GNUNET_a2s.
*/
const char *
GNUNET_a2s (const struct sockaddr *addr, socklen_t addrlen)
{
- static char buf[INET6_ADDRSTRLEN + 8];
+#ifndef WINDOWS
+#define LEN GNUNET_MAX ((INET6_ADDRSTRLEN + 8), \
+ (sizeof (struct sockaddr_un) - sizeof (sa_family_t)))
+#else
+#define LEN (INET6_ADDRSTRLEN + 8)
+#endif
+ static char buf[LEN];
+#undef LEN
static char b2[6];
const struct sockaddr_in *v4;
const struct sockaddr_un *un;
return "<unbound UNIX client>";
un = (const struct sockaddr_un *) addr;
off = 0;
- if (un->sun_path[0] == '\0')
+ if ('\0' == un->sun_path[0])
off++;
memset (buf, 0, sizeof (buf));
snprintf (buf, sizeof (buf) - 1, "%s%.*s", (off == 1) ? "@" : "",
* @param option name of missing option
*/
void
-GNUNET_log_config_missing (enum GNUNET_ErrorType kind,
+GNUNET_log_config_missing (enum GNUNET_ErrorType kind,
const char *section,
const char *option)
{
* @param required what is required that is invalid about the option
*/
void
-GNUNET_log_config_invalid (enum GNUNET_ErrorType kind,
+GNUNET_log_config_invalid (enum GNUNET_ErrorType kind,
const char *section,
const char *option,
const char *required)
/**
* Initializer
*/
-void __attribute__ ((constructor)) GNUNET_util_cl_init ()
+void __attribute__ ((constructor))
+GNUNET_util_cl_init ()
{
GNUNET_stderr = stderr;
#ifdef MINGW
GNInitWinEnv (NULL);
#endif
#if WINDOWS
- if (!InitializeCriticalSectionAndSpinCount (&output_message_cs, 0x00000400))\r
+ if (!InitializeCriticalSectionAndSpinCount (&output_message_cs, 0x00000400))
GNUNET_abort ();
#endif
}
/**
* Destructor
*/
-void __attribute__ ((destructor)) GNUNET_util_cl_fini ()
+void __attribute__ ((destructor))
+GNUNET_util_cl_fini ()
{
#if WINDOWS
DeleteCriticalSection (&output_message_cs);