Changeset 3192 in MondoRescue for branches/3.0/mondo/src/common/libmondo-filelist.c
- Timestamp:
- Sep 25, 2013, 9:03:25 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3.0/mondo/src/common/libmondo-filelist.c
r3188 r3192 86 86 87 87 /*@ pointers ********************** */ 88 char *ptr = NULL;88 char *ptr; 89 89 FILE *fout; 90 90 … … 116 116 mr_free(tempfile); 117 117 118 if (bkpinfo->image_devs) { 119 log_it("image_devs : %s", bkpinfo->image_devs); 120 121 ptr = bkpinfo->image_devs; 122 123 while (ptr && *ptr) { 124 mr_asprintf(dev, "%s", ptr); 125 log_it("Examining imagedev %s", dev); 126 for (i = 0; i < (int) strlen(dev) && dev[i] != ' '; i++); 127 dev[i] = '\0'; 128 if (!strlen(dev)) { 129 mr_free(dev); 130 continue; 131 } 132 fprintf(fout, "%s\n", dev); 133 log_it("Adding '%s' to biggielist", dev); 134 if ((ptr = strchr(ptr, ' '))) { 135 ptr++; 136 } 137 mr_free(dev); 118 log_it(bkpinfo->image_devs); 119 120 ptr = bkpinfo->image_devs; 121 122 malloc_string(dev); 123 while (ptr && *ptr) { 124 strcpy(dev, ptr); 125 log_it("Examining imagedev %s", dev); 126 for (i = 0; i < (int) strlen(dev) && dev[i] != ' '; i++); 127 dev[i] = '\0'; 128 if (!strlen(dev)) { 129 continue; 130 } 131 fprintf(fout, "%s\n", dev); 132 log_it("Adding '%s' to biggielist", dev); 133 if ((ptr = strchr(ptr, ' '))) { 134 ptr++; 138 135 } 139 136 } … … 141 138 mvaddstr_and_log_it(g_currentY++, 74, "Done."); 142 139 140 paranoid_free(dev); 143 141 return (retval); 144 142 } … … 160 158 161 159 mr_asprintf(tmp_fname, "%s/sortfile", bkpinfo->tmpdir); 160 162 161 mr_asprintf(command, "sort %s > %s 2>> %s", orig_fname, tmp_fname, MONDO_LOGFILE); 163 162 retval = system(command); … … 332 331 333 332 if (curr_set_no == 0) { 334 log_msg(1, "Only one fileset. Fine.");333 mr_asprintf(tmp, "Only one fileset. Fine."); 335 334 } else { 336 log_msg(1, "Filelist divided into %ld sets", curr_set_no + 1); 337 } 335 mr_asprintf(tmp, "Filelist divided into %ld sets", curr_set_no + 1); 336 } 337 log_msg(1, tmp); 338 mr_free(tmp); 338 339 close_evalcall_form(); 339 340 /* This is to work around an obscure bug in Newt; open a form, close it, … … 341 342 then update_progress_form() won't show the "time taken / time remaining" 342 343 line. The bug only crops up AFTER the call to chop_filelist(). Weird. */ 344 #ifndef _XWIN 343 345 if (!g_text_mode) { 344 346 open_progress_form("", "", "", "", 100); … … 347 349 newtPopWindow(); 348 350 } 351 #endif 349 352 return (err ? 0 : curr_set_no + 1); 350 353 } … … 407 410 int call_exe_and_pipe_output_to_fd(char *syscall, FILE * pout) 408 411 { 409 FILE *pattr = NULL; 410 char *tmp = NULL; 412 FILE *pattr; 413 char *tmp; 414 char *p; 411 415 412 416 pattr = popen(syscall, "r"); … … 420 424 return (2); 421 425 } 422 for (mr_getline(tmp, pattr); !feof(pattr); mr_getline(tmp, pattr)) { 426 malloc_string(tmp); 427 for (p = fgets(tmp, MAX_STR_LEN, pattr); !feof(pattr) && (p != NULL); 428 p = fgets(tmp, MAX_STR_LEN, pattr)) { 423 429 fputs(tmp, pout); 424 mr_free(tmp); 425 } 426 mr_free(tmp); 430 } 427 431 paranoid_pclose(pattr); 432 paranoid_free(tmp); 428 433 return (0); 429 434 } … … 434 439 char *auxlist_fname) 435 440 { 436 FILE *fin = NULL;437 FILE *pout = NULL;441 FILE *fin; 442 FILE *pout; 438 443 char *pout_command = NULL; 439 char *syscall = NULL;440 char *file_to_analyze = NULL;444 char *syscall; 445 char *file_to_analyze; 441 446 char *strtmp = NULL; 442 447 char *tmp = NULL; 448 char *p = NULL; 443 449 int i; 444 450 … … 456 462 mr_free(pout_command); 457 463 458 for (mr_getline(file_to_analyze, fin); !feof(fin); mr_getline(file_to_analyze, fin)) { 464 malloc_string(file_to_analyze); 465 for (p = fgets(file_to_analyze, MAX_STR_LEN, fin); !feof(fin) && (p != NULL); 466 p = fgets(file_to_analyze, MAX_STR_LEN, fin)) { 459 467 i = strlen(file_to_analyze); 460 468 if (i > 0 && file_to_analyze[i - 1] < 32) { … … 464 472 tmp = mr_stresc(file_to_analyze, "'", '\\', '\''); 465 473 mr_asprintf(syscall, "%s '%s' 2>> /dev/null", syscall_sprintf, tmp); // " MONDO_LOGFILE); 466 mr_free(tmp);474 paranoid_free(tmp); 467 475 log_msg(20,"calling %s\n",syscall); 468 476 call_exe_and_pipe_output_to_fd(syscall, pout); 469 mr_free(syscall); 470 mr_free(file_to_analyze); 471 } 472 mr_free(file_to_analyze); 477 paranoid_free(syscall); 478 } 473 479 paranoid_fclose(fin); 474 480 paranoid_pclose(pout); 481 paranoid_free(file_to_analyze); 475 482 return (0); 476 483 } … … 515 522 char *syscall_pin = NULL; 516 523 char *syscall_pout = NULL; 517 char *incoming = NULL; 518 char *current_subset_file = NULL; 519 char *current_master_file = NULL; 524 char *incoming; 525 char *current_subset_file, *current_master_file; 520 526 char *masklist = NULL; 521 527 int retval = 0; 522 528 int i; 523 char *p, *q ;529 char *p, *q, *r; 524 530 char *tmp = NULL; 525 531 FILE *pin, *pout, *faclin; 526 532 527 log_msg(1, "set_EXAT_list(%s, %s, %s)", orig_msklist, original_exat_fname, executable); 533 log_msg(1, "set_EXAT_list(%s, %s, %s)", orig_msklist, 534 original_exat_fname, executable); 528 535 if (!orig_msklist || !orig_msklist[0] 529 536 || !does_file_exist(orig_msklist)) { … … 545 552 } 546 553 if (length_of_file(original_exat_fname) <= 0) { 547 log_msg(1, "original_exat_fname %s is empty or missing, so no need to set EXAT list", original_exat_fname); 554 log_msg(1, 555 "original_exat_fname %s is empty or missing, so no need to set EXAT list", 556 original_exat_fname); 548 557 return (0); 549 558 } 559 malloc_string(incoming); 560 malloc_string(current_subset_file); 561 malloc_string(current_master_file); 550 562 mr_asprintf(masklist, "%s/masklist", bkpinfo->tmpdir); 551 563 mr_asprintf(command, "cp -f %s %s", orig_msklist, masklist); … … 554 566 555 567 sort_file(masklist); 568 current_subset_file[0] = current_master_file[0] = '\0'; 556 569 557 570 mr_asprintf(syscall_pout, "%s --restore - 2>> %s", executable, MONDO_LOGFILE); … … 586 599 // printf("Hi there. Starting the loop\n"); 587 600 588 mr_getline(current_subset_file, faclin); 589 mr_getline(incoming, pin); 590 while (!feof(pin) && !feof(faclin)) { 591 mr_asprintf(current_master_file, "%s", incoming + 8); 601 r = fgets(current_subset_file, MAX_STR_LEN, faclin); 602 r = fgets(incoming, MAX_STR_LEN, pin); 603 while (!feof(pin) && !feof(faclin) && (r != NULL)) { 604 // printf("incoming = %s", incoming); 605 606 strcpy(current_master_file, incoming + 8); 592 607 593 608 p = current_subset_file; … … 617 632 if (i < 0) { // read another subset file in. 618 633 log_msg(my_depth, "Reading next subset line in\n\n"); 619 mr_free(current_subset_file); 620 mr_getline(current_subset_file, faclin); 634 r = fgets(current_subset_file, MAX_STR_LEN, faclin); 621 635 continue; 622 636 } … … 625 639 fputs(incoming, pout); 626 640 } 627 mr_free(incoming); 628 mr_getline(incoming, pin); 641 r = fgets(incoming, MAX_STR_LEN, pin); 629 642 if (!i) { 630 643 log_msg(my_depth, "Copying master %s", q); 631 644 } 645 // if (!i) { printf("Match --- %s\n", q); } 632 646 633 647 while (!feof(pin) && strncmp(incoming, "# file: ", 8)) { 634 648 if (!i) { 649 650 // printf("%s", incoming); 651 635 652 fputs(incoming, pout); 636 653 } 637 mr_free(incoming); 638 mr_getline(incoming, pin); 654 r = fgets(incoming, MAX_STR_LEN, pin); 639 655 } 640 656 if (!i) { 641 mr_free(current_subset_file); 642 mr_getline(current_subset_file, faclin); 643 } 644 mr_free(current_master_file); 645 } 646 mr_free(current_subset_file); 647 mr_free(incoming); 657 r = fgets(current_subset_file, MAX_STR_LEN, faclin); 658 } 659 } 660 while (!feof(pin)) { 661 r = fgets(incoming, MAX_STR_LEN, pin); 662 } 648 663 fclose(faclin); 649 664 pclose(pin); 650 665 pclose(pout); 651 666 667 // printf("OK, loop is done\n"); 668 652 669 unlink(masklist); 653 670 mr_free(masklist); 654 671 672 paranoid_free(current_subset_file); 673 paranoid_free(current_master_file); 674 paranoid_free(incoming); 655 675 return (retval); 656 676 } … … 750 770 noof_chars = strlen(string_to_add) + 1; /* we include the '\0' */ 751 771 752 772 /* walk across tree if necessary */ 753 773 node = startnode; 754 774 char_to_add = string_to_add[0]; … … 759 779 } 760 780 761 781 /* walk down tree if appropriate */ 762 782 if (node->down != NULL && node->ch == char_to_add) { 763 783 log_msg(7, "depth=%d char=%c --- going DOWN", depth, char_to_add); … … 773 793 } 774 794 775 795 /* add here */ 776 796 if (!(newnode = (struct s_node *) malloc(sizeof(struct s_node)))) { 777 797 log_to_screen("failed to malloc"); … … 844 864 /*@ buffers **************************************************** */ 845 865 char *command_to_open_fname = NULL; 846 char *fname = NULL;847 char *tmp = NULL;866 char fname[MAX_STR_LEN]; 867 char tmp[MAX_STR_LEN]; 848 868 char *tmp1 = NULL; 849 869 int pos_in_fname; … … 891 911 892 912 open_evalcall_form("Loading filelist from disk"); 893 for (mr_getline(fname, pin); !feof(pin); mr_getline(fname, pin)) { 894 if ((strlen(fname) > 0) && (fname[strlen(fname) - 1] == 13 || fname[strlen(fname) - 1] == 10)) { 913 for (tmp1 = fgets(fname, MAX_STR_LEN, pin); !feof(pin); 914 tmp1 = fgets(fname, MAX_STR_LEN, pin)) { 915 if (((fname[strlen(fname) - 1] == 13) || (fname[strlen(fname) - 1] == 10)) && (strlen(fname) > 0)) { 895 916 fname[strlen(fname) - 1] = '\0'; 896 917 } 918 // strip_spaces (fname); 897 919 if (!strlen(fname)) { 898 mr_free(fname);899 920 continue; 900 921 } … … 903 924 continue; 904 925 } 905 mr_asprintf(tmp, "%s", fname);926 strcpy(tmp, fname); 906 927 tmp[pos_in_fname] = '\0'; 907 928 if (strlen(tmp)) { 908 929 add_string_at_node(filelist, tmp); 909 930 } 910 mr_free(tmp);911 931 } 912 932 add_string_at_node(filelist, fname); 913 914 933 if (!(++lino % 1111)) { 915 934 percentage = (int) (lino * 100 / lines_in_filelist); 916 935 update_evalcall_form(percentage); 917 936 } 918 mr_free(fname); 919 } 920 mr_free(fname); 921 937 } 922 938 paranoid_pclose(pin); 923 939 close_evalcall_form(); … … 1281 1297 1282 1298 1299 1300 1283 1301 /** 1284 1302 * Number of entries in the skeleton filelist. … … 1296 1314 * @bug Return value should be @c void. 1297 1315 */ 1298 int open_and_list_dir(char *dir1, char *sth, FILE * fout, time_t time_of_last_full_backup) { 1299 1316 int open_and_list_dir(char *dir1, char *sth, FILE * fout, 1317 time_t time_of_last_full_backup) 1318 { 1300 1319 const char delims[] = "|"; 1301 1320 … … 1304 1323 struct stat statbuf; 1305 1324 char *new; 1306 char *tmp = NULL;1325 char *tmp; 1307 1326 char *dir = NULL; 1308 1327 static int percentage = 0; 1309 char *skip_these = NULL;1328 char *skip_these; 1310 1329 char *new_with_pipe; 1311 1330 char *strtmp = NULL; 1312 1331 char *token = NULL; 1313 1332 char *find_excludes = NULL; 1314 char *name_of_evalcall_form = NULL; 1315 char *find_skeleton_marker = NULL; 1333 static char *name_of_evalcall_form; 1316 1334 int i; 1317 1335 int lastpos = 0; … … 1320 1338 static int counter = 0; 1321 1339 static int uberctr = 0; 1322 static long skeleton_lino = 0L; 1323 static time_t last_time = (time_t)0; 1340 static char *find_skeleton_marker; 1341 static long skeleton_lino = 0; 1342 static time_t last_time = 0; 1324 1343 time_t this_time; 1325 1344 … … 1336 1355 1337 1356 if (!depth) { 1357 malloc_string(name_of_evalcall_form); 1358 malloc_string(find_skeleton_marker); 1338 1359 while((token = mr_strtok(sth, delims, &lastpos)) != NULL) { 1339 1360 mr_strcat(find_excludes," -path %s -prune -o", token); … … 1354 1375 mr_asprintf(strtmp, "find '%s' -maxdepth %d -fstype mvfs -prune -o -path /proc -prune -o %s -type d -print > %s 2> /dev/null", dir, MAX_SKEL_DEPTH, find_excludes, g_skeleton_filelist); 1355 1376 #endif 1356 mr_free(find_excludes); 1357 1377 paranoid_free(find_excludes); 1358 1378 log_msg(5, "find command = %s", strtmp); 1359 1379 paranoid_system(strtmp); 1360 mr_free(strtmp); 1361 1380 paranoid_free(strtmp); 1362 1381 mr_asprintf(tmp, "wc -l %s | awk '{print $1;}'", g_skeleton_filelist); 1363 g_skeleton_entries = 1 + atol(call_program_and_get_last_line_of_output(tmp));1364 mr_free(tmp);1365 1366 mr_asprintf(name_of_evalcall_form, "Making catalog of %s", dir1);1382 g_skeleton_entries = 1383 1 + atol(call_program_and_get_last_line_of_output(tmp)); 1384 paranoid_free(tmp); 1385 sprintf(name_of_evalcall_form, "Making catalog of %s", dir1); 1367 1386 open_evalcall_form(name_of_evalcall_form); 1368 mr_free(name_of_evalcall_form); 1369 1387 find_skeleton_marker[0] = '\0'; 1370 1388 skeleton_lino = 1; 1371 1389 log_msg(5, "entries = %ld", g_skeleton_entries); … … 1373 1391 } else if (depth <= MAX_SKEL_DEPTH) // update evalcall form if appropriate 1374 1392 { 1375 mr_asprintf(find_skeleton_marker, "grep -Fv '%s' %s > %s.new 2> /dev/null", dir, g_skeleton_filelist, g_skeleton_filelist); 1393 sprintf(find_skeleton_marker, 1394 "grep -Fv '%s' %s > %s.new 2> /dev/null", dir, 1395 g_skeleton_filelist, g_skeleton_filelist); 1396 // log_msg(0, "fsm = %s", find_skeleton_marker); 1376 1397 if (!system(find_skeleton_marker)) { 1377 1398 percentage = (int) (skeleton_lino * 100 / g_skeleton_entries); 1378 1399 skeleton_lino++; 1379 mr_free(find_skeleton_marker); 1380 1381 mr_asprintf(find_skeleton_marker, "mv -f %s.new %s", g_skeleton_filelist, g_skeleton_filelist); 1400 // log_msg(5, "Found %s", dir); 1401 // log_msg(2, "Incrementing skeleton_lino; now %ld/%ld (%d%%)", skeleton_lino, g_skeleton_entries, percentage); 1402 sprintf(find_skeleton_marker, "mv -f %s.new %s", 1403 g_skeleton_filelist, g_skeleton_filelist); 1404 // log_msg(6, "fsm = %s", find_skeleton_marker); 1382 1405 paranoid_system(find_skeleton_marker); 1383 1406 time(&this_time); 1384 1407 if (this_time != last_time) { 1385 1408 last_time = this_time; 1409 #ifndef _XWIN 1386 1410 if (!g_text_mode) { 1387 1411 int cols, rows; … … 1391 1415 mr_free(tmp); 1392 1416 } 1417 #endif 1393 1418 update_evalcall_form(percentage); 1394 1419 } 1395 1420 } 1396 mr_free(find_skeleton_marker);1397 1421 } 1398 1422 … … 1406 1430 mr_asprintf(tmp,"opendir %s", dir1); 1407 1431 log_OS_error(tmp); 1408 mr_free(tmp);1432 paranoid_free(tmp); 1409 1433 } else if (strstr(skip_these, new_with_pipe)) { 1410 1434 log_msg(10, "Found dir ***%s**** excluded", dir1); … … 1420 1444 mr_asprintf(new,"%s%s",dir1,dit->d_name); 1421 1445 } 1422 mr_free(new_with_pipe);1446 paranoid_free(new_with_pipe); 1423 1447 mr_asprintf(new_with_pipe, "|%s|", new); 1424 1448 if (strstr(skip_these, new_with_pipe)) { 1425 1449 fprintf(fout, "%s\n", new); 1426 1450 log_msg(10, "Found child dir ***%s**** excluded", new); 1427 mr_free(new_with_pipe);1451 paranoid_free(new_with_pipe); 1428 1452 } else { 1429 mr_free(new_with_pipe);1453 paranoid_free(new_with_pipe); 1430 1454 if (!lstat(new, &statbuf)) { 1431 1455 if (!S_ISLNK(statbuf.st_mode) 1432 1456 && S_ISDIR(statbuf.st_mode)) { 1433 1457 log_msg(10, "Found child dir ***%s**** parsed", new); 1434 open_and_list_dir(new, skip_these, fout, time_of_last_full_backup); 1458 open_and_list_dir(new, skip_these, fout, 1459 time_of_last_full_backup); 1435 1460 } else { 1436 if (time_of_last_full_backup == 0 || time_of_last_full_backup < statbuf.st_ctime) { 1461 if (time_of_last_full_backup == 0 1462 || time_of_last_full_backup < 1463 statbuf.st_ctime) { 1437 1464 log_msg(10, "Found child file ***%s**** parsed", new); 1438 1465 fprintf(fout, "%s\n", new); … … 1441 1468 uberctr++; 1442 1469 mr_asprintf(tmp, " %c ", special_dot_char(uberctr)); 1470 #ifndef _XWIN 1443 1471 if (!g_text_mode) { 1444 newtDrawRootText(77, g_noof_rows - 3, tmp); 1472 newtDrawRootText(77, g_noof_rows - 3, 1473 tmp); 1445 1474 newtRefresh(); 1446 1475 } 1447 mr_free(tmp); 1476 #endif 1477 paranoid_free(tmp); 1448 1478 } 1449 1479 } … … 1451 1481 } 1452 1482 } 1453 mr_free(new);1454 } 1455 } 1456 mr_free(new_with_pipe);1457 mr_free(skip_these);1483 paranoid_free(new); 1484 } 1485 } 1486 paranoid_free(new_with_pipe); 1487 paranoid_free(skip_these); 1458 1488 mr_free(dir); 1459 1489 … … 1466 1496 if (!depth) { 1467 1497 close_evalcall_form(); 1498 paranoid_free(name_of_evalcall_form); 1499 paranoid_free(find_skeleton_marker); 1468 1500 unlink(g_skeleton_filelist); 1469 1501 log_msg(5, "g_skeleton_entries = %ld", g_skeleton_entries); … … 1493 1525 char *p, *q; 1494 1526 char *sz_datefile; 1495 char *sz_filelist ;1527 char *sz_filelist, *tmp; 1496 1528 char *exclude_paths = NULL; 1497 1529 FILE *fout; … … 1502 1534 char *tmp2 = NULL; 1503 1535 1536 malloc_string(tmp); 1537 malloc_string(g_skeleton_filelist); 1504 1538 mr_asprintf(sz_datefile,MONDO_CACHE"/difflevel.%d" , 0); 1505 1539 if (!include_paths && !userdef_filelist) { 1506 fatal_error("Please supply either include_paths or userdef_filelist"); 1507 } 1508 // make hole for filelist 1540 fatal_error 1541 ("Please supply either include_paths or userdef_filelist"); 1542 } 1543 // make hole for filelist 1509 1544 mr_asprintf(command, "mkdir -p %s/archives", scratchdir); 1510 1545 paranoid_system(command); … … 1522 1557 // backup last known good datefile just in case :) 1523 1558 if (does_file_exist(sz_datefile)) { 1524 mr_asprintf(command, "mv -f %s %s.aborted", sz_datefile, sz_datefile); 1559 mr_asprintf(command, "mv -f %s %s.aborted", sz_datefile, 1560 sz_datefile); 1525 1561 paranoid_system(command); 1526 1562 mr_free(command); … … 1531 1567 ("date +%s")); 1532 1568 } else if (lstat(sz_datefile, &statbuf)) { 1533 log_msg(2, "Warning - unable to find date of previous backup. Full backup instead."); 1569 log_msg(2, 1570 "Warning - unable to find date of previous backup. Full backup instead."); 1534 1571 differential = 0; 1535 1572 time_of_last_full_backup = 0; … … 1542 1579 // use user-specified filelist (if specified) 1543 1580 if (userdef_filelist) { 1544 log_msg(1, "Using the user-specified filelist - %s - instead of calculating one", userdef_filelist); 1581 log_msg(1, 1582 "Using the user-specified filelist - %s - instead of calculating one", 1583 userdef_filelist); 1545 1584 mr_asprintf(command, "cp -f %s %s", userdef_filelist, sz_filelist); 1546 1585 if (run_program_and_log_output(command, 3)) { … … 1550 1589 mr_free(command); 1551 1590 } else { 1552 if (include_paths) { 1553 log_msg(2, "include_paths = '%s'", include_paths); 1554 } 1591 log_msg(2, "include_paths = '%s'", include_paths); 1555 1592 log_msg(1, "Calculating filelist"); 1556 1593 mr_asprintf(tmp2, "%s", call_program_and_get_last_line_of_output("mount | grep -Ew 'ntfs|ntfs-3g|fat|vfat|dos' | awk '{print $3}'")); … … 1560 1597 log_msg(2, "Found windows FS: %s",tmp2); 1561 1598 mr_asprintf(tmp1, "find %s -name '/win386.swp' -o -name '/hiberfil.sys' -o -name '/pagefile.sys' 2> /dev/null\n",tmp2); 1562 mr_free(tmp2);1599 paranoid_free(tmp2); 1563 1600 mr_asprintf(tmp2, "%s", call_program_and_get_last_line_of_output(tmp1)); 1564 1601 log_msg(2, "Found windows files: %s",tmp2); 1565 1602 } 1566 mr_free(tmp1);1603 paranoid_free(tmp1); 1567 1604 1568 1605 mr_asprintf(exclude_paths, MONDO_CACHE"|%s|%s|%s|.|..|"MNT_CDROM"|"MNT_FLOPPY"|/media|/tmp|/proc|/sys|/run|/dev/shm|"MINDI_CACHE, tmp2, (tmpdir[0] == '/' && tmpdir[1] == '/') ? (tmpdir + 1) : tmpdir, (scratchdir[0] == '/' && scratchdir[1] == '/') ? (scratchdir + 1) : scratchdir); … … 1570 1607 mr_strcat(exclude_paths,"|%s",excp); 1571 1608 } 1572 mr_free(tmp2);1609 paranoid_free(tmp2); 1573 1610 1574 1611 log_msg(2, "Excluding paths = '%s'", exclude_paths); 1575 log_msg(2, "Generating skeleton filelist so that we can track our progress"); 1576 mr_asprintf(g_skeleton_filelist, "%s/tmpfs/skeleton.txt", tmpdir); 1612 log_msg(2, 1613 "Generating skeleton filelist so that we can track our progress"); 1614 sprintf(g_skeleton_filelist, "%s/tmpfs/skeleton.txt", tmpdir); 1577 1615 make_hole_for_file(g_skeleton_filelist); 1578 1579 1616 log_msg(4, "g_skeleton_entries = %ld", g_skeleton_entries); 1580 1617 log_msg(2, "Opening out filelist to %s", sz_filelist); … … 1582 1619 fatal_error("Cannot openout to sz_filelist"); 1583 1620 } 1584 if ( (include_paths != NULL) && (strlen(include_paths) == 0)) {1621 if (strlen(include_paths) == 0) { 1585 1622 log_msg(1, "Including only '/' in %s", sz_filelist); 1586 1623 open_and_list_dir("/", exclude_paths, fout, … … 1600 1637 } 1601 1638 } 1602 mr_free(exclude_paths);1603 1639 paranoid_fclose(fout); 1604 1640 } … … 1618 1654 paranoid_free(sz_filelist); 1619 1655 log_msg(2, "Freeing variables"); 1620 mr_free(g_skeleton_filelist); 1656 paranoid_free(exclude_paths); 1657 paranoid_free(tmp); 1658 paranoid_free(g_skeleton_filelist); 1621 1659 log_msg(2, "Exiting"); 1622 1660 return (0); 1623 1661 } 1624 1625 1662 1626 1663 /** … … 1643 1680 1644 1681 assert(bkpinfo != NULL); 1645 log_it("tmpdir=%s; scratchdir=%s", bkpinfo->tmpdir, bkpinfo->scratchdir); 1682 log_it("tmpdir=%s; scratchdir=%s", bkpinfo->tmpdir, 1683 bkpinfo->scratchdir); 1646 1684 if (bkpinfo->make_filelist) { 1647 1685 mvaddstr_and_log_it(g_currentY, 0, … … 1754 1792 FILE *fin; 1755 1793 FILE *fout; 1756 char *fname = NULL; 1757 char *tmp = NULL; 1758 1794 char *fname; 1795 char *tmp; 1796 size_t len = 0; // Scrub's patch doesn't work without that 1797 1798 // log_msg(1, "use_star = %s", (use_star)?"TRUE":"FALSE"); 1799 malloc_string(fname); 1800 malloc_string(tmp); 1759 1801 log_msg(5, "starting"); 1760 1802 log_msg(5, "needles_list_fname = %s", needles_list_fname); … … 1767 1809 } 1768 1810 while (!feof(fin)) { 1769 mr_getline(fname, fin); 1811 // fscanf(fin, "%s\n", fname); 1812 len = MAX_STR_LEN - 1; 1813 if (getline(&fname, &len, fin)) { 1814 // FIXME 1815 } 1770 1816 if (!use_star) { 1771 1817 if (fname[0] == '/') { 1772 mr_asprintf(tmp, "%s", fname);1818 strcpy(tmp, fname); 1773 1819 } else { 1774 mr_asprintf(tmp, "/%s", fname); 1820 tmp[0] = '/'; 1821 strcpy(tmp + 1, fname); 1775 1822 } 1776 mr_free(fname); 1777 fname = tmp; 1823 strcpy(fname, tmp); 1778 1824 } 1779 1825 while (strlen(fname) > 0 && fname[strlen(fname) - 1] < 32) { … … 1786 1832 if (found_node->selected) { 1787 1833 if (fname[0] == '/') { 1788 mr_asprintf(tmp, "%s", fname + 1); 1789 mr_free(fname); 1790 fname = tmp; 1834 strcpy(tmp, fname + 1); 1835 strcpy(fname, tmp); 1791 1836 } 1792 1837 log_msg(5, "Found '%s'", fname); 1793 tmp = mr_stresc(fname, "[]*?", '\\', "'"); 1794 mr_free(fname); 1795 fname = tmp; 1796 fprintf(fout, "%s\n", fname); 1838 turn_wildcard_chars_into_literal_chars(tmp, fname); 1839 fprintf(fout, "%s\n", tmp); 1797 1840 retval++; 1798 1841 } 1799 1842 } 1800 mr_free(fname);1801 1843 } 1802 1844 paranoid_fclose(fout); 1803 1845 paranoid_fclose(fin); 1846 paranoid_free(fname); 1847 paranoid_free(tmp); 1804 1848 return (retval); 1805 1849 } 1850 1851 1852 1806 1853 1807 1854 … … 1818 1865 char *list_of_files_fname, bool flag_em) 1819 1866 { 1820 FILE *fin = NULL; 1821 char *tmp = NULL; 1822 struct s_node *nod = NULL; 1823 1867 FILE *fin; 1868 char *tmp; 1869 char *p; 1870 struct s_node *nod; 1871 1872 malloc_string(tmp); 1824 1873 log_msg(3, "Adding %s to filelist", list_of_files_fname); 1825 1874 if (!(fin = fopen(list_of_files_fname, "r"))) { … … 1827 1876 return (1); 1828 1877 } 1829 for (mr_getline(tmp, fin); !feof(fin); mr_getline(tmp, fin)) { 1878 for (p = fgets(tmp, MAX_STR_LEN, fin); !feof(fin) && (p != NULL); 1879 p = fgets(tmp, MAX_STR_LEN, fin)) { 1830 1880 if (!tmp[0]) { 1831 mr_free(tmp);1832 1881 continue; 1833 1882 } 1834 if ((strlen(tmp) > 0) && (tmp[strlen(tmp) - 1] == 13 || tmp[strlen(tmp) - 1] == 10)) { 1883 if ((tmp[strlen(tmp) - 1] == 13 || tmp[strlen(tmp) - 1] == 10) 1884 && strlen(tmp) > 0) { 1835 1885 tmp[strlen(tmp) - 1] = '\0'; 1836 1886 } 1837 1887 log_msg(2, "tmp = '%s'", tmp); 1838 1888 if (!tmp[0]) { 1839 mr_free(tmp);1840 1889 continue; 1841 1890 } … … 1851 1900 log_msg(5, "Flagged '%s'", tmp); 1852 1901 } 1853 mr_free(tmp); 1854 } 1855 mr_free(tmp); 1902 } 1856 1903 paranoid_fclose(fin); 1904 paranoid_free(tmp); 1857 1905 return (0); 1858 1906 }
Note:
See TracChangeset
for help on using the changeset viewer.