src/scanner.c

changeset 79
e4592d0292e7
parent 76
d11c154e33e1
equal deleted inserted replaced
78:b3d267334140 79:e4592d0292e7
197 197
198 while (filelist != NULL) { 198 while (filelist != NULL) {
199 199
200 /* Scan subdirectories */ 200 /* Scan subdirectories */
201 if (!S_ISREG(filelist->st_mode)) { 201 if (!S_ISREG(filelist->st_mode)) {
202 if (settings->recursive && S_ISDIR(filelist->st_mode)) { 202 if (S_ISDIR(filelist->st_mode)) {
203 string_list_t *recoutput = new_string_list_t(); 203 if (settings->recursive) {
204 scanresult_t recresult; 204 string_list_t *recoutput = new_string_list_t();
205 recresult.ext = result->ext; 205 scanresult_t recresult;
206 scanDirectory( 206 recresult.ext = result->ext;
207 (scanner_t) {filelist->filename, scanner.spaces+1}, 207 scanDirectory(
208 settings, recoutput, &recresult); 208 (scanner_t) {filelist->filename, scanner.spaces+1},
209 result->result += recresult.result; 209 settings, recoutput, &recresult);
210 if (!settings->matchesOnly || recoutput->count > 0) { 210 result->result += recresult.result;
211 outbuf = (char*) malloc(81); 211 if (!settings->matchesOnly || recresult.result > 0) {
212 snprintf(outbuf, 81, "%*s/%*s%13u %s\n", 212 outbuf = (char*) malloc(81);
213 filelist->displayname_len+scanner.spaces, filelist->displayname, 213 snprintf(outbuf, 81, "%*s/%*s%13u %s\n",
214 60-filelist->displayname_len-scanner.spaces-1, "", 214 filelist->displayname_len+scanner.spaces, filelist->displayname,
215 recresult.result, result_type); 215 60-filelist->displayname_len-scanner.spaces-1, "",
216 add_string(output, outbuf); 216 recresult.result, result_type);
217 for (unsigned i = 0 ; i < recoutput->count ; i++) { 217 add_string(output, outbuf);
218 add_string(output, recoutput->items[i]); 218 for (unsigned i = 0 ; i < recoutput->count ; i++) {
219 add_string(output, recoutput->items[i]);
220 }
219 } 221 }
222 destroy_string_list_t(recoutput);
220 } 223 }
221 destroy_string_list_t(recoutput); 224 } else if (!settings->matchesOnly) {
222 } else {
223 outbuf = (char*) malloc(81); 225 outbuf = (char*) malloc(81);
224 snprintf(outbuf, 81, "%*s\n", 226 snprintf(outbuf, 81, "%*s\n",
225 filelist->displayname_len+scanner.spaces, 227 filelist->displayname_len+scanner.spaces,
226 filelist->displayname); 228 filelist->displayname);
227 add_string(output, outbuf); 229 add_string(output, outbuf);
286 } while (!bfile && a != EOF); 288 } while (!bfile && a != EOF);
287 fclose(file); 289 fclose(file);
288 290
289 /* Print and sum line count */ 291 /* Print and sum line count */
290 if (bfile) { 292 if (bfile) {
291 if (!settings->matchesOnly) { 293 if (!settings->matchesOnly && !settings->dirsOnly) {
292 outbuf = (char*) malloc(81); 294 outbuf = (char*) malloc(81);
293 snprintf(outbuf, 81, 295 snprintf(outbuf, 81,
294 "%*s%*s%19s\n", filelist->displayname_len+scanner.spaces, 296 "%*s%*s%19s\n", filelist->displayname_len+scanner.spaces,
295 filelist->displayname, 297 filelist->displayname,
296 60-filelist->displayname_len-scanner.spaces, "", "binary"); 298 60-filelist->displayname_len-scanner.spaces, "", "binary");
297 add_string(output, outbuf); 299 add_string(output, outbuf);
298 } 300 }
299 } else { 301 } else {
300 addResultPerExtension(result->ext, filelist->ext, res_value); 302 addResultPerExtension(result->ext, filelist->ext, res_value);
301 result->result += res_value; 303 result->result += res_value;
302 outbuf = (char*) malloc(81); 304 if (!settings->dirsOnly) {
303 snprintf(outbuf, 81, "%*s%*s%13u %s\n", 305 outbuf = (char*) malloc(81);
304 filelist->displayname_len+scanner.spaces, 306 snprintf(outbuf, 81, "%*s%*s%13u %s\n",
305 filelist->displayname, 307 filelist->displayname_len+scanner.spaces,
306 60-filelist->displayname_len-scanner.spaces, 308 filelist->displayname,
307 "", 309 60-filelist->displayname_len-scanner.spaces,
308 res_value, 310 "",
309 result_type 311 res_value,
310 ); 312 result_type
311 add_string(output, outbuf); 313 );
314 add_string(output, outbuf);
315 }
312 } 316 }
313 } 317 }
314 } else { 318 } else {
315 if (!settings->matchesOnly) { 319 if (!settings->matchesOnly && !settings->dirsOnly) {
316 /* Print hint */ 320 /* Print hint */
317 outbuf = (char*) malloc(81); 321 outbuf = (char*) malloc(81);
318 snprintf(outbuf, 81, "%*s%*s%19s\n", 322 snprintf(outbuf, 81, "%*s%*s%19s\n",
319 filelist->displayname_len+scanner.spaces, filelist->displayname, 323 filelist->displayname_len+scanner.spaces, filelist->displayname,
320 60-filelist->displayname_len-scanner.spaces, "", "no match"); 324 60-filelist->displayname_len-scanner.spaces, "", "no match");

mercurial