Francois Gouget : testbot/testagentd: Add a function to simplify formatting a message.

Alexandre Julliard julliard at winehq.org
Mon Apr 14 12:10:15 CDT 2014


Module: tools
Branch: master
Commit: 5179c8ff848da8da501c773a38bd8d9c9d0818ba
URL:    http://source.winehq.org/git/tools.git/?a=commit;h=5179c8ff848da8da501c773a38bd8d9c9d0818ba

Author: Francois Gouget <fgouget at codeweavers.com>
Date:   Mon Apr 14 15:45:36 2014 +0200

testbot/testagentd: Add a function to simplify formatting a message.

---

 testbot/src/testagentd/testagentd.c |   29 ++++++++++++++++++-----------
 1 file changed, 18 insertions(+), 11 deletions(-)

diff --git a/testbot/src/testagentd/testagentd.c b/testbot/src/testagentd/testagentd.c
index 230683a..d5d8dfc 100644
--- a/testbot/src/testagentd/testagentd.c
+++ b/testbot/src/testagentd/testagentd.c
@@ -129,31 +129,38 @@ const char* status_names[] = {"ok:", "error:", "fatal:"};
 /* If true, then the current connection is in a broken state */
 static int broken = 0;
 
-/* This is a message which indicates the reason for the status */
-static char* status_msg = NULL;
-static unsigned status_size = 0;
-static void vset_status_msg(const char* format, va_list valist)
+
+static char* vformat_msg(char** buf, unsigned* size, const char* format, va_list valist)
 {
-    int len;
+    unsigned len;
     va_list args;
     len = 1;
     do
     {
-        if (len >= status_size)
+        if (len >= *size)
         {
             /* len does not count the trailing '\0'. So add 1 and round up
              * to the next 16 bytes multiple.
              */
-            status_size = (len + 1 + 0xf) & ~0xf;
-            status_msg = realloc(status_msg, status_size);
+            *size = (len + 1 + 0xf) & ~0xf;
+            *buf = realloc(*buf, *size);
         }
         va_copy(args, valist);
-        len = vsnprintf(status_msg, status_size, format, args);
+        len = vsnprintf(*buf, *size, format, args);
         va_end(args);
         if (len < 0)
-            len = status_size * 1.1;
+            len = *size * 1.1;
     }
-    while (len >= status_size);
+    while (len >= *size);
+    return *buf;
+}
+
+/* This is a message which indicates the reason for the status */
+static char* status_msg = NULL;
+static unsigned status_size = 0;
+static void vset_status_msg(const char* format, va_list valist)
+{
+    vformat_msg(&status_msg, &status_size, format, valist);
     if (opt_debug || status != ST_OK)
         fprintf(stderr, "%s%s: %s\n", status_names[status], rpc_name(rpcid), status_msg);
 }




More information about the wine-cvs mailing list