[tor-commits] [obfsproxy/master] cleanups and tweaks on logging

nickm at torproject.org nickm at torproject.org
Fri Jun 10 19:43:17 UTC 2011


commit 01c29282a94241121c0890279e007becfe6f99bd
Author: Nick Mathewson <nickm at torproject.org>
Date:   Fri Jun 10 15:26:19 2011 -0400

    cleanups and tweaks on logging
    
    The macro syntax originally used here is a gcc extension; let's also
    support the c99 version and a fallback to declaring this stuff as
    function.
    
    Also, let's use the __attribute__((format)) feature in GCC so that
    we can learn about type mismatches earlier.
    
    Also, make more functions const.
---
 src/util.c |   66 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
 src/util.h |   32 +++++++++++++++++++++++-----
 2 files changed, 79 insertions(+), 19 deletions(-)

diff --git a/src/util.c b/src/util.c
index 6ff337f..976dd59 100644
--- a/src/util.c
+++ b/src/util.c
@@ -24,9 +24,9 @@ static const char *sev_to_string(int severity);
 static int sev_is_valid(int severity);
 static int write_logfile_prologue(int fd);
 static int compose_logfile_prologue(char *buf, size_t buflen);
-static int string_to_sev(char *string);
-static int open_and_set_obfsproxy_logfile(char *filename);
-
+static int string_to_sev(const char *string);
+static int open_and_set_obfsproxy_logfile(const char *filename);
+static void logv(int severity, const char *format, va_list ap);
 
 /************************ Obfsproxy Network Routines *************************/
 
@@ -182,7 +182,7 @@ sev_to_string(int severity)
 /** If 'string' is a valid log severity, return the corresponding
  * numeric value.  Otherwise, return -1. */
 static int
-string_to_sev(char *string)
+string_to_sev(const char *string)
 {
   if (!strcasecmp(string, "warn"))
     return LOG_SEV_WARN;
@@ -212,7 +212,7 @@ sev_is_valid(int severity)
    It returns 1 on success and -1 on fail.
 */
 int
-log_set_method(int method, char *filename)
+log_set_method(int method, const char *filename)
 {
   
   logging_method = method;
@@ -230,7 +230,7 @@ log_set_method(int method, char *filename)
    On success it returns 1, on fail it returns -1.
 */
 static int
-open_and_set_obfsproxy_logfile(char *filename)
+open_and_set_obfsproxy_logfile(const char *filename)
 {
   if (!filename)
     return -1;
@@ -291,7 +291,7 @@ compose_logfile_prologue(char *buf, size_t buflen)
    not a valid severity, it returns -1.
 */
 int
-log_set_min_severity(char* sev_string) {
+log_set_min_severity(const char* sev_string) {
   int severity = string_to_sev(sev_string);
   if (!sev_is_valid(severity)) {
     log_warn("Severity '%s' makes no sense.", sev_string);
@@ -301,7 +301,7 @@ log_set_min_severity(char* sev_string) {
   return 1;
 }
 
-/** 
+/**
     Logging function of obfsproxy.
     Don't call this directly; use the log_* macros defined in util.h
     instead.
@@ -313,6 +313,18 @@ log_set_min_severity(char* sev_string) {
 void
 log_fn(int severity, const char *format, ...)
 {
+
+  va_list ap;
+  va_start(ap,format);
+
+  logv(severity, format, ap);
+
+  va_end(ap);
+}
+
+static void
+logv(int severity, const char *format, va_list ap)
+{
   assert(sev_is_valid(severity));
 
   if (logging_method == LOG_METHOD_NULL)
@@ -328,9 +340,6 @@ log_fn(int severity, const char *format, ...)
 
   size_t buflen = MAX_LOG_ENTRY-2;
 
-  va_list ap;
-  va_start(ap,format);
-  
   r = obfs_snprintf(buf, buflen, "[%s] ", sev_to_string(severity));
   if (r < 0)
     n = strlen(buf);
@@ -351,8 +360,6 @@ log_fn(int severity, const char *format, ...)
 
   buf[n]='\n';
   buf[n+1]='\0';
-  
-  va_end(ap);
 
   if (logging_method == LOG_METHOD_STDOUT)
     fprintf(stdout, "%s", buf);
@@ -363,3 +370,36 @@ log_fn(int severity, const char *format, ...)
   } else
     assert(0);
 }
+
+#ifdef NEED_LOG_WRAPPERS
+void
+log_info(const char *format, ...)
+{
+  va_list ap;
+  va_start(ap,format);
+
+  logv(LOG_SEV_INFO, format, ap);
+
+  va_end(ap);
+}
+void
+log_warn(const char *format, ...)
+{
+  va_list ap;
+  va_start(ap,format);
+
+  logv(LOG_SEV_WARN, format, ap);
+
+  va_end(ap);
+}
+void
+log_debug(const char *format, ...)
+{
+  va_list ap;
+  va_start(ap,format);
+
+  logv(LOG_SEV_DEBUG, format, ap);
+
+  va_end(ap);
+}
+#endif
diff --git a/src/util.h b/src/util.h
index e62e730..af3cd88 100644
--- a/src/util.h
+++ b/src/util.h
@@ -43,21 +43,41 @@ int init_evdns_base(struct event_base *base);
 /** Any size_t larger than this amount is likely to be an underflow. */
 #define SIZE_T_CEILING  ((size_t)(SSIZE_T_MAX-16))
 
-int obfs_vsnprintf(char *str, size_t size, 
+#ifndef __GNUC__
+#define __attribute__(x)
+#endif
+
+int obfs_vsnprintf(char *str, size_t size,
                    const char *format, va_list args);
-int obfs_snprintf(char *str, size_t size, 
-                  const char *format, ...);
+int obfs_snprintf(char *str, size_t size,
+                  const char *format, ...)
+  __attribute__((format(printf, 3, 4)));
 
 /***** Logging subsystem stuff. *****/
 
-void log_fn(int severity, const char *format, ...);
-int log_set_method(int method, char *filename);
-int log_set_min_severity(char* sev_string);
+void log_fn(int severity, const char *format, ...)
+  __attribute__((format(printf, 2, 3)));
+int log_set_method(int method, const char *filename);
+int log_set_min_severity(const char* sev_string);
 int close_obfsproxy_logfile(void);
 
+#ifdef __GNUC__
 #define log_info(args...) log_fn(LOG_SEV_INFO, args)
 #define log_warn(args...) log_fn(LOG_SEV_WARN, args)
 #define log_debug(args...) log_fn(LOG_SEV_DEBUG, args)
+#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define log_info(...) log_fn(LOG_SEV_INFO, __VA_ARGS__)
+#define log_warn(...) log_fn(LOG_SEV_WARN, __VA_ARGS__)
+#define log_debug(...) log_fn(LOG_SEV_DEBUG, __VA_ARGS__)
+#else
+#define NEED_LOG_WRAPPERS
+void log_info(const char *format, ...)
+  __attribute__((format(printf, 1, 2)));
+void log_warn(const char *format, ...)
+  __attribute__((format(printf, 1, 2)));
+void log_debug(const char *format, ...)
+  __attribute__((format(printf, 1, 2)));
+#endif
 
 /** Logging methods */
 





More information about the tor-commits mailing list