Răsfoiți Sursa

* Add a dprintf_real() to avoid vsprintf() if the length is already known and buffer already formatted

Bryan Drewery 16 ani în urmă
părinte
comite
a5c3132132
2 a modificat fișierele cu 8 adăugiri și 2 ștergeri
  1. 7 2
      src/dccutil.c
  2. 1 0
      src/dccutil.h

+ 7 - 2
src/dccutil.c

@@ -279,14 +279,19 @@ dprintf(int idx, const char *format, ...)
   } else {
     len = size_t(vlen);
   }
+  dprintf_real(idx, buf, len, sizeof(buf));
+}
 
+void
+dprintf_real(int idx, char* buf, size_t len, size_t bufsiz)
+{
 /* this is for color on dcc :P */
 
   if (idx < 0) {
     tputs(-idx, buf, len);
   } else if (idx > 0x7FF0) {
     if (idx == DP_STDOUT || idx == DP_STDOUT) {
-      len = colorbuf(buf, len, -1, sizeof(buf));
+      len = colorbuf(buf, len, -1, bufsiz);
     }
 
     switch (idx) {
@@ -323,7 +328,7 @@ dprintf(int idx, const char *format, ...)
     }
     return;
   } else {                      /* normal chat text */
-    len = colorbuf(buf, len, idx, sizeof(buf));
+    len = colorbuf(buf, len, idx, bufsiz);
 
     if (len > 1000) {           /* Truncate to fit */
       len = 1000;

+ 1 - 0
src/dccutil.h

@@ -38,6 +38,7 @@ namespace bd {
 void init_dcc(void);
 void dumplots(int, const char *, const char *);
 void dprintf(int, const char *, ...) __attribute__((format(printf, 2, 3)));
+void dprintf_real(int, char*, size_t, size_t);
 void chatout(const char *, ...) __attribute__((format(printf, 1, 2)));
 void chanout_but(int, int, const char *, ...) __attribute__((format(printf, 3, 4)));
 void dcc_chatter(int);