Use args list only once. Probably better to use an intermediate buffer anyway.
authorMichael Jumper <zhangmaike@users.sourceforge.net>
Fri, 16 Mar 2012 02:24:16 +0000 (19:24 -0700)
committerMichael Jumper <zhangmaike@users.sourceforge.net>
Fri, 16 Mar 2012 02:24:16 +0000 (19:24 -0700)
src/log.c

index bfd55db..1cdaed0 100644 (file)
--- a/src/log.c
+++ b/src/log.c
 
 void vguacd_log_info(const char* format, va_list args) {
 
+    /* Copy log message into buffer */
+    char message[2048];
+    vsnprintf(message, sizeof(message), format, args);
+
     /* Log to syslog */
-    vsyslog(LOG_INFO, format, args);
+    syslog(LOG_INFO, "%s", message);
 
     /* Log to STDERR */
-    fprintf(stderr, "guacd[%i]: INFO:  ", getpid());
-    vfprintf(stderr, format, args);
-    fprintf(stderr, "\n");
+    fprintf(stderr, "guacd[%i]: INFO:  %s\n", getpid(), message);
 
 }
 
 void vguacd_log_error(const char* format, va_list args) {
 
+    /* Copy log message into buffer */
+    char message[2048];
+    vsnprintf(message, sizeof(message), format, args);
+
     /* Log to syslog */
-    vsyslog(LOG_ERR, format, args);
+    syslog(LOG_ERR, "%s", message);
 
     /* Log to STDERR */
-    fprintf(stderr, "guacd[%i]: ERROR: ", getpid());
-    vfprintf(stderr, format, args);
-    fprintf(stderr, "\n");
+    fprintf(stderr, "guacd[%i]: ERROR: %s\n", getpid(), message);
 
 }