]> code.citadel.org Git - citadel.git/blobdiff - citadel/citadel.c
* make backtrace optional.
[citadel.git] / citadel / citadel.c
index 920f06cc402b1ce1537991109cdfb85f2cf71d39..d5c0b10590cc8fb1313a120457500ad845425b65 100644 (file)
@@ -52,6 +52,7 @@
 #include "screen.h"
 #include "citadel_dirs.h"
 
+#include "ecrash.h"
 #include "md5.h"
 
 #define IFEXPERT if (userflags&US_EXPERT)
@@ -110,6 +111,23 @@ extern int next_lazy_cmd;
 
 CtdlIPC *ipc_for_signal_handlers;      /* KLUDGE cover your eyes */
 
+
+/*
+ * lprintf()  ...   Write logging information; 
+ *                  simple here to have the same 
+ *                  symbols in the client.
+ */
+enum LogLevel {CTDL_EMERG};
+
+void lprintf(enum LogLevel loglevel, const char *format, ...) {   
+       va_list arg_ptr;
+
+       va_start(arg_ptr, format);
+       vfprintf(stderr, format, arg_ptr);   
+       va_end(arg_ptr);   
+       fflush(stderr);
+}   
+
 /*
  * here is our 'clean up gracefully and exit' routine
  */
@@ -517,6 +535,8 @@ void gotonext(CtdlIPC *ipc)
  */
                mptr = (struct march *) malloc(sizeof(struct march));
                mptr->next = NULL;
+               mptr->march_order = 0;
+               mptr->march_floor = 0;
                strcpy(mptr->march_name, "_BASEROOM_");
                if (march == NULL) {
                        march = mptr;
@@ -747,8 +767,18 @@ void  gotoroomstep(CtdlIPC *ipc, int direction, int mode)
        struct ctdlroomlisting *rs;
        int list_it;
        char rmname[ROOMNAMELEN];
-       int rmslot;
+       int rmslot = 0;
        int rmtotal;
+       struct ctdlroom *attr = NULL;
+
+       /* Fetch the existing room config */
+       r = CtdlIPCGetRoomAttributes(ipc, &attr, buf);
+       if (r / 100 != 2) {
+               scr_printf("%s\n", buf);
+               return;
+       }
+       strcpy (room_name , attr->QRname); 
+       free(attr);
 
        /* Ask the server for a room list */
        r = CtdlIPCKnownRooms(ipc, SubscribedRooms, (-1), &listing, buf);
@@ -1375,10 +1405,30 @@ int main(int argc, char **argv)
        char relhome[PATH_MAX]="";
        char ctdldir[PATH_MAX]=CTDLDIR;
     int lp; 
-
+#ifdef HAVE_BACKTRACE
+       eCrashParameters params;
+//     eCrashSymbolTable symbol_table;
+#endif
 
        calc_dirs_n_files(relh, home, relhome, ctdldir);
-       
+
+#ifdef HAVE_BACKTRACE
+       bzero(&params, sizeof(params));
+       params.filename = file_pid_paniclog;
+//     panic_fd=open(file_pid_paniclog, O_APPEND|O_CREAT|O_DIRECT);
+       params.filep = fopen(file_pid_paniclog, "a+");
+       params.debugLevel = ECRASH_DEBUG_VERBOSE;
+       params.dumpAllThreads = TRUE;
+       params.useBacktraceSymbols = 1;
+///    BuildSymbolTable(&symbol_table);
+//     params.symbolTable = &symbol_table;
+       params.signals[0]=SIGSEGV;
+       params.signals[1]=SIGILL;
+       params.signals[2]=SIGBUS;
+       params.signals[3]=SIGABRT;
+
+       eCrash_Init(&params);
+#endif 
        setIPCDeathHook(screen_delete);
        setIPCErrorPrintf(err_printf);
        setCryptoStatusHook(statusHook);