#include "pdb.h" /* This assumes ####.brk format */ int encode_file(char * name) { char tn[200] ; char *poi = name; int len ; while(!isspace(*poi) && *poi) poi++ ; len = poi -name ; if(*poi) { strncpy(tn,name,len) ; tn[len] = '\0' ; poi = tn ; } else poi = name ; if (len > 4) { if (poi[len -1] == 'k' && poi[len -2] =='r' && poi[len -3] == 'b' &&poi[len -4] == '.') len -= 4 ; else if (poi[len -1] == 'b' && poi[len -2] =='d' && poi[len -3] == 'p' &&poi[len -4] == '.') len -= 4 ; } if (len > 4 &&poi[len -5] == '/') { poi += len -4; len = 4; } if (len == 4) return ((poi[0] << 24) | (poi[1] << 16) | (poi[2] << 8) | poi[3] ) ; fprintf(stderr, "Wrong file name in encode_file : %s", name) ; exit(0) ; } int include_files [1000]; int exclude_files [1000]; int max_include_file = 0 ; int max_exclude_file = 0 ; void record_exclude_file (char *name) { int value = encode_file(name) ; exclude_files[max_exclude_file++] = value ; } void record_include_file (char *name) { int value = encode_file(name) ; include_files[max_include_file++] = value ; } void read_include_exclude_file (FILE *ff,int exclude) { char string[200] ; while (fgets(string,200,ff) != NULL) { char *poi = string ,*tpoi; while (isspace(*poi)) poi ++ ; if (*poi) { tpoi = poi ; while (!isspace(*poi) && *poi ) poi ++ ; *poi = '\0' ; if(exclude ) record_exclude_file(tpoi); else record_include_file (tpoi) ; } } } void open_and_read_include_exclude(char *name, int exclude) { FILE * ff = fopen(name, "r") ; if (ff == NULL) serious_error(ARG_TYPE_STRING, "Failed to open file", name) ; read_include_exclude_file(ff, exclude) ; } void initial_exclude_include() { char *file = command_line_arg("include") ; if (file != NULL) open_and_read_include_exclude(file, 0) ; file = command_line_arg("exclude") ; if (file != NULL) open_and_read_include_exclude(file, 1) ; } int check_if_file_included(char *name) { if (max_include_file | max_exclude_file) { int value = encode_file(name) ; int ii ; if (max_include_file) { for (ii = 0; ii < max_include_file ; ii++) if (include_files[ii] == value) return 1 ; return 0 ; } else { for (ii = 0; ii < max_exclude_file ; ii++) if (exclude_files[ii] == value) return 0 ; return 1; } } else return 1 ; }