Răsfoiți Sursa

* Fixed ANSI codes incorrectly being accounted for in dumplots()

svn: 2179
Bryan Drewery 21 ani în urmă
părinte
comite
8393cb9068
4 a modificat fișierele cu 29 adăugiri și 1 ștergeri
  1. 1 0
      src/botcmd.c
  2. 26 0
      src/dcc.c
  3. 1 0
      src/dcc.h
  4. 1 1
      src/dccutil.c

+ 1 - 0
src/botcmd.c

@@ -1280,6 +1280,7 @@ static void bot_rsimr(char *botnick, char *code, char *msg)
 
     prefix = (char *) my_calloc(1, size);
     simple_snprintf(prefix, size, "[%s] ", botnick);
+    rmspace(par);
     dumplots(idx, prefix, par);
     free(prefix);
     free(parp);

+ 26 - 0
src/dcc.c

@@ -1025,6 +1025,32 @@ check_ansi(char *v)
   return count;
 }
 
+int ansi_len(char *s)
+{
+  char *c = s;
+  int count = 0;
+
+  while (*c) {
+    if (*c == 27) {
+      c++;
+      count++;
+
+      if (*c == '[') {
+        c++;
+        count++;
+        while ((*c != 'm')) {
+          c++;
+          count++;
+        }
+        c++;
+        count++;
+      }
+    } else
+      c++;
+  }
+
+  return count;
+}
 
 static void
 eof_dcc_chat(int idx)

+ 1 - 0
src/dcc.h

@@ -232,5 +232,6 @@ void send_timesync(int);
 void failed_link(int);
 void dupwait_notify(const char *);
 void send_sysinfo();
+int ansi_len(char *);
 
 #endif /* !_DCC_H */

+ 1 - 1
src/dccutil.c

@@ -177,7 +177,7 @@ void dumplots(int idx, const char *prefix, char *data)
   char *p = data, *q = NULL, *n = NULL, c = 0;
   const size_t max_data_len = 100 - strlen(prefix);
 
-  while (strlen(p) > max_data_len) {
+  while ((strlen(p) - ansi_len(p)) > max_data_len) {
     q = p + max_data_len;
     /* Search for embedded linefeed first */
     n = strchr(p, '\n');