src/scanner.c

changeset 90
9b541d22d649
parent 82
44b3332dfe03
equal deleted inserted replaced
89:c80878da618c 90:9b541d22d649
183 closedir(dirf); 183 closedir(dirf);
184 184
185 return list; 185 return list;
186 } 186 }
187 187
188 static bool is_dir_excluded(string_list_t* list, char* dir) {
189 // TODO: implement
190 // assume normalized dir names in list (cline.c will make sure of it)
191 // remember to do case-insensitive comparison for WIN32
192 return false;
193 }
194
188 void scanDirectory(scanner_t scanner, settings_t* settings, 195 void scanDirectory(scanner_t scanner, settings_t* settings,
189 string_list_t* output, scanresult_t* result) { 196 string_list_t* output, scanresult_t* result) {
190 197
191 result->result = 0; 198 result->result = 0;
192 bool bfile; 199 bool bfile;
199 206
200 /* Scan subdirectories */ 207 /* Scan subdirectories */
201 if (!S_ISREG(filelist->st_mode)) { 208 if (!S_ISREG(filelist->st_mode)) {
202 if (S_ISDIR(filelist->st_mode)) { 209 if (S_ISDIR(filelist->st_mode)) {
203 if (settings->recursive) { 210 if (settings->recursive) {
204 string_list_t *recoutput = settings->verbose ? new_string_list_t() : NULL; 211 if (is_dir_excluded(settings->excludeDirs, filelist->filename)) {
205 scanresult_t recresult; 212 if (!settings->matchesOnly && settings->verbose) {
206 recresult.ext = result->ext; 213 // TODO: print "no match"
207 scanDirectory( 214 }
208 (scanner_t) {filelist->filename, scanner.spaces+1}, 215 } else {
209 settings, recoutput, &recresult); 216 string_list_t *recoutput = settings->verbose ? new_string_list_t() : NULL;
210 result->result += recresult.result; 217 scanresult_t recresult;
211 if (settings->verbose && (!settings->matchesOnly || recresult.result > 0)) { 218 recresult.ext = result->ext;
212 outbuf = (char*) malloc(81); 219 scanDirectory(
213 snprintf(outbuf, 81, "%*s/%*s%13u %s\n", 220 (scanner_t) {filelist->filename, scanner.spaces+1},
214 filelist->displayname_len+scanner.spaces, filelist->displayname, 221 settings, recoutput, &recresult);
215 60-filelist->displayname_len-scanner.spaces-1, "", 222 result->result += recresult.result;
216 recresult.result, result_type); 223 if (settings->verbose && (!settings->matchesOnly || recresult.result > 0)) {
217 add_string(output, outbuf); 224 outbuf = (char*) malloc(81);
218 for (unsigned i = 0 ; i < recoutput->count ; i++) { 225 snprintf(outbuf, 81, "%*s/%*s%13u %s\n",
219 add_string(output, recoutput->items[i]); 226 filelist->displayname_len+scanner.spaces, filelist->displayname,
220 } 227 60-filelist->displayname_len-scanner.spaces-1, "",
228 recresult.result, result_type);
229 add_string(output, outbuf);
230 for (unsigned i = 0 ; i < recoutput->count ; i++) {
231 add_string(output, recoutput->items[i]);
232 }
233 }
234 destroy_string_list_t(recoutput);
221 } 235 }
222 destroy_string_list_t(recoutput);
223 } 236 }
224 } else if (!settings->matchesOnly && settings->verbose) { 237 } else if (!settings->matchesOnly && settings->verbose) {
225 outbuf = (char*) malloc(81); 238 outbuf = (char*) malloc(81);
226 snprintf(outbuf, 81, "%*s\n", 239 snprintf(outbuf, 81, "%*s\n",
227 filelist->displayname_len+scanner.spaces, 240 filelist->displayname_len+scanner.spaces,

mercurial