poldek: poldek/log.h, poldek/log.c, poldek/python/poldekmod.i - fi...

mis mis at pld-linux.org
Fri Feb 1 17:09:23 CET 2008


Author: mis                          Date: Fri Feb  1 16:09:22 2008 GMT
Module: poldek                        Tag: HEAD
---- Log message:
- fix: va_list can be printed once only

---- Files affected:
poldek/poldek:
   log.h (1.29 -> 1.30) , log.c (1.36 -> 1.37) 
poldek/poldek/python:
   poldekmod.i (1.16 -> 1.17) 

---- Diffs:

================================================================
Index: poldek/poldek/log.h
diff -u poldek/poldek/log.h:1.29 poldek/poldek/log.h:1.30
--- poldek/poldek/log.h:1.29	Wed Jan 23 23:57:41 2008
+++ poldek/poldek/log.h	Fri Feb  1 17:09:17 2008
@@ -39,7 +39,7 @@
 extern const int poldek_TRACE;
 #endif
 
-typedef void (*poldek_vlog_fn)(void *, int pri, const char *fmt, va_list args);
+typedef void (*poldek_vlog_fn)(void *, int pri, const char *message);
 
 void poldek_log_add_appender(const char *name, void *data, tn_fn_free free,
                              unsigned flags, poldek_vlog_fn dolog);

================================================================
Index: poldek/poldek/log.c
diff -u poldek/poldek/log.c:1.36 poldek/poldek/log.c:1.37
--- poldek/poldek/log.c:1.36	Wed Jan 23 23:57:41 2008
+++ poldek/poldek/log.c	Fri Feb  1 17:09:17 2008
@@ -37,14 +37,14 @@
 int (*poldek_log_say_goodbye)(const char *msg) = default_say_goodbye;
 
 static void do_log(unsigned flags, int pri, const char *fmt, va_list args);
-static void vlog_file(void *stream, int pri, const char *fmt, va_list args);
-static void vlog_tty(void *foo, int pri, const char *fmt, va_list args);
+static void vlog_file(void *stream, int pri, const char *message);
+static void vlog_tty(void *foo, int pri, const char *message);
 
 
 struct poldek_log_appender {
     int flags;                  /* LOGTTY for TTY-output */
     void *_data;
-    void (*dolog)(void *, int pri, const char *fmt, va_list args);
+    void (*dolog)(void *, int pri, const char *message);
     void (*free)(void *);
     char name[0];
 };
@@ -238,7 +238,7 @@
 }
 
 
-static void vlog_tty(void *foo, int pri, const char *fmt, va_list args)
+static void vlog_tty(void *foo, int pri, const char *message)
 {
     char buf[44];
     int n = 0;
@@ -263,11 +263,11 @@
     if (n > 0)
         fprintf(stdout, "%s", buf);
 
-    vfprintf(stdout, fmt, args);
+    fprintf(stdout, "%s", message);
     fflush(stdout);
 }
 
-static void vlog_file(void *stream, int pri, const char *fmt, va_list args)
+static void vlog_file(void *stream, int pri, const char *message)
 {
     
     if ((pri & LOGOPT_CONT) == 0) {
@@ -285,25 +285,27 @@
     else if (pri & LOGWARN)
         fprintf(stream, "%s", _("warn: "));
             
-    vfprintf(stream, fmt, args);
+    fprintf(stream, "%s", message);
     fflush(stream);
 }
 
 static void do_log(unsigned flags, int pri, const char *fmt, va_list args) 
 {
-    char *endl = NULL;
+    char message[1024], *endl = NULL;
     int i;
 
     if (*fmt == '\n' && (pri & (LOGERR|LOGWARN|LOGNOTICE))) {
         fmt++;
         endl = "\n";
     }
+
+    n_vsnprintf(message, sizeof(message), fmt, args);
     
     if (log_appenders == NULL || n_array_size(log_appenders) == 0) {
         if (endl)
-            vlog_tty(NULL, LOGOPT_CONT, endl, NULL);
+            vlog_tty(NULL, LOGOPT_CONT, endl);
             
-        vlog_tty(NULL, pri, fmt, args);
+        vlog_tty(NULL, pri, message);
         return;
     }
 
@@ -315,8 +317,8 @@
         
         if (ape->dolog) {
             if (endl)
-                ape->dolog(ape->_data, LOGOPT_CONT, endl, NULL);
-            ape->dolog(ape->_data, pri, fmt, args);
+                ape->dolog(ape->_data, LOGOPT_CONT, endl);
+            ape->dolog(ape->_data, pri, message);
         
         } else {
             fprintf(stderr, "appender without dolog()?\n");

================================================================
Index: poldek/poldek/python/poldekmod.i
diff -u poldek/poldek/python/poldekmod.i:1.16 poldek/poldek/python/poldekmod.i:1.17
--- poldek/poldek/python/poldekmod.i:1.16	Mon Jan 28 15:08:09 2008
+++ poldek/poldek/python/poldekmod.i	Fri Feb  1 17:09:17 2008
@@ -99,11 +99,10 @@
     NULL, py_progress_new, py_progress, py_progress_reset, NULL
 };
 
-static void PythonDoLog(void *data, int pri, const char *fmt, va_list vargs)
+static void PythonDoLog(void *data, int pri, const char *message)
 {
    PyObject *obj, *method, *pypri, *pymessage, *r;
    const char *spri = "info";
-   char message[2048];
 
    if (pri & LOGERR)
        spri = "error";
@@ -121,7 +120,6 @@
    method = Py_BuildValue("s", "log");
    
    pypri = Py_BuildValue("s", spri);       
-   n_vsnprintf(message, sizeof(message), fmt, vargs);
    pymessage = Py_BuildValue("s", message);
 
    r = PyObject_CallMethodObjArgs(obj, method, pypri, pymessage, NULL);
@@ -321,7 +319,7 @@
 %extend tn_array {
     tn_array(int size) { return n_array_new_ex(size, NULL, NULL, NULL); };
     tn_array(void *arr) { return n_ref(arr); };
-    ~tn_array() { printf("free %p %d\n", self); n_array_free(self); }
+    ~tn_array() { n_array_free(self); }
     int __len__() { return n_array_size(self); }
         
     void *nth(int i) {
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/poldek/poldek/log.h?r1=1.29&r2=1.30&f=u
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/poldek/poldek/log.c?r1=1.36&r2=1.37&f=u
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/poldek/poldek/python/poldekmod.i?r1=1.16&r2=1.17&f=u



More information about the pld-cvs-commit mailing list