HuntnGather – Diff between revs 47 and 49
?pathlinks?
Rev 47 | Rev 49 | |||
---|---|---|---|---|
Line 51... | Line 51... | |||
51 | |
51 | |
|
52 | /* |
52 | /* |
|
53 | * |
53 | * |
|
54 | * Search the database for a matching string. |
54 | * Search the database for a matching string. |
|
55 | */ |
55 | */ |
|
56 | void SearchDatabase(char *dbFile, char* needle) { |
56 | void SearchDatabaseExact(char *dbFile, char *needle) { |
|
57 | #if defined ___AsyncIO___ |
57 | #if defined ___AsyncIO___ |
|
58 | struct AsyncFile *fp; |
58 | struct AsyncFile *fp; |
|
59 | #else |
59 | #else |
|
60 | FILE *fp; |
60 | FILE *fp; |
|
Line 93... | Line 93... | |||
93 | fclose(fp); |
93 | fclose(fp); |
|
94 | #endif |
94 | #endif |
|
95 | return; |
95 | return; |
|
96 | } |
96 | } |
|
Line -... | Line 97... | |||
- | 97 | |
||
- | 98 | #if defined ___AmigaOS___ |
||
- | 99 | #if defined ___NOCASE_FS___ |
||
- | 100 | if(Strnicmp(entry->name, needle, StringLenMax(entry->name, needle)) == 0) { |
||
- | 101 | #else |
||
- | 102 | if(StrnCmp(entry->name, needle, StringLenMax(entry->name, needle)) == 0) { |
||
- | 103 | #endif |
||
97 | |
104 | #else |
|
- | 105 | if(strstr(entry->name, needle) != NULL) { |
||
- | 106 | #endif |
||
- | 107 | fprintf(stdout, "%s\n", entry->path); |
||
- | 108 | } |
||
- | 109 | |
||
- | 110 | free(entry->name); |
||
- | 111 | free(entry->path); |
||
- | 112 | free(entry); |
||
- | 113 | entry = NULL; |
||
- | 114 | |
||
- | 115 | free(line->string); |
||
- | 116 | free(line); |
||
- | 117 | line = NULL; |
||
- | 118 | } |
||
- | 119 | |
||
- | 120 | if(line != NULL) { |
||
- | 121 | free(line->string); |
||
- | 122 | free(line); |
||
- | 123 | line = NULL; |
||
- | 124 | } |
||
- | 125 | |
||
- | 126 | #if defined ___AsyncIO___ |
||
- | 127 | CloseAsync(fp); |
||
- | 128 | #else |
||
- | 129 | fclose(fp); |
||
- | 130 | #endif |
||
- | 131 | } |
||
- | 132 | |
||
- | 133 | /* |
||
- | 134 | * |
||
- | 135 | * Search the database for a matching string. |
||
- | 136 | */ |
||
- | 137 | void SearchDatabasePattern(char *dbFile, UBYTE *pattern) { |
||
- | 138 | #if defined ___AsyncIO___ |
||
- | 139 | struct AsyncFile *fp; |
||
- | 140 | #else |
||
- | 141 | FILE *fp; |
||
- | 142 | #endif |
||
- | 143 | dbEntry *entry; |
||
- | 144 | dbLine *line = NULL; |
||
- | 145 | |
||
- | 146 | // Open database file for reading. |
||
- | 147 | #if defined ___AsyncIO___ |
||
- | 148 | if((fp = OpenAsync(dbFile, MODE_READ, ASYNC_BUF)) == NULL) { |
||
- | 149 | #else |
||
- | 150 | if((fp = fopen(dbFile, "r")) == NULL) { |
||
- | 151 | #endif |
||
- | 152 | fprintf(stderr, "Could not open file '%s' for reading.\n", dbFile); |
||
- | 153 | return; |
||
- | 154 | } |
||
- | 155 | |
||
- | 156 | while(PROGRAM_RUN && (line = ReadLine(fp)) != NULL) { |
||
- | 157 | #if defined ___AmigaOS___ |
||
- | 158 | // Check if CTRL+C was pressed and abort the program. |
||
- | 159 | if(SetSignal(0L, SIGBREAKF_CTRL_C) & SIGBREAKF_CTRL_C) { |
||
- | 160 | PROGRAM_RUN = FALSE; |
||
- | 161 | continue; |
||
- | 162 | } |
||
- | 163 | #endif |
||
- | 164 | |
||
- | 165 | if((entry = CreateDatabaseEntry(line)) == NULL) { |
||
- | 166 | fprintf(stderr, "Unable to create database entry.\n"); |
||
- | 167 | free(line->string); |
||
- | 168 | free(line); |
||
- | 169 | line = NULL; |
||
- | 170 | |
||
- | 171 | #if defined ___AsyncIO___ |
||
- | 172 | CloseAsync(fp); |
||
- | 173 | #else |
||
- | 174 | fclose(fp); |
||
- | 175 | #endif |
||
- | 176 | return; |
||
- | 177 | } |
||
- | 178 | |
||
98 | if(StringMatch(entry->name, needle)) { |
179 | if(MatchPatternNoCase(pattern, entry->name)) { |
|
99 | fprintf(stdout, "%s\n", entry->path); |
180 | fprintf(stdout, "%s\n", entry->path); |
|
Line 100... | Line 181... | |||
100 | } |
181 | } |
|
101 | |
182 | |
|
Line 125... | Line 206... | |||
125 | /* |
206 | /* |
|
126 | * |
207 | * |
|
127 | * Search the database for the matching string. |
208 | * Search the database for the matching string. |
|
128 | */ |
209 | */ |
|
129 | void Hunt(char *dbFile, char *needle) { |
210 | void Hunt(char *dbFile, char *needle) { |
|
- | 211 | #if defined ___AmigaOS___ |
||
- | 212 | UBYTE *pattern; |
||
- | 213 | ULONG size; |
||
- | 214 | |
||
- | 215 | #if defined ___NOCASE_FS___ |
||
- | 216 | StrUpr(needle); |
||
- | 217 | #endif |
||
- | 218 | |
||
- | 219 | size = strlen(needle) * 2 + 2; |
||
- | 220 | |
||
- | 221 | if(pattern = AllocVec(size, MEMF_ANY|MEMF_CLEAR)) { |
||
- | 222 | switch(ParsePatternNoCase(needle, pattern, (LONG)size)) { |
||
- | 223 | case 1: // the needle contains wildcards |
||
- | 224 | SearchDatabasePattern(dbFile, pattern); |
||
- | 225 | break; |
||
- | 226 | case 0: // no wildcards contained in needle |
||
- | 227 | SearchDatabaseExact(dbFile, needle); |
||
- | 228 | break; |
||
- | 229 | case -1: // overflow condition |
||
- | 230 | fprintf(stderr, "Pattern '%s' could not be parsed.\n", needle); |
||
- | 231 | break; |
||
- | 232 | } |
||
- | 233 | FreeVec(pattern); |
||
- | 234 | pattern = NULL; |
||
- | 235 | return; |
||
- | 236 | } |
||
- | 237 | #endif |
||
- | 238 | |
||
130 | // Search the database for the matching string. |
239 | // Search the database for the matching string. |
|
131 | SearchDatabase(dbFile, needle); |
240 | SearchDatabaseExact(dbFile, needle); |
|
132 | } |
241 | } |
|
Line 133... | Line 242... | |||
133 | |
242 | |
|
134 | void usage(char *name) { |
243 | void usage(char *name) { |
|
135 | fprintf(stdout, "Hunt & Gather - %s, a file index search tool. \n", name); |
244 | fprintf(stdout, "Hunt & Gather - %s, a file index search tool. \n", name); |