HUGE PATCH. This moves all of mime_parser.c and all
[citadel.git] / citadel / commands.c
index 7ee8d5d2ddce8dfc16635c4ee5a2d18d74170229..82db34c9e7311647c97e0b2d4181ba9146a931f1 100644 (file)
@@ -43,6 +43,7 @@
 #include <signal.h>
 #include <errno.h>
 #include <stdarg.h>
+#include <libcitadel.h>
 #include "citadel.h"
 #include "citadel_ipc.h"
 #include "commands.h"
@@ -50,7 +51,6 @@
 #include "citadel_decls.h"
 #include "routines.h"
 #include "routines2.h"
-#include "tools.h"
 #include "rooms.h"
 #include "client_chat.h"
 #include "citadel_dirs.h"
@@ -58,6 +58,7 @@
 #include "snprintf.h"
 #endif
 #include "screen.h"
+#include "ecrash.h"
 
 struct citcmd {
        struct citcmd *next;
@@ -393,9 +394,22 @@ static int async_ka_enabled = 0;
 
 static void *ka_thread(void *arg)
 {
+#ifdef HAVE_BACKTRACE
+       char threadName[256];
+
+       // Set up our name
+       sprintf(threadName, "ka_Thread n");
+
+       // Register for tracing
+       eCrash_RegisterThread(threadName, 0);
+#endif
        really_do_keepalive();
        pthread_detach(ka_thr_handle);
        ka_thr_active = 0;
+       
+#ifdef HAVE_BACKTRACE
+       eCrash_UnregisterThread();
+#endif
        return NULL;
 }
 
@@ -979,37 +993,34 @@ char *cmd_expand(char *strbuf, int mode)
        int a;
        static char exp[64];
        char buf[1024];
-       char *ptr;
 
        strcpy(exp, strbuf);
 
-       ptr = exp;
-       while (!IsEmptyStr(ptr)){
-               if (*ptr == '&') {
+       for (a = 0; exp[a]; ++a) {
+               if (strbuf[a] == '&') {
 
                        /* dont echo these non mnemonic command keys */
-                       int noecho = *(ptr+1) == '<' || *(ptr+1) == '>' || 
-                               *(ptr+1) == '+' || *(ptr+1) == '-';
+                       int noecho = strbuf[a+1] == '<' || strbuf[a+1] == '>' || strbuf[a+1] == '+' || strbuf[a+1] == '-';
 
                        if (mode == 0) {
-                               strcpy(ptr, ptr + 1 + noecho);
+                               strcpy(&exp[a], &exp[a + 1 + noecho]);
                        }
                        if (mode == 1) {
-                               *ptr = '<';
-                               strcpy(buf, ptr + 2);
-                               *(ptr + 2) = '>';
-                               *(ptr+ 3) = 0;
+                               exp[a] = '<';
+                               strcpy(buf, &exp[a + 2]);
+                               exp[a + 2] = '>';
+                               exp[a + 3] = 0;
                                strcat(exp, buf);
                        }
                }
-               if (!strncmp(ptr, "^r", 2)) {
+               if (!strncmp(&exp[a], "^r", 2)) {
                        strcpy(buf, exp);
-                       strcpy(ptr, room_name);
-                       strcat(exp, &buf[ptr - exp + 2]);
+                       strcpy(&exp[a], room_name);
+                       strcat(exp, &buf[a + 2]);
                }
-               if (!strncmp(ptr, "^c", 2)) {
-                       *ptr = ',';
-                       strcpy(ptr + 1], ptr + 2]);
+               if (!strncmp(&exp[a], "^c", 2)) {
+                       exp[a] = ',';
+                       strcpy(&exp[a + 1], &exp[a + 2]);
                }
        }