int main(int argc, char ** argv) { CU_ErrorCode rc; /* acknowledge+hide "unused parameter" compiler warnings */ ACKNOWLEDGED_UNUSED(argc); ACKNOWLEDGED_UNUSED(argv); /* seed rng */ srand((unsigned int)time(NULL)); /* initialize the CUnit test registry */ if (CUE_SUCCESS != CU_initialize_registry()) { return CU_get_error(); } /* ================ Add Test Suites to registry ================= */ /* Test suite for Parallel Libmboard */ if(testsuite_mb_parallel() != CUE_SUCCESS) return clean_quit(); /* -------------------------------------------------------------- */ /* Run all tests using the CUnit Basic interface */ CU_basic_set_mode(CU_BRM_VERBOSE); rc = CU_basic_run_tests(); /* clean up registry and quit */ return clean_quit(); }
/*! *\brief this handler will probably evolve into * something better. */ static void crash_handler(int sig) { pid_t pid; static volatile unsigned long crashed_ = 0; /* * let's hope argv0 aren't trashed. * both are defined in main.c. */ extern gchar *argv0; /* * besides guarding entrancy it's probably also better * to mask off signals */ if (crashed_) return; crashed_++; #ifdef SIGTERM if (sig == SIGTERM) clean_quit(NULL); #endif /* * gnome ungrabs focus, and flushes gdk. mmmh, good idea. */ gdk_pointer_ungrab(GDK_CURRENT_TIME); gdk_keyboard_ungrab(GDK_CURRENT_TIME); gdk_flush(); if (0 == (pid = fork())) { char buf[50]; char *args[5]; /* * probably also some other parameters (like GTK+ ones). * also we pass the full startup dir and the real command * line typed in (argv0) */ args[0] = argv0; args[1] = "--debug"; args[2] = "--crash"; sprintf(buf, "%d,%d,%s", getppid(), sig, argv0); args[3] = buf; args[4] = NULL; chdir(sylpheed_get_startup_dir()); setgid(getgid()); setuid(getuid()); execvp(argv0, args); } else { waitpid(pid, NULL, 0); crash_cleanup_exit(); _exit(253); } _exit(253); }