From: Robert K. <may...@us...> - 2001-10-12 19:59:54
|
Update of /cvsroot/bitcollider/bitcollider/src In directory usw-pr-cvs1:/tmp/cvs-serv28703/src Modified Files: bitcollider.c Log Message: Next set of improvements to the cache support. The cache now has a size limit (by default 8192 entries). If the cache grows past 8192, then remove 10% of the least recently used entries. Also I've added support for making sure the database gets cleaned up properly at exit. Index: bitcollider.c =================================================================== RCS file: /cvsroot/bitcollider/bitcollider/src/bitcollider.c,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -r1.16 -r1.17 *** bitcollider.c 2001/07/23 23:13:33 1.16 --- bitcollider.c 2001/10/12 19:59:51 1.17 *************** *** 9,12 **** --- 9,13 ---- #include <string.h> #include <errno.h> + #include <signal.h> #include "bitcollider.h" #include "dirsearch.h" *************** *** 40,43 **** --- 41,45 ---- printf(" (Default is to analyze only known extensions)\n"); printf(" -f <file> - read tags from <file> instead of analyzing\n"); + printf(" -c - clear the bitprint cache\n"); #ifndef _WIN32 printf(" -k - use the Konqueror to submit\n"); *************** *** 88,92 **** { fprintf(stderr, " %s: ", fileName); ! // fflush(stdout); } --- 90,94 ---- { fprintf(stderr, " %s: ", fileName); ! fflush(stdout); } *************** *** 96,103 **** { fprintf(stderr, "%-3d%%\b\b\b\b", percentComplete); ! // fflush(stdout); } } int main(int argc, char *argv[]) { --- 98,124 ---- { fprintf(stderr, "%-3d%%\b\b\b\b", percentComplete); ! fflush(stdout); } } + /* This var is global so that the atexit() handler can grab it and + cleanly shutdown the Berkeley DB cache */ + static Bitcollider *bc = NULL; + + void exit_cleanup(void) + { + if (bc) + { + bitcollider_shutdown(bc); + } + } + + /* Catch a SIGINT (^C) and then exit normally, letting the atexit + handler do the actual cleanup */ + void signal_cleanup(int sig) + { + exit(0); + } + int main(int argc, char *argv[]) { *************** *** 105,109 **** char checkAsExt[MAX_EXT_LEN]; char tagFile[MAX_PATH]; - Bitcollider *bc = NULL; BitcolliderSubmission *submission; int argIndex = 1, count; --- 126,129 ---- *************** *** 116,119 **** --- 136,140 ---- b_bool recurse = false; b_bool quiet = false; + b_bool clearCache = false; b_bool ret; char fileName[MAX_PATH]; *************** *** 196,199 **** --- 217,225 ---- } else + if (strcmp(argv[argIndex], "-c") == 0) + { + clearCache = true; + } + else if (strcmp(argv[argIndex], "-e") == 0) { *************** *** 218,222 **** break; } ! if (! tagFile[0] && argIndex == argc) { fprintf(stderr, "You must specify a file to bitcollide.\n"); --- 244,248 ---- break; } ! if (! tagFile[0] && !clearCache && argIndex == argc) { fprintf(stderr, "You must specify a file to bitcollide.\n"); *************** *** 235,238 **** --- 261,268 ---- } + /* set the cleanup handler */ + atexit(exit_cleanup); + signal(SIGINT, signal_cleanup); + bc = bitcollider_init(debugPlugins); if (!bc) *************** *** 241,244 **** --- 271,283 ---- exit(-1); } + + if (clearCache) + { + clear_bitprint_cache(bc); + bitcollider_shutdown(bc); + bc = NULL; + fprintf(stderr, "Bitprint cache cleared.\n"); + exit(0); + } if( tagFile[0] ) *************** *** 249,264 **** fprintf(stderr, "Cannot create submission.\n"); bitcollider_shutdown(bc); exit(-1); } ! if (submission->numBitprints == 0) ! { ! print_error(submission->bc, NULL); delete_submission(submission); bitcollider_shutdown(bc); exit(-1); ! } if (autoSubmit) ! set_auto_submit(submission, true); } else --- 288,305 ---- fprintf(stderr, "Cannot create submission.\n"); bitcollider_shutdown(bc); + bc = NULL; exit(-1); } ! if (submission->numBitprints == 0) ! { ! print_error(submission->bc, NULL); delete_submission(submission); bitcollider_shutdown(bc); + bc = NULL; exit(-1); ! } if (autoSubmit) ! set_auto_submit(submission, true); } else *************** *** 269,272 **** --- 310,314 ---- fprintf(stderr, "Cannot create submission.\n"); bitcollider_shutdown(bc); + bc = NULL; exit(-1); } *************** *** 306,309 **** --- 348,352 ---- print_error(bc, "Cannot analyze file"); bitcollider_shutdown(bc); + bc = NULL; exit(-1); } *************** *** 328,331 **** --- 371,375 ---- print_error(bc, "Submission failed"); bitcollider_shutdown(bc); + bc = NULL; exit(-1); } *************** *** 340,343 **** --- 384,391 ---- delete_submission(submission); bitcollider_shutdown(bc); + + /* Set the bitcolider object to NULL, so that the cleanup handler doesn't + clean it up again */ + bc = NULL; return 0; |