Changeset 900 in MondoRescue
- Timestamp:
-
Oct 24, 2006, 8:49:18 AM
(14 years ago)
- Author:
- Bruno Cornec
- Message:
-
Huge patch to introduce low level functions that will bw used everywhere (mr_free, mr_asprintf, ...)
Nearly linking now due to that.
- Location:
- trunk
-
Files:
-
- 8 added
- 1 deleted
- 43 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
r588
|
r900
|
|
38 | 38 | |
39 | 39 | %.8.ps: %.8 |
40 | | @man2dvi ./$< > $<.dvi |
41 | | @dvips -q $<.dvi -o $@ |
42 | | @rm -f $<.dvi |
| 40 | @groff -Tps -mandoc ./$< > $@ |
43 | 41 | |
44 | 42 | %.8.pdf: %.8.ps |
-
r815
|
r900
|
|
9 | 9 | * This is the main file (at least the longest one) in libmondo. |
10 | 10 | */ |
| 11 | #include <sys/sem.h> |
| 12 | #include <sys/types.h> |
| 13 | #include <sys/ipc.h> |
| 14 | #include <stdarg.h> |
| 15 | #include <unistd.h> |
11 | 16 | |
12 | 17 | #include "my-stuff.h" |
13 | 18 | #include "../common/mondostructures.h" |
14 | 19 | #include "mr_conf.h" |
| 20 | #include "mr_mem.h" |
| 21 | #include "mr_err.h" |
| 22 | |
15 | 23 | #include "libmondo-string-EXT.h" |
16 | 24 | #include "libmondo-stream-EXT.h" |
… |
… |
|
24 | 32 | #include "libmondo-verify-EXT.h" |
25 | 33 | #include "libmondo-archive.h" |
26 | | #include <sys/sem.h> |
27 | | #include <sys/types.h> |
28 | | #include <sys/ipc.h> |
29 | | #include <stdarg.h> |
30 | | #include <unistd.h> |
31 | 34 | #define DVDRWFORMAT 1 |
32 | 35 | |
… |
… |
|
201 | 204 | |
202 | 205 | if (!does_file_exist(filelist)) { |
203 | | asprintf(&tmp, |
| 206 | mr_asprintf(&tmp, |
204 | 207 | "(archive_this_fileset) - filelist %s does not exist", |
205 | 208 | filelist); |
206 | 209 | log_to_screen(tmp); |
207 | | paranoid_free(tmp); |
| 210 | mr_free(tmp); |
208 | 211 | return (1); |
209 | 212 | } |
210 | 213 | |
211 | | asprintf(&tmp, "echo hi > %s 2> /dev/null", fname); |
| 214 | mr_asprintf(&tmp, "echo hi > %s 2> /dev/null", fname); |
212 | 215 | if (system(tmp)) { |
213 | 216 | fatal_error("Unable to write tarball to scratchdir"); |
214 | 217 | } |
215 | | paranoid_free(tmp); |
216 | | |
217 | | asprintf(&command, "star H=star list=%s -c " STAR_ACL_SZ " file=%s", |
| 218 | mr_free(tmp); |
| 219 | |
| 220 | mr_asprintf(&command, "star H=star list=%s -c " STAR_ACL_SZ " file=%s", |
218 | 221 | filelist, fname); |
219 | 222 | if (bkpinfo->use_lzo) { |
… |
… |
|
221 | 224 | } |
222 | 225 | if (bkpinfo->compression_level > 0) { |
223 | | asprintf(&tmp, "%s -bz", command); |
224 | | paranoid_free(command); |
| 226 | mr_asprintf(&tmp, "%s -bz", command); |
| 227 | mr_free(command); |
225 | 228 | command = tmp; |
226 | 229 | } |
227 | | asprintf(&tmp, "%s 2>> %s", command, MONDO_LOGFILE); |
228 | | paranoid_free(command); |
| 230 | mr_asprintf(&tmp, "%s 2>> %s", command, MONDO_LOGFILE); |
| 231 | mr_free(command); |
229 | 232 | command = tmp; |
230 | 233 | log_msg(4, "command = '%s'", command); |
… |
… |
|
241 | 244 | res = 0; |
242 | 245 | } |
243 | | paranoid_free(tmp); |
| 246 | mr_free(tmp); |
244 | 247 | if (res) { |
245 | 248 | log_OS_error(command); |
… |
… |
|
256 | 259 | } |
257 | 260 | } |
258 | | paranoid_free(command); |
| 261 | mr_free(command); |
259 | 262 | |
260 | 263 | retval += res; |
… |
… |
|
314 | 317 | |
315 | 318 | if (!does_file_exist(filelist)) { |
316 | | asprintf(&tmp, |
| 319 | mr_asprintf(&tmp, |
317 | 320 | "(archive_this_fileset) - filelist %s does not exist", |
318 | 321 | filelist); |
319 | 322 | log_to_screen(tmp); |
320 | | paranoid_free(tmp) |
| 323 | mr_free(tmp); |
321 | 324 | return (1); |
322 | 325 | } |
323 | | asprintf(&tmp, "echo hi > %s 2> /dev/null", fname); |
| 326 | mr_asprintf(&tmp, "echo hi > %s 2> /dev/null", fname); |
324 | 327 | if (system(tmp)) { |
325 | 328 | fatal_error("Unable to write tarball to scratchdir"); |
326 | 329 | } |
327 | | paranoid_free(tmp) |
| 330 | mr_free(tmp); |
328 | 331 | |
329 | 332 | |
330 | 333 | if (bkpinfo->compression_level > 0) { |
331 | | asprintf(&tmp, "%s/do-not-compress-these", g_mondo_home); |
| 334 | mr_asprintf(&tmp, "%s/do-not-compress-these", g_mondo_home); |
332 | 335 | // -b %ld, TAPE_BLOCK_SIZE |
333 | | asprintf(&zipparams, "-Z -P %s -G %d -T 3k", bkpinfo->zip_exe, |
| 336 | mr_asprintf(&zipparams, "-Z -P %s -G %d -T 3k", bkpinfo->zip_exe, |
334 | 337 | bkpinfo->compression_level); |
335 | 338 | if (does_file_exist(tmp)) { |
336 | | asprintf(&tmp1, "%s -E %s", zipparams, tmp); |
337 | | paranoid_free(zipparams) |
| 339 | mr_asprintf(&tmp1, "%s -E %s", zipparams, tmp); |
| 340 | mr_free(zipparams); |
338 | 341 | zipparams = tmp1; |
339 | 342 | } else { |
340 | | asprintf(&zipparams, " "); |
| 343 | mr_asprintf(&zipparams, " "); |
341 | 344 | log_msg(3, "%s not found. Cannot exclude zipfiles, etc.", tmp); |
342 | 345 | } |
343 | | paranoid_free(tmp) |
| 346 | mr_free(tmp); |
344 | 347 | } else { |
345 | | asprintf(&zipparams, " "); |
| 348 | mr_asprintf(&zipparams, " "); |
346 | 349 | } |
347 | 350 | |
… |
… |
|
356 | 359 | fatal_error("scratchdir not found"); |
357 | 360 | } |
358 | | asprintf(&command, "rm -f %s %s. %s.gz %s.%s", fname, fname, fname, |
| 361 | mr_asprintf(&command, "rm -f %s %s. %s.gz %s.%s", fname, fname, fname, |
359 | 362 | fname, bkpinfo->zip_suffix); |
360 | 363 | paranoid_system(command); |
361 | | paranoid_free(command); |
362 | | |
363 | | asprintf(&command, "afio -o -b %ld -M 16m %s %s < %s 2>> %s", |
| 364 | mr_free(command); |
| 365 | |
| 366 | mr_asprintf(&command, "afio -o -b %ld -M 16m %s %s < %s 2>> %s", |
364 | 367 | TAPE_BLOCK_SIZE, zipparams, fname, filelist, MONDO_LOGFILE); |
365 | | paranoid_free(zipparams); |
366 | | |
367 | | asprintf(&tmp, "echo hi > %s 2> /dev/null", fname); |
| 368 | mr_free(zipparams); |
| 369 | |
| 370 | mr_asprintf(&tmp, "echo hi > %s 2> /dev/null", fname); |
368 | 371 | if (system(tmp)) { |
369 | 372 | fatal_error("Unable to write tarball to scratchdir"); |
370 | 373 | } |
371 | | paranoid_free(tmp); |
| 374 | mr_free(tmp); |
372 | 375 | |
373 | 376 | for (res = 99, tries = 0; tries < 3 && res != 0; tries++) { |
… |
… |
|
382 | 385 | } |
383 | 386 | } |
384 | | paranoid_free(command); |
| 387 | mr_free(command); |
385 | 388 | |
386 | 389 | retval += res; |
… |
… |
|
396 | 399 | ("df -m -P | grep dev/shm | grep -v none | tr -s ' ' '\t' | cut -f4"); |
397 | 400 | i = atoi(tmp); |
398 | | paranoid_free(tmp); |
| 401 | mr_free(tmp); |
399 | 402 | |
400 | 403 | if (i > 0) { |
… |
… |
|
440 | 443 | ("Cannot find dvd+rw-format. Please install it or fix your PATH."); |
441 | 444 | } |
442 | | paranoid_free(tmp); |
| 445 | mr_free(tmp); |
443 | 446 | #endif |
444 | 447 | tmp = find_home_of_exe("growisofs"); |
… |
… |
|
447 | 450 | ("Cannot find growisofs. Please install it or fix your PATH."); |
448 | 451 | } |
449 | | paranoid_free(tmp); |
| 452 | mr_free(tmp); |
450 | 453 | } |
451 | 454 | |
… |
… |
|
458 | 461 | |
459 | 462 | /* |
460 | | asprintf(&tmp, "wc -l %s/archives/filelist.full > %s/archives/filelist.count",bkpinfo->scratchdir, bkpinfo->scratchdir); |
| 463 | mr_asprintf(&tmp, "wc -l %s/archives/filelist.full > %s/archives/filelist.count",bkpinfo->scratchdir, bkpinfo->scratchdir); |
461 | 464 | if (run_program_and_log_output(tmp, 2)) |
462 | 465 | { fatal_error("Failed to count filelist.full"); } |
463 | 466 | */ |
464 | | asprintf(&tmp, "gzip -9 %s/archives/filelist.full", |
| 467 | mr_asprintf(&tmp, "gzip -9 %s/archives/filelist.full", |
465 | 468 | bkpinfo->scratchdir); |
466 | 469 | if (run_program_and_log_output(tmp, 2)) { |
467 | 470 | fatal_error("Failed to gzip filelist.full"); |
468 | 471 | } |
469 | | paranoid_free(tmp); |
470 | | asprintf(&tmp, "cp -f %s/archives/*list*.gz %s", bkpinfo->scratchdir, |
| 472 | mr_free(tmp); |
| 473 | mr_asprintf(&tmp, "cp -f %s/archives/*list*.gz %s", bkpinfo->scratchdir, |
471 | 474 | bkpinfo->tmpdir); |
472 | 475 | if (run_program_and_log_output(tmp, 2)) { |
473 | 476 | fatal_error("Failed to copy to tmpdir"); |
474 | 477 | } |
475 | | paranoid_free(tmp); |
| 478 | mr_free(tmp); |
476 | 479 | |
477 | 480 | copy_mondo_and_mindi_stuff_to_scratchdir(bkpinfo); // payload, too, if it exists |
478 | 481 | #if __FreeBSD__ == 5 |
479 | | paranoid_alloc(bkpinfo->kernel_path, "/boot/kernel/kernel"); |
| 482 | mr_allocstr(bkpinfo->kernel_path, "/boot/kernel/kernel"); |
480 | 483 | #elif __FreeBSD__ == 4 |
481 | | paranoid_alloc(bkpinfo->kernel_path, "/kernel"); |
| 484 | mr_allocstr(bkpinfo->kernel_path, "/kernel"); |
482 | 485 | #elif linux |
483 | 486 | if (figure_out_kernel_path_interactively_if_necessary |
… |
… |
|
493 | 496 | } |
494 | 497 | retval += do_that_initial_phase(bkpinfo); // prepare |
495 | | asprintf(&tmp, "rm -f %s/images/*.iso", bkpinfo->scratchdir); |
| 498 | mr_asprintf(&tmp, "rm -f %s/images/*.iso", bkpinfo->scratchdir); |
496 | 499 | run_program_and_log_output(tmp, 1); |
497 | | paranoid_free(tmp); |
| 500 | mr_free(tmp); |
498 | 501 | retval += make_those_slices_phase(bkpinfo); // backup BIG files |
499 | 502 | retval += do_that_final_phase(bkpinfo); // clean up |
… |
… |
|
564 | 567 | assert(bkpinfo != NULL); |
565 | 568 | |
566 | | asprintf(&tmp, |
| 569 | mr_asprintf(&tmp, |
567 | 570 | "echo '%s' | tr -s ' ' '\n' | grep -x '/dev/.*' | tr -s '\n' ' ' | awk '{print $0\"\\n\";}'", |
568 | 571 | bkpinfo->exclude_paths); |
569 | 572 | devs_to_exclude = call_program_and_get_last_line_of_output(tmp); |
570 | | paranoid_free(tmp); |
571 | | asprintf(&tmp, "devs_to_exclude = '%s'", devs_to_exclude); |
| 573 | mr_free(tmp); |
| 574 | mr_asprintf(&tmp, "devs_to_exclude = '%s'", devs_to_exclude); |
572 | 575 | log_msg(2, tmp); |
573 | | paranoid_free(tmp); |
| 576 | mr_free(tmp); |
574 | 577 | mvaddstr_and_log_it(g_currentY, 0, |
575 | 578 | "Calling MINDI to create boot+data disks"); |
576 | | asprintf(&tmp, "%s/filelist.full", bkpinfo->tmpdir); |
| 579 | mr_asprintf(&tmp, "%s/filelist.full", bkpinfo->tmpdir); |
577 | 580 | if (!does_file_exist(tmp)) { |
578 | | paranoid_free(tmp); |
579 | | asprintf(&tmp, "%s/tmpfs/filelist.full", bkpinfo->tmpdir); |
| 581 | mr_free(tmp); |
| 582 | mr_asprintf(&tmp, "%s/tmpfs/filelist.full", bkpinfo->tmpdir); |
580 | 583 | if (!does_file_exist(tmp)) { |
581 | 584 | fatal_error |
… |
… |
|
584 | 587 | } |
585 | 588 | lines_in_filelist = count_lines_in_file(tmp); |
586 | | paranoid_free(tmp); |
587 | | asprintf(&tmp, "%s/LAST-FILELIST-NUMBER", bkpinfo->tmpdir); |
| 589 | mr_free(tmp); |
| 590 | mr_asprintf(&tmp, "%s/LAST-FILELIST-NUMBER", bkpinfo->tmpdir); |
588 | 591 | last_filelist_number = last_line_of_file(tmp); |
589 | | paranoid_free(tmp); |
| 592 | mr_free(tmp); |
590 | 593 | if (IS_THIS_A_STREAMING_BACKUP(bkpinfo->backup_media_type)) { |
591 | | asprintf(&tape_size_sz, "%ld", bkpinfo->media_size[1]); |
592 | | asprintf(&tape_device, bkpinfo->media_device); |
| 594 | mr_asprintf(&tape_size_sz, "%ld", bkpinfo->media_size[1]); |
| 595 | mr_asprintf(&tape_device, bkpinfo->media_device); |
593 | 596 | } else { |
594 | | asprintf(&tape_size_sz, " "); |
595 | | asprintf(&tape_device, " "); |
| 597 | mr_asprintf(&tape_size_sz, " "); |
| 598 | mr_asprintf(&tape_device, " "); |
596 | 599 | } |
597 | 600 | if (bkpinfo->use_lzo) { |
598 | | asprintf(&use_lzo_sz, "yes"); |
| 601 | mr_asprintf(&use_lzo_sz, "yes"); |
599 | 602 | } else { |
600 | | asprintf(&use_lzo_sz, "no"); |
| 603 | mr_asprintf(&use_lzo_sz, "no"); |
601 | 604 | } |
602 | 605 | if (bkpinfo->use_star) { |
603 | | asprintf(&use_star_sz, "yes"); |
| 606 | mr_asprintf(&use_star_sz, "yes"); |
604 | 607 | } else { |
605 | | asprintf(&use_star_sz, "no"); |
| 608 | mr_asprintf(&use_star_sz, "no"); |
606 | 609 | } |
607 | 610 | |
608 | 611 | if (bkpinfo->compression_level > 0) { |
609 | | asprintf(&use_comp_sz, "yes"); |
| 612 | mr_asprintf(&use_comp_sz, "yes"); |
610 | 613 | } else { |
611 | | asprintf(&use_comp_sz, "no"); |
612 | | } |
613 | | |
614 | | asprintf(&broken_bios_sz, "yes"); /* assume so */ |
| 614 | mr_asprintf(&use_comp_sz, "no"); |
| 615 | } |
| 616 | |
| 617 | mr_asprintf(&broken_bios_sz, "yes"); /* assume so */ |
615 | 618 | if (g_cd_recovery) { |
616 | | asprintf(&cd_recovery_sz, "yes"); |
| 619 | mr_asprintf(&cd_recovery_sz, "yes"); |
617 | 620 | } else { |
618 | | asprintf(&cd_recovery_sz, "no"); |
| 621 | mr_asprintf(&cd_recovery_sz, "no"); |
619 | 622 | } |
620 | 623 | /* Field shared between LILO/ELILO */ |
621 | 624 | if (bkpinfo->make_cd_use_lilo) { |
622 | | asprintf(&use_lilo_sz, "yes"); |
| 625 | mr_asprintf(&use_lilo_sz, "yes"); |
623 | 626 | } else { |
624 | | asprintf(&use_lilo_sz, "no"); |
| 627 | mr_asprintf(&use_lilo_sz, "no"); |
625 | 628 | } |
626 | 629 | |
… |
… |
|
644 | 647 | } |
645 | 648 | if ((bootdev) && (strstr(bootdev, "/dev/cciss/"))) { |
646 | | paranoid_free(bootdev); |
| 649 | mr_free(bootdev); |
647 | 650 | bootdev = call_program_and_get_last_line_of_output |
648 | 651 | ("mount | grep ' /boot ' | head -1 | cut -d' ' -f1 | cut -dp -f1"); |
… |
… |
|
655 | 658 | |
656 | 659 | if (bkpinfo->boot_loader != '\0') { |
657 | | asprintf(&tmp, "User specified boot loader. It is '%c'.", |
| 660 | mr_asprintf(&tmp, "User specified boot loader. It is '%c'.", |
658 | 661 | bkpinfo->boot_loader); |
659 | 662 | log_msg(2, tmp); |
660 | | paranoid_free(tmp); |
| 663 | mr_free(tmp); |
661 | 664 | } else { |
662 | 665 | bkpinfo->boot_loader = ch; |
663 | 666 | } |
664 | 667 | if (bkpinfo->boot_device != NULL) { |
665 | | asprintf(&tmp, "User specified boot device. It is '%s'.", |
| 668 | mr_asprintf(&tmp, "User specified boot device. It is '%s'.", |
666 | 669 | bkpinfo->boot_device); |
667 | 670 | log_msg(2, tmp); |
668 | | paranoid_free(tmp); |
669 | | paranoid_free(bootdev); |
| 671 | mr_free(tmp); |
| 672 | mr_free(bootdev); |
670 | 673 | } else { |
671 | 674 | bkpinfo->boot_device = bootdev; |
… |
… |
|
687 | 690 | } |
688 | 691 | if (bkpinfo->boot_loader == 'L') { |
689 | | asprintf(&bootldr_str, "LILO"); |
| 692 | mr_asprintf(&bootldr_str, "LILO"); |
690 | 693 | if (!does_file_exist("/etc/lilo.conf")) { |
691 | 694 | fatal_error |
… |
… |
|
693 | 696 | } |
694 | 697 | } else if (bkpinfo->boot_loader == 'G') { |
695 | | asprintf(&bootldr_str, "GRUB"); |
| 698 | mr_asprintf(&bootldr_str, "GRUB"); |
696 | 699 | if (!does_file_exist("/etc/grub.conf") |
697 | 700 | && does_file_exist("/boot/grub/grub.conf")) { |
… |
… |
|
710 | 713 | } |
711 | 714 | } else if (bkpinfo->boot_loader == 'E') { |
712 | | asprintf(&bootldr_str, "ELILO"); |
| 715 | mr_asprintf(&bootldr_str, "ELILO"); |
713 | 716 | /* BERLIOS: fix it for SuSE, Debian, Mandrake, ... */ |
714 | 717 | if (!does_file_exist("/etc/elilo.conf") |
… |
… |
|
723 | 726 | } |
724 | 727 | } else if (bkpinfo->boot_loader == 'R') { |
725 | | asprintf(&bootldr_str, "RAW"); |
| 728 | mr_asprintf(&bootldr_str, "RAW"); |
726 | 729 | } |
727 | 730 | #ifdef __FreeBSD__ |
728 | 731 | else if (bkpinfo->boot_loader == 'D') { |
729 | | asprintf(&bootldr_str, "DD"); |
| 732 | mr_asprintf(&bootldr_str, "DD"); |
730 | 733 | } |
731 | 734 | |
732 | 735 | else if (bkpinfo->boot_loader == 'B') { |
733 | | asprintf(&bootldr_str, "BOOT0"); |
| 736 | mr_asprintf(&bootldr_str, "BOOT0"); |
734 | 737 | } |
735 | 738 | #endif |
736 | 739 | else { |
737 | | asprintf(&bootldr_str, "unknown"); |
738 | | } |
739 | | asprintf(&tmp, "Your boot loader is %s and it boots from %s", |
| 740 | mr_asprintf(&bootldr_str, "unknown"); |
| 741 | } |
| 742 | mr_asprintf(&tmp, "Your boot loader is %s and it boots from %s", |
740 | 743 | bootldr_str, bkpinfo->boot_device); |
741 | 744 | log_to_screen(tmp); |
742 | | paranoid_free(tmp); |
743 | | asprintf(&tmp, "%s/BOOTLOADER.DEVICE", bkpinfo->tmpdir); |
| 745 | mr_free(tmp); |
| 746 | mr_asprintf(&tmp, "%s/BOOTLOADER.DEVICE", bkpinfo->tmpdir); |
744 | 747 | if (write_one_liner_data_file(tmp, bkpinfo->boot_device)) { |
745 | 748 | log_msg(1, "%ld: Unable to write one-liner boot device", __LINE__); |
746 | 749 | } |
747 | | paranoid_free(tmp); |
| 750 | mr_free(tmp); |
748 | 751 | /* BERLIOS: Use bkptype_to_string without LANG */ |
749 | 752 | switch (bkpinfo->backup_media_type) { |
750 | 753 | case cdr: |
751 | | asprintf(&value, "cdr"); |
| 754 | mr_asprintf(&value, "cdr"); |
752 | 755 | break; |
753 | 756 | case cdrw: |
754 | | asprintf(&value, "cdrw"); |
| 757 | mr_asprintf(&value, "cdrw"); |
755 | 758 | break; |
756 | 759 | case cdstream: |
757 | | asprintf(&value, "cdstream"); |
| 760 | mr_asprintf(&value, "cdstream"); |
758 | 761 | break; |
759 | 762 | case tape: |
760 | | asprintf(&value, "tape"); |
| 763 | mr_asprintf(&value, "tape"); |
761 | 764 | break; |
762 | 765 | case udev: |
763 | | asprintf(&value, "udev"); |
| 766 | mr_asprintf(&value, "udev"); |
764 | 767 | break; |
765 | 768 | case iso: |
766 | | asprintf(&value, "iso"); |
| 769 | mr_asprintf(&value, "iso"); |
767 | 770 | break; |
768 | 771 | case nfs: |
769 | | asprintf(&value, "nfs"); |
| 772 | mr_asprintf(&value, "nfs"); |
770 | 773 | break; |
771 | 774 | case dvd: |
772 | | asprintf(&value, "dvd"); |
| 775 | mr_asprintf(&value, "dvd"); |
773 | 776 | break; |
774 | 777 | default: |
775 | 778 | fatal_error("Unknown backup_media_type"); |
776 | 779 | } |
777 | | asprintf(&tmp, "%s/BACKUP-MEDIA-TYPE", bkpinfo->tmpdir); |
| 780 | mr_asprintf(&tmp, "%s/BACKUP-MEDIA-TYPE", bkpinfo->tmpdir); |
778 | 781 | if (write_one_liner_data_file(tmp, value)) { |
779 | 782 | res++; |
… |
… |
|
781 | 784 | __LINE__); |
782 | 785 | } |
783 | | paranoid_free(value); |
784 | | paranoid_free(tmp); |
| 786 | mr_free(value); |
| 787 | mr_free(tmp); |
785 | 788 | log_to_screen(bkpinfo->tmpdir); |
786 | | asprintf(&tmp, "%s/BOOTLOADER.NAME", bkpinfo->tmpdir); |
| 789 | mr_asprintf(&tmp, "%s/BOOTLOADER.NAME", bkpinfo->tmpdir); |
787 | 790 | if (write_one_liner_data_file(tmp, bootldr_str)) { |
788 | 791 | res++; |
… |
… |
|
790 | 793 | __LINE__); |
791 | 794 | } |
792 | | paranoid_free(bootldr_str); |
793 | | paranoid_free(tmp); |
794 | | asprintf(&tmp, "%s/DIFFERENTIAL", bkpinfo->tmpdir); |
| 795 | mr_free(bootldr_str); |
| 796 | mr_free(tmp); |
| 797 | mr_asprintf(&tmp, "%s/DIFFERENTIAL", bkpinfo->tmpdir); |
795 | 798 | if (bkpinfo->differential) { |
796 | 799 | res += write_one_liner_data_file(tmp, "1"); |
… |
… |
|
798 | 801 | res += write_one_liner_data_file(tmp, "0"); |
799 | 802 | } |
800 | | paranoid_free(tmp); |
| 803 | mr_free(tmp); |
801 | 804 | |
802 | 805 | estimated_total_noof_slices = |
803 | 806 | size_of_all_biggiefiles_K(bkpinfo) / bkpinfo->optimal_set_size + 1; |
804 | | asprintf(&command, "mkdir -p %s/images", bkpinfo->scratchdir); |
| 807 | mr_asprintf(&command, "mkdir -p %s/images", bkpinfo->scratchdir); |
805 | 808 | if (system(command)) { |
806 | 809 | res++; |
807 | 810 | log_OS_error("Unable to make images directory"); |
808 | 811 | } |
809 | | paranoid_free(command); |
810 | | |
811 | | asprintf(&command, "mkdir -p %s%s", bkpinfo->scratchdir, MNT_FLOPPY); |
| 812 | mr_free(command); |
| 813 | |
| 814 | mr_asprintf(&command, "mkdir -p %s%s", bkpinfo->scratchdir, MNT_FLOPPY); |
812 | 815 | if (system(command)) { |
813 | 816 | res++; |
814 | 817 | log_OS_error("Unable to make mnt floppy directory"); |
815 | 818 | } |
816 | | paranoid_free(command); |
817 | | |
818 | | asprintf(&tmp, "BTW, I'm telling Mindi your kernel is '%s'", |
| 819 | mr_free(command); |
| 820 | |
| 821 | mr_asprintf(&tmp, "BTW, I'm telling Mindi your kernel is '%s'", |
819 | 822 | bkpinfo->kernel_path); |
820 | 823 | log_to_screen(tmp); |
821 | | paranoid_free(tmp); |
| 824 | mr_free(tmp); |
822 | 825 | |
823 | 826 | log_msg(1, "lines_in_filelist = %ld", lines_in_filelist); |
… |
… |
|
825 | 828 | // Watch it! This next line adds a parameter... |
826 | 829 | if (bkpinfo->nonbootable_backup) { |
827 | | asprintf(&tmp, " NONBOOTABLE"); |
| 830 | mr_asprintf(&tmp, " NONBOOTABLE"); |
828 | 831 | } else { |
829 | | asprintf(&tmp, " "); |
830 | | } |
831 | | |
832 | | asprintf(&command, |
| 832 | mr_asprintf(&tmp, " "); |
| 833 | } |
| 834 | |
| 835 | mr_asprintf(&command, |
833 | 836 | /* "mindi --custom 2=%s 3=%s/images 4=\"%s\" 5=\"%s\" \ |
834 | 837 | 6=\"%s\" 7=%ld 8=\"%s\" 9=\"%s\" 10=\"%s\" \ |
… |
… |
|
855 | 858 | bkpinfo->differential, // parameter #19 (INT) |
856 | 859 | tmp); |
857 | | paranoid_free(tmp); |
858 | | paranoid_free(tape_size_sz); |
859 | | paranoid_free(use_lzo_sz); |
860 | | paranoid_free(tape_device); |
861 | | paranoid_free(use_star_sz); |
862 | | paranoid_free(use_comp_sz); |
863 | | paranoid_free(broken_bios_sz); |
864 | | paranoid_free(cd_recovery_sz); |
865 | | paranoid_free(last_filelist_number); |
866 | | paranoid_free(devs_to_exclude); |
867 | | paranoid_free(use_lilo_sz); |
| 860 | mr_free(tmp); |
| 861 | mr_free(tape_size_sz); |
| 862 | mr_free(use_lzo_sz); |
| 863 | mr_free(tape_device); |
| 864 | mr_free(use_star_sz); |
| 865 | mr_free(use_comp_sz); |
| 866 | mr_free(broken_bios_sz); |
| 867 | mr_free(cd_recovery_sz); |
| 868 | mr_free(last_filelist_number); |
| 869 | mr_free(devs_to_exclude); |
| 870 | mr_free(use_lilo_sz); |
868 | 871 | |
869 | 872 | log_msg(2, command); |
… |
… |
|
872 | 875 | res = run_program_and_log_to_screen(command, |
873 | 876 | "Generating boot+data disks"); |
874 | | paranoid_free(command); |
| 877 | mr_free(command); |
875 | 878 | |
876 | 879 | if (bkpinfo->nonbootable_backup) { |
… |
… |
|
879 | 882 | if (!res) { |
880 | 883 | log_to_screen("Boot+data disks were created OK"); |
881 | | asprintf(&command, "mkdir -p /var/cache/mindi/"); |
| 884 | mr_asprintf(&command, "mkdir -p /var/cache/mindi/"); |
882 | 885 | log_msg(2, command); |
883 | 886 | run_program_and_log_output(command, FALSE); |
884 | | paranoid_free(command); |
885 | | |
886 | | asprintf(&command, |
| 887 | mr_free(command); |
| 888 | |
| 889 | mr_asprintf(&command, |
887 | 890 | "cp -f %s/images/mindi.iso /var/cache/mindi/mondorescue.iso", |
888 | 891 | bkpinfo->scratchdir); |
889 | 892 | log_msg(2, command); |
890 | 893 | run_program_and_log_output(command, FALSE); |
891 | | paranoid_free(command); |
| 894 | mr_free(command); |
892 | 895 | |
893 | 896 | if (bkpinfo->nonbootable_backup) { |
894 | | asprintf(&command, "cp -f %s/all.tar.gz %s/images", |
| 897 | mr_asprintf(&command, "cp -f %s/all.tar.gz %s/images", |
895 | 898 | bkpinfo->tmpdir, bkpinfo->scratchdir); |
896 | 899 | if (system(command)) { |
897 | 900 | fatal_error("Unable to create temporary duff tarball"); |
898 | | paranoid_free(command); |
899 | | } |
900 | | } |
901 | | asprintf(&command, "cp -f %s/mindi-*oot*.img %s/images", |
| 901 | mr_free(command); |
| 902 | } |
| 903 | } |
| 904 | mr_asprintf(&command, "cp -f %s/mindi-*oot*.img %s/images", |
902 | 905 | bkpinfo->tmpdir, bkpinfo->scratchdir); |
903 | 906 | log_msg(2, command); |
904 | 907 | run_program_and_log_output(command, FALSE); |
905 | | paranoid_free(command); |
906 | | |
907 | | asprintf(&tmp, "cp -f %s/images/all.tar.gz %s", |
| 908 | mr_free(command); |
| 909 | |
| 910 | mr_asprintf(&tmp, "cp -f %s/images/all.tar.gz %s", |
908 | 911 | bkpinfo->scratchdir, bkpinfo->tmpdir); |
909 | 912 | if (system(tmp)) { |
910 | 913 | fatal_error("Cannot find all.tar.gz in tmpdir"); |
911 | 914 | } |
912 | | paranoid_free(tmp); |
| 915 | mr_free(tmp); |
913 | 916 | |
914 | 917 | if (res) { |
… |
… |
|
919 | 922 | } else { |
920 | 923 | log_to_screen("Mindi failed to create your boot+data disks."); |
921 | | asprintf(&command, "grep 'Fatal error' /var/log/mindi.log"); |
| 924 | mr_asprintf(&command, "grep 'Fatal error' /var/log/mindi.log"); |
922 | 925 | tmp = call_program_and_get_last_line_of_output(command); |
923 | | paranoid_free(command); |
| 926 | mr_free(command); |
924 | 927 | if (strlen(tmp) > 1) { |
925 | 928 | popup_and_OK(tmp); |
926 | 929 | } |
927 | | paranoid_free(tmp); |
| 930 | mr_free(tmp); |
928 | 931 | } |
929 | 932 | return (res); |
… |
… |
|
990 | 993 | bkpinfo = (struct s_bkpinfo *) (inbuf + BKPINFO_LOC_OFFSET); |
991 | 994 | |
992 | | asprintf(&archiving_filelist_fname, FILELIST_FNAME_RAW_SZ, |
| 995 | mr_asprintf(&archiving_filelist_fname, FILELIST_FNAME_RAW_SZ, |
993 | 996 | bkpinfo->tmpdir, 0L); |
994 | 997 | archiving_set_no = 0; |
995 | 998 | while (does_file_exist(archiving_filelist_fname)) { |
996 | | paranoid_free(archiving_filelist_fname); |
| 999 | mr_free(archiving_filelist_fname); |
997 | 1000 | if (g_exiting) { |
998 | 1001 | fatal_error("Execution run aborted (pthread)"); |
… |
… |
|
1015 | 1018 | |
1016 | 1019 | /* backup this set of files */ |
1017 | | asprintf(&archiving_afioball_fname, AFIOBALL_FNAME_RAW_SZ, |
| 1020 | mr_asprintf(&archiving_afioball_fname, AFIOBALL_FNAME_RAW_SZ, |
1018 | 1021 | bkpinfo->tmpdir, archiving_set_no, bkpinfo->zip_suffix); |
1019 | | asprintf(&archiving_filelist_fname, FILELIST_FNAME_RAW_SZ, |
| 1022 | mr_asprintf(&archiving_filelist_fname, FILELIST_FNAME_RAW_SZ, |
1020 | 1023 | bkpinfo->tmpdir, archiving_set_no); |
1021 | 1024 | if (!does_file_exist(archiving_filelist_fname)) { |
… |
… |
|
1024 | 1027 | FORTY_SPACES, getpid(), this_thread_no, |
1025 | 1028 | archiving_set_no); |
1026 | | paranoid_free(archiving_filelist_fname); |
1027 | | paranoid_free(archiving_afioball_fname); |
| 1029 | mr_free(archiving_filelist_fname); |
| 1030 | mr_free(archiving_afioball_fname); |
1028 | 1031 | break; |
1029 | 1032 | } |
1030 | 1033 | |
1031 | | asprintf(&tmp, AFIOBALL_FNAME_RAW_SZ, bkpinfo->tmpdir, |
| 1034 | mr_asprintf(&tmp, AFIOBALL_FNAME_RAW_SZ, bkpinfo->tmpdir, |
1032 | 1035 | archiving_set_no - ARCH_BUFFER_NUM, bkpinfo->zip_suffix); |
1033 | 1036 | if (does_file_exist(tmp)) { |
… |
… |
|
1039 | 1042 | log_msg(4, "[%d] - continuing", getpid()); |
1040 | 1043 | } |
1041 | | paranoid_free(tmp); |
| 1044 | mr_free(tmp); |
1042 | 1045 | |
1043 | 1046 | log_msg(4, "%s[%d:%d] - EXATing %d...", FORTY_SPACES, getpid(), |
1044 | 1047 | this_thread_no, archiving_set_no); |
1045 | | asprintf(&curr_xattr_list_fname, XATTR_LIST_FNAME_RAW_SZ, |
| 1048 | mr_asprintf(&curr_xattr_list_fname, XATTR_LIST_FNAME_RAW_SZ, |
1046 | 1049 | bkpinfo->tmpdir, archiving_set_no); |
1047 | | asprintf(&curr_acl_list_fname, ACL_LIST_FNAME_RAW_SZ, |
| 1050 | mr_asprintf(&curr_acl_list_fname, ACL_LIST_FNAME_RAW_SZ, |
1048 | 1051 | bkpinfo->tmpdir, archiving_set_no); |
1049 | 1052 | get_fattr_list(archiving_filelist_fname, curr_xattr_list_fname); |
1050 | | paranoid_free(curr_xattr_list_fname); |
| 1053 | mr_free(curr_xattr_list_fname); |
1051 | 1054 | get_acl_list(archiving_filelist_fname, curr_acl_list_fname); |
1052 | | paranoid_free(curr_acl_list_fname); |
| 1055 | mr_free(curr_acl_list_fname); |
1053 | 1056 | |
1054 | 1057 | log_msg(4, "%s[%d:%d] - archiving %d...", FORTY_SPACES, getpid(), |
… |
… |
|
1057 | 1060 | archiving_afioball_fname, |
1058 | 1061 | archiving_set_no); |
1059 | | paranoid_free(archiving_afioball_fname); |
1060 | | paranoid_free(archiving_filelist_fname); |
| 1062 | mr_free(archiving_afioball_fname); |
| 1063 | mr_free(archiving_filelist_fname); |
1061 | 1064 | retval += res; |
1062 | 1065 | |
1063 | 1066 | if (res) { |
1064 | | asprintf(&tmp, |
| 1067 | mr_asprintf(&tmp, |
1065 | 1068 | "Errors occurred while archiving set %ld. Please review logs.", |
1066 | 1069 | archiving_set_no); |
1067 | 1070 | log_to_screen(tmp); |
1068 | | paranoid_free(tmp); |
| 1071 | mr_free(tmp); |
1069 | 1072 | } |
1070 | 1073 | if (!semaphore_p()) { |
… |
… |
|
1084 | 1087 | this_thread_no, archiving_set_no); |
1085 | 1088 | archiving_set_no++; |
1086 | | asprintf(&archiving_filelist_fname, FILELIST_FNAME_RAW_SZ, |
| 1089 | mr_asprintf(&archiving_filelist_fname, FILELIST_FNAME_RAW_SZ, |
1087 | 1090 | bkpinfo->tmpdir, archiving_set_no); |
1088 | 1091 | } |
… |
… |
|
1096 | 1099 | log_msg(3, "%s[%d:%d] - exiting", FORTY_SPACES, getpid(), |
1097 | 1100 | this_thread_no); |
1098 | | paranoid_free(archiving_filelist_fname); |
| 1101 | mr_free(archiving_filelist_fname); |
1099 | 1102 | pthread_exit(NULL); |
1100 | 1103 | } |
… |
… |
|
1178 | 1181 | |
1179 | 1182 | assert(bkpinfo != NULL); |
1180 | | asprintf(&data_disks_file, "%s/all.tar.gz", bkpinfo->tmpdir); |
| 1183 | mr_asprintf(&data_disks_file, "%s/all.tar.gz", bkpinfo->tmpdir); |
1181 | 1184 | |
1182 | 1185 | g_serial_string = call_program_and_get_last_line_of_output("dd \ |
1183 | 1186 | if=/dev/urandom bs=16 count=1 2> /dev/null | \ |
1184 | 1187 | hexdump | tr -s ' ' '0' | head -n1"); |
1185 | | asprintf(&tmp, "%s...word.", g_serial_string); |
1186 | | paranoid_free(g_serial_string); |
| 1188 | mr_asprintf(&tmp, "%s...word.", g_serial_string); |
| 1189 | mr_free(g_serial_string); |
1187 | 1190 | g_serial_string = tmp; |
1188 | 1191 | log_msg(2, "g_serial_string = '%s'", g_serial_string); |
1189 | 1192 | |
1190 | | asprintf(&tmpfile, "%s/archives/SERIAL-STRING", bkpinfo->scratchdir); |
| 1193 | mr_asprintf(&tmpfile, "%s/archives/SERIAL-STRING", bkpinfo->scratchdir); |
1191 | 1194 | if (write_one_liner_data_file(tmpfile, g_serial_string)) { |
1192 | 1195 | log_msg(1, "%ld: Failed to write serial string", __LINE__); |
1193 | 1196 | } |
1194 | | paranoid_free(g_serial_string); |
1195 | | paranoid_free(tmpfile); |
| 1197 | mr_free(g_serial_string); |
| 1198 | mr_free(tmpfile); |
1196 | 1199 | |
1197 | 1200 | mvaddstr_and_log_it(g_currentY, 0, "Preparing to archive your data"); |
… |
… |
|
1210 | 1213 | log_msg(1, "Backing up to CD's"); |
1211 | 1214 | } |
1212 | | paranoid_free(data_disks_file); |
1213 | | |
1214 | | asprintf(&command, "rm -f %s/%s/%s-[1-9]*.iso", bkpinfo->isodir, |
| 1215 | mr_free(data_disks_file); |
| 1216 | |
| 1217 | mr_asprintf(&command, "rm -f %s/%s/%s-[1-9]*.iso", bkpinfo->isodir, |
1215 | 1218 | bkpinfo->nfs_remote_dir, bkpinfo->prefix); |
1216 | 1219 | paranoid_system(command); |
1217 | | paranoid_free(command); |
| 1220 | mr_free(command); |
1218 | 1221 | wipe_archives(bkpinfo->scratchdir); |
1219 | 1222 | mvaddstr_and_log_it(g_currentY++, 74, "Done."); |
… |
… |
|
1274 | 1277 | /* if not Debian then go ahead & use fdformat */ |
1275 | 1278 | tempfile = call_program_and_get_last_line_of_output("mktemp -q /tmp/mondo.XXXXXXXX"); |
1276 | | asprintf(&command, "%s >> %s 2>> %s; rm -f %s", cmd, tempfile, |
| 1279 | mr_asprintf(&command, "%s >> %s 2>> %s; rm -f %s", cmd, tempfile, |
1277 | 1280 | tempfile, tempfile); |
1278 | 1281 | log_msg(3, command); |
… |
… |
|
1287 | 1290 | maxtracks = 80; |
1288 | 1291 | } |
1289 | | paranoid_free(command); |
| 1292 | mr_free(command); |
1290 | 1293 | |
1291 | 1294 | for (sleep(1); does_file_exist(tempfile); sleep(1)) { |
… |
… |
|
1309 | 1312 | } |
1310 | 1313 | unlink(tempfile); |
1311 | | paranoid_free(tempfile); |
| 1314 | mr_free(tempfile); |
1312 | 1315 | return (res); |
1313 | 1316 | } |
… |
… |
|
1338 | 1341 | assert_string_is_neither_NULL_nor_zerolength(device); |
1339 | 1342 | if (!system("which superformat > /dev/null 2> /dev/null")) { |
1340 | | asprintf(&command, "superformat %s", device); |
| 1343 | mr_asprintf(&command, "superformat %s", device); |
1341 | 1344 | } else { |
1342 | 1345 | #ifdef __FreeBSD__ |
1343 | | asprintf(&command, "fdformat -y %s", device); |
| 1346 | mr_asprintf(&command, "fdformat -y %s", device); |
1344 | 1347 | #else |
1345 | | asprintf(&command, "fdformat %s", device); |
| 1348 | mr_asprintf(&command, "fdformat %s", device); |
1346 | 1349 | #endif |
1347 | 1350 | } |
1348 | | asprintf(&title, "Formatting disk %s", device); |
| 1351 | mr_asprintf(&title, "Formatting disk %s", device); |
1349 | 1352 | while ((res = format_disk_SUB(command, title))) { |
1350 | 1353 | if (!ask_me_yes_or_no("Failed to format disk. Retry?")) { |
… |
… |
|
1352 | 1355 | } |
1353 | 1356 | } |
1354 | | paranoid_free(title); |
1355 | | paranoid_free(command); |
| 1357 | mr_free(title); |
| 1358 | mr_free(command); |
1356 | 1359 | return (res); |
1357 | 1360 | } |
… |
… |
|
1502 | 1505 | /* maybe */ |
1503 | 1506 | tmp = percent_media_full_comment(bkpinfo); |
1504 | | asprintf(&media_usage_comment, "%s", tmp); |
1505 | | paranoid_free(tmp); |
| 1507 | mr_asprintf(&media_usage_comment, "%s", tmp); |
| 1508 | mr_free(tmp); |
1506 | 1509 | if (!misc_counter_that_is_not_important) { |
1507 | 1510 | update_progress_form(media_usage_comment); |
1508 | 1511 | } |
1509 | | paranoid_free(media_usage_comment); |
| 1512 | mr_free(media_usage_comment); |
1510 | 1513 | sleep(1); |
1511 | 1514 | } else { |
1512 | 1515 | // store set N |
1513 | | asprintf(&storing_filelist_fname, FILELIST_FNAME_RAW_SZ, |
| 1516 | mr_asprintf(&storing_filelist_fname, FILELIST_FNAME_RAW_SZ, |
1514 | 1517 | bkpinfo->tmpdir, storing_set_no); |
1515 | | asprintf(&storing_afioball_fname, AFIOBALL_FNAME_RAW_SZ, |
| 1518 | mr_asprintf(&storing_afioball_fname, AFIOBALL_FNAME_RAW_SZ, |
1516 | 1519 | bkpinfo->tmpdir, storing_set_no, bkpinfo->zip_suffix); |
1517 | | asprintf(&curr_xattr_list_fname, XATTR_LIST_FNAME_RAW_SZ, |
| 1520 | mr_asprintf(&curr_xattr_list_fname, XATTR_LIST_FNAME_RAW_SZ, |
1518 | 1521 | bkpinfo->tmpdir, storing_set_no); |
1519 | | asprintf(&curr_acl_list_fname, ACL_LIST_FNAME_RAW_SZ, |
| 1522 | mr_asprintf(&curr_acl_list_fname, ACL_LIST_FNAME_RAW_SZ, |
1520 | 1523 | bkpinfo->tmpdir, storing_set_no); |
1521 | 1524 | |
… |
… |
|
1529 | 1532 | } |
1530 | 1533 | tmp = percent_media_full_comment(bkpinfo); |
1531 | | asprintf(&media_usage_comment, "%s", tmp); |
1532 | | paranoid_free(tmp); |
| 1534 | mr_asprintf(&media_usage_comment, "%s", tmp); |
| 1535 | mr_free(tmp); |
1533 | 1536 | /* copy to CD (scratchdir) ... and an actual CD-R if necessary */ |
1534 | 1537 | if (IS_THIS_A_STREAMING_BACKUP(bkpinfo->backup_media_type)) { |
… |
… |
|
1552 | 1555 | storing_afioball_fname, NULL); |
1553 | 1556 | } |
1554 | | paranoid_free(storing_filelist_fname); |
1555 | | paranoid_free(storing_afioball_fname); |
1556 | | paranoid_free(curr_xattr_list_fname); |
1557 | | paranoid_free(curr_acl_list_fname); |
| 1557 | mr_free(storing_filelist_fname); |
| 1558 | mr_free(storing_afioball_fname); |
| 1559 | mr_free(curr_xattr_list_fname); |
| 1560 | mr_free(curr_acl_list_fname); |
1558 | 1561 | retval += res; |
1559 | 1562 | g_current_progress++; |
1560 | 1563 | update_progress_form(media_usage_comment); |
1561 | | paranoid_free(media_usage_comment); |
| 1564 | mr_free(media_usage_comment); |
1562 | 1565 | |
1563 | 1566 | if (res) { |
1564 | | asprintf(&tmp, |
| 1567 | mr_asprintf(&tmp, |
1565 | 1568 | "Failed to add archive %ld's files to CD dir\n", |
1566 | 1569 | storing_set_no); |
1567 | 1570 | log_to_screen(tmp); |
1568 | | paranoid_free(tmp); |
| 1571 | mr_free(tmp); |
1569 | 1572 | fatal_error |
1570 | 1573 | ("Is your hard disk full? If not, please send the author the logfile."); |
… |
… |
|
1584 | 1587 | log_msg(2, "Done."); |
1585 | 1588 | if (retval) { |
1586 | | asprintf(&tmp, |
| 1589 | mr_asprintf(&tmp, |
1587 | 1590 | "Your regular files have been archived (with errors)."); |
1588 | 1591 | } else { |
1589 | | asprintf(&tmp, |
| 1592 | mr_asprintf(&tmp, |
1590 | 1593 | "Your regular files have been archived successfully"); |
1591 | 1594 | } |
1592 | 1595 | log_to_screen(tmp); |
1593 | | paranoid_free(tmp); |
1594 | | paranoid_free(transfer_block); |
1595 | | paranoid_free(result_str); |
| 1596 | mr_free(tmp); |
| 1597 | mr_free(transfer_block); |
| 1598 | mr_free(result_str); |
1596 | 1599 | return (retval); |
1597 | 1600 | } |
… |
… |
|
1647 | 1650 | assert_string_is_neither_NULL_nor_zerolength(destfile); |
1648 | 1651 | |
1649 | | asprintf(&tmp, "%s/isolinux.bin", bkpinfo->scratchdir); |
1650 | | asprintf(&tmp2, "%s/isolinux.bin", bkpinfo->tmpdir); |
| 1652 | mr_asprintf(&tmp, "%s/isolinux.bin", bkpinfo->scratchdir); |
| 1653 | mr_asprintf(&tmp2, "%s/isolinux.bin", bkpinfo->tmpdir); |
1651 | 1654 | if (does_file_exist(tmp)) { |
1652 | | asprintf(&tmp3, "cp -f %s %s", tmp, tmp2); |
| 1655 | mr_asprintf(&tmp3, "cp -f %s %s", tmp, tmp2); |
1653 | 1656 | paranoid_system(tmp3); |
1654 | | paranoid_free(tmp3); |
| 1657 | mr_free(tmp3); |
1655 | 1658 | } |
1656 | 1659 | if (!does_file_exist(tmp) && does_file_exist(tmp2)) { |
1657 | | asprintf(&tmp3, "cp -f %s %s", tmp2, tmp); |
| 1660 | mr_asprintf(&tmp3, "cp -f %s %s", tmp2, tmp); |
1658 | 1661 | paranoid_system(tmp3); |
1659 | | paranoid_free(tmp3); |
1660 | | } |
1661 | | paranoid_free(tmp2); |
1662 | | paranoid_free(tmp); |
| 1662 | mr_free(tmp3); |
| 1663 | } |
| 1664 | mr_free(tmp2); |
| 1665 | mr_free(tmp); |
1663 | 1666 | |
1664 | 1667 | if (bkpinfo->backup_media_type == iso && bkpinfo->manual_cd_tray) { |
… |
… |
|
1670 | 1673 | /* BERLIOS: Do not ignore getcwd result */ |
1671 | 1674 | (void) getcwd(old_pwd, MAX_STR_LEN - 1); |
1672 | | asprintf(&tmp, "chmod 755 %s", bkpinfo->scratchdir); |
| 1675 | mr_asprintf(&tmp, "chmod 755 %s", bkpinfo->scratchdir); |
1673 | 1676 | run_program_and_log_output(tmp, FALSE); |
1674 | | paranoid_free(tmp); |
| 1677 | mr_free(tmp); |
1675 | 1678 | chdir(bkpinfo->scratchdir); |
1676 | 1679 | |
1677 | 1680 | if (bkpinfo->call_before_iso != NULL) { |
1678 | | asprintf(&message_to_screen, "Running pre-ISO call for CD#%d", |
| 1681 | mr_asprintf(&message_to_screen, "Running pre-ISO call for CD#%d", |
1679 | 1682 | g_current_media_number); |
1680 | 1683 | res = eval_call_to_make_ISO(bkpinfo, bkpinfo->call_before_iso, |
… |
… |
|
1686 | 1689 | log_to_screen("%s...OK", message_to_screen); |
1687 | 1690 | } |
1688 | | paranoid_free(message_to_screen); |
| 1691 | mr_free(message_to_screen); |
1689 | 1692 | retval += res; |
1690 | 1693 | } |
… |
… |
|
1692 | 1695 | if (bkpinfo->call_make_iso != NULL) { |
1693 | 1696 | log_msg(2, "bkpinfo->call_make_iso = %s", bkpinfo->call_make_iso); |
1694 | | asprintf(&tmp, "%s/archives/NOT-THE-LAST", bkpinfo->scratchdir); |
1695 | | asprintf(&message_to_screen, "Making an ISO (%s #%d)", |
| 1697 | mr_asprintf(&tmp, "%s/archives/NOT-THE-LAST", bkpinfo->scratchdir); |
| 1698 | mr_asprintf(&message_to_screen, "Making an ISO (%s #%d)", |
1696 | 1699 | bkpinfo->backup_media_string, |
1697 | 1700 | g_current_media_number); |
… |
… |
|
1720 | 1723 | retval += res; |
1721 | 1724 | #ifdef DVDRWFORMAT |
1722 | | asprintf(&tmp, |
| 1725 | mr_asprintf(&tmp, |
1723 | 1726 | "tail -n8 %s | grep 'blank=full.*dvd-compat.*DAO'", |
1724 | 1727 | MONDO_LOGFILE); |
… |
… |
|
1738 | 1741 | } |
1739 | 1742 | pause_for_N_seconds(5, "Letting DVD drive settle"); |
1740 | | asprintf(&sz_blank_disk, "dvd+rw-format %s", |
| 1743 | mr_asprintf(&sz_blank_disk, "dvd+rw-format %s", |
1741 | 1744 | bkpinfo->media_device); |
1742 | 1745 | log_msg(3, "sz_blank_disk = '%s'", sz_blank_disk); |
… |
… |
|
1757 | 1760 | ("Format succeeded. Sleeping for 5 seconds to take a breath..."); |
1758 | 1761 | } |
1759 | | paranoid_free(sz_blank_disk); |
| 1762 | mr_free(sz_blank_disk); |
1760 | 1763 | pause_for_N_seconds(5, "Letting DVD drive settle"); |
1761 | 1764 | if (!bkpinfo->please_dont_eject) { |
… |
… |
|
1783 | 1786 | } |
1784 | 1787 | } |
1785 | | paranoid_free(tmp); |
| 1788 | mr_free(tmp); |
1786 | 1789 | #endif |
1787 | 1790 | if (g_backup_media_type == dvd && !bkpinfo->please_dont_eject) { |
… |
… |
|
1789 | 1792 | } |
1790 | 1793 | } |
1791 | | paranoid_free(message_to_screen); |
| 1794 | mr_free(message_to_screen); |
1792 | 1795 | } else { |
1793 | | asprintf(&message_to_screen, "Running mkisofs to make %s #%d", |
| 1796 | mr_asprintf(&message_to_screen, "Running mkisofs to make %s #%d", |
1794 | 1797 | bkpinfo->backup_media_string, |
1795 | 1798 | g_current_media_number); |
1796 | 1799 | log_msg(1, message_to_screen); |
1797 | | asprintf(&result_sz, "Call to mkisofs to make ISO (%s #%d) ", |
| 1800 | mr_asprintf(&result_sz, "Call to mkisofs to make ISO (%s #%d) ", |
1798 | 1801 | bkpinfo->backup_media_string, |
1799 | 1802 | g_current_media_number); |
… |
… |
|
1821 | 1824 | #ifdef __IA64__ |
1822 | 1825 | log_msg(1, "IA64 --> elilo"); |
1823 | | asprintf(&tmp2,"mkisofs -no-emul-boot -b images/mindi-bootroot.%s.img -c boot.cat -o _ISO_ -J -r -p MondoRescue -publisher www.mondorescue.org -A Mondo_Rescue_GPL -V _CD#_ .", bkpinfo->mrconf->mindi_ia64_boot_size); |
| 1826 | mr_asprintf(&tmp2,"mkisofs -no-emul-boot -b images/mindi-bootroot.%s.img -c boot.cat -o _ISO_ -J -r -p MondoRescue -publisher www.mondorescue.org -A Mondo_Rescue_GPL -V _CD#_ .", bkpinfo->mrconf->mindi_ia64_boot_size); |
1824 | 1827 | res = eval_call_to_make_ISO(bkpinfo, |
1825 | 1828 | tmp2, |
… |
… |
|
1831 | 1834 | // FIXME --- change mkisofs string to MONDO_MKISOFS_REGULAR_SYSLINUX/LILO depending on bkpinfo->make_cd_usE_lilo |
1832 | 1835 | // and add ' .' at end |
1833 | | paranoid_free(tmp2); |
| 1836 | mr_free(tmp2); |
1834 | 1837 | log_msg(1, "Non-ia64 --> lilo"); |
1835 | 1838 | res = eval_call_to_make_ISO(bkpinfo, |
… |
… |
|
1857 | 1860 | } |
1858 | 1861 | retval += res; |
1859 | | paranoid_free(message_to_screen); |
1860 | | paranoid_free(result_sz); |
| 1862 | mr_free(message_to_screen); |
| 1863 | mr_free(result_sz); |
1861 | 1864 | } |
1862 | 1865 | |
… |
… |
|
1867 | 1870 | "Warning - %s mounted. I'm unmounting it before I burn to it.", |
1868 | 1871 | bkpinfo->media_device); |
1869 | | asprintf(&tmp, "umount %s", bkpinfo->media_device); |
| 1872 | mr_asprintf(&tmp, "umount %s", bkpinfo->media_device); |
1870 | 1873 | run_program_and_log_output(tmp, FALSE); |
1871 | | paranoid_free(tmp); |
| 1874 | mr_free(tmp); |
1872 | 1875 | } |
1873 | 1876 | } |
… |
… |
|
1875 | 1878 | if (bkpinfo->call_burn_iso != NULL) { |
1876 | 1879 | log_msg(2, "bkpinfo->call_burn_iso = %s", bkpinfo->call_burn_iso); |
1877 | | asprintf(&message_to_screen, "Burning %s #%d", |
| 1880 | mr_asprintf(&message_to_screen, "Burning %s #%d", |
1878 | 1881 | bkpinfo->backup_media_string, |
1879 | 1882 | g_current_media_number); |
… |
… |
|
1887 | 1890 | log_to_screen("%s...OK", message_to_screen); |
1888 | 1891 | } |
1889 | | paranoid_free(message_to_screen); |
| 1892 | mr_free(message_to_screen); |
1890 | 1893 | retval += res; |
1891 | 1894 | } |
1892 | 1895 | |
1893 | 1896 | if (bkpinfo->call_after_iso != NULL) { |
1894 | | asprintf(&message_to_screen, "Running post-ISO call (%s #%d)", |
| 1897 | mr_asprintf(&message_to_screen, "Running post-ISO call (%s #%d)", |
1895 | 1898 | bkpinfo->backup_media_string, |
1896 | 1899 | g_current_media_number); |
… |
… |
|
1903 | 1906 | log_to_screen("%s...OK", message_to_screen); |
1904 | 1907 | } |
1905 | | paranoid_free(message_to_screen); |
| 1908 | mr_free(message_to_screen); |
1906 | 1909 | retval += res; |
1907 | 1910 | } |
… |
… |
|
1911 | 1914 | log_msg(1, "WARNING - make_iso_fs returned an error"); |
1912 | 1915 | } |
1913 | | paranoid_free(old_pwd); |
| 1916 | mr_free(old_pwd); |
1914 | 1917 | return (retval); |
1915 | 1918 | } |
… |
… |
|
1921 | 1924 | char *command; |
1922 | 1925 | bool ret = TRUE; |
1923 | | asprintf(&command, |
| 1926 | mr_asprintf(&command, |
1924 | 1927 | "dd if=%s bs=512 count=1 2> /dev/null | strings | head -n1", |
1925 | 1928 | bigfile_fname); |
… |
… |
|
1927 | 1930 | tmp = call_program_and_get_last_line_of_output(command); |
1928 | 1931 | log_msg(1, "--> tmp = '%s'", tmp); |
1929 | | paranoid_free(command); |
| 1932 | mr_free(command); |
1930 | 1933 | if (strstr(tmp, "NTFS")) { |
1931 | 1934 | iamhere("TRUE"); |
… |
… |
|
1934 | 1937 | ret = FALSE; |
1935 | 1938 | } |
1936 | | paranoid_free(tmp); |
| 1939 | mr_free(tmp); |
1937 | 1940 | return(ret); |
1938 | 1941 | } |
… |
… |
|
1997 | 2000 | return (0); |
1998 | 2001 | } |
1999 | | asprintf(&tmp, "I am now backing up all large files."); |
| 2002 | mr_asprintf(&tmp, "I am now backing up all large files."); |
2000 | 2003 | log_to_screen(tmp); |
2001 | 2004 | noof_biggie_files = count_lines_in_file(biggielist_fname); |
… |
… |
|
2003 | 2006 | "Please wait. This may take some time.", "", |
2004 | 2007 | estimated_total_noof_slices); |
2005 | | paranoid_free(tmp); |
| 2008 | mr_free(tmp); |
2006 | 2009 | |
2007 | 2010 | if (!(fin = fopen(biggielist_fname, "r"))) { |
… |
… |
|
2009 | 2012 | return (1); |
2010 | 2013 | } |
2011 | | for (getline(&bigfile_fname, &n, fin); !feof(fin); |
2012 | | getline(&bigfile_fname, &n, fin), biggie_file_number++) { |
| 2014 | for (mr_getline(&bigfile_fname, &n, fin); !feof(fin); |
| 2015 | mr_getline(&bigfile_fname, &n, fin), biggie_file_number++) { |
2013 | 2016 | use_ntfsprog = FALSE; |
2014 | 2017 | if (bigfile_fname[strlen(bigfile_fname) - 1] < 32) { |
… |
… |
|
2021 | 2024 | ftmp = fopen(bigfile_fname, "w"); |
2022 | 2025 | paranoid_fclose(ftmp); |
2023 | | asprintf(&tmp, "bigfile %s was deleted - creating a dummy", |
| 2026 | mr_asprintf(&tmp, "bigfile %s was deleted - creating a dummy", |
2024 | 2027 | bigfile_fname); |
2025 | 2028 | delete_when_done = TRUE; |
… |
… |
|
2035 | 2038 | "Calling ntfsclone in background because %s is an NTFS partition", |
2036 | 2039 | bigfile_fname); |
2037 | | asprintf(&sz_devfile, "%s/%d.%d.000", |
| 2040 | mr_asprintf(&sz_devfile, "%s/%d.%d.000", |
2038 | 2041 | bkpinfo->tmpdir, |
2039 | 2042 | (int) (random() % 32768), |
… |
… |
|
2056 | 2059 | (long int) (pid)); |
2057 | 2060 | |
2058 | | paranoid_free(sz_devfile); |
| 2061 | mr_free(sz_devfile); |
2059 | 2062 | } |
2060 | 2063 | } |
… |
… |
|
2081 | 2084 | tmp = calc_checksum_of_file(bigfile_fname); |
2082 | 2085 | write_header_block_to_stream((off_t)0, tmp, BLK_STOP_A_BIGGIE); |
2083 | | paranoid_free(tmp); |
| 2086 | mr_free(tmp); |
2084 | 2087 | } |
2085 | 2088 | retval += res; |
… |
… |
|
2091 | 2094 | } |
2092 | 2095 | if (res) { |
2093 | | asprintf(&tmp, "Archiving %s ... Failed!", bigfile_fname); |
| 2096 | mr_asprintf(&tmp, "Archiving %s ... Failed!", bigfile_fname); |
2094 | 2097 | } else { |
2095 | | asprintf(&tmp, "Archiving %s ... OK!", bigfile_fname); |
| 2098 | mr_asprintf(&tmp, "Archiving %s ... OK!", bigfile_fname); |
2096 | 2099 | } |
2097 | 2100 | |
… |
… |
|
2108 | 2111 | #endif |
2109 | 2112 | } |
2110 | | paranoid_free(tmp); |
2111 | | paranoid_free(bigfile_fname); |
| 2113 | mr_free(tmp); |
| 2114 | mr_free(bigfile_fname); |
2112 | 2115 | paranoid_fclose(fin); |
2113 | 2116 | |
… |
… |
|
2141 | 2144 | |
2142 | 2145 | /* BERLIOS: Useless ? |
2143 | | asprintf(&tmp, "%s/archives/filelist.full", bkpinfo->scratchdir); |
| 2146 | mr_asprintf(&tmp, "%s/archives/filelist.full", bkpinfo->scratchdir); |
2144 | 2147 | */ |
2145 | 2148 | |
… |
… |
|
2152 | 2155 | get_last_filelist_number(bkpinfo) + 1); |
2153 | 2156 | |
2154 | | asprintf(&curr_filelist_fname, FILELIST_FNAME_RAW_SZ, bkpinfo->tmpdir, |
| 2157 | mr_asprintf(&curr_filelist_fname, FILELIST_FNAME_RAW_SZ, bkpinfo->tmpdir, |
2155 | 2158 | 0L); |
2156 | 2159 | |
… |
… |
|
2158 | 2161 | while (does_file_exist(curr_filelist_fname)) { |
2159 | 2162 | /* backup this set of files */ |
2160 | | asprintf(&curr_afioball_fname, AFIOBALL_FNAME_RAW_SZ, |
| 2163 | mr_asprintf(&curr_afioball_fname, AFIOBALL_FNAME_RAW_SZ, |
2161 | 2164 | bkpinfo->tmpdir, curr_set_no, bkpinfo->zip_suffix); |
2162 | 2165 | |
2163 | 2166 | log_msg(1, "EXAT'g set %ld", curr_set_no); |
2164 | | asprintf(&curr_xattr_list_fname, XATTR_LIST_FNAME_RAW_SZ, |
| 2167 | mr_asprintf(&curr_xattr_list_fname, XATTR_LIST_FNAME_RAW_SZ, |
2165 | 2168 | bkpinfo->tmpdir, curr_set_no); |
2166 | | asprintf(&curr_acl_list_fname, ACL_LIST_FNAME_RAW_SZ, |
| 2169 | mr_asprintf(&curr_acl_list_fname, ACL_LIST_FNAME_RAW_SZ, |
2167 | 2170 | bkpinfo->tmpdir, curr_set_no); |
2168 | 2171 | get_fattr_list(curr_filelist_fname, curr_xattr_list_fname); |
… |
… |
|
2174 | 2177 | retval += res; |
2175 | 2178 | if (res) { |
2176 | | asprintf(&tmp, |
| 2179 | mr_asprintf(&tmp, |
2177 | 2180 | "Errors occurred while archiving set %ld. Perhaps your live filesystem changed?", |
2178 | 2181 | curr_set_no); |
2179 | 2182 | log_to_screen(tmp); |
2180 | | paranoid_free(tmp); |
| 2183 | mr_free(tmp); |
2181 | 2184 | } |
2182 | 2185 | |
2183 | 2186 | tmp = percent_media_full_comment(bkpinfo); |
2184 | | asprintf(&media_usage_comment, "%s", tmp); |
2185 | | paranoid_free(tmp); |
| 2187 | mr_asprintf(&media_usage_comment, "%s", tmp); |
| 2188 | mr_free(tmp); |
2186 | 2189 | |
2187 | 2190 | /* copy to CD (scratchdir) ... and an actual CD-R if necessary */ |
… |
… |
|
2206 | 2209 | g_current_progress++; |
2207 | 2210 | update_progress_form(media_usage_comment); |
2208 | | paranoid_free(media_usage_comment); |
| 2211 | mr_free(media_usage_comment); |
2209 | 2212 | |
2210 | 2213 | if (res) { |
2211 | | asprintf(&tmp, "Failed to add archive %ld's files to CD dir\n", |
| 2214 | mr_asprintf(&tmp, "Failed to add archive %ld's files to CD dir\n", |
2212 | 2215 | curr_set_no); |
2213 | 2216 | log_to_screen(tmp); |
2214 | | paranoid_free(tmp); |
| 2217 | mr_free(tmp); |
2215 | 2218 | fatal_error |
2216 | 2219 | ("Is your hard disk is full? If not, please send the author the logfile."); |
2217 | 2220 | } |
2218 | | paranoid_free(curr_filelist_fname); |
2219 | | paranoid_free(curr_afioball_fname); |
2220 | | paranoid_free(curr_xattr_list_fname); |
2221 | | paranoid_free(curr_acl_list_fname); |
2222 | | asprintf(&curr_filelist_fname, FILELIST_FNAME_RAW_SZ, |
| 2221 | mr_free(curr_filelist_fname); |
| 2222 | mr_free(curr_afioball_fname); |
| 2223 | mr_free(curr_xattr_list_fname); |
| 2224 | mr_free(curr_acl_list_fname); |
| 2225 | mr_asprintf(&curr_filelist_fname, FILELIST_FNAME_RAW_SZ, |
2223 | 2226 | bkpinfo->tmpdir, ++curr_set_no); |
2224 | 2227 | } |
2225 | | paranoid_free(curr_filelist_fname); |
| 2228 | mr_free(curr_filelist_fname); |
2226 | 2229 | close_progress_form(); |
2227 | 2230 | if (retval) { |
… |
… |
|
2310 | 2313 | mvaddstr_and_log_it(g_currentY, 0, |
2311 | 2314 | "Archiving large files to media "); |
2312 | | asprintf(&biggielist, "%s/archives/biggielist.txt", |
| 2315 | mr_asprintf(&biggielist, "%s/archives/biggielist.txt", |
2313 | 2316 | bkpinfo->scratchdir); |
2314 | | asprintf(&xattr_fname, XATTR_BIGGLST_FNAME_RAW_SZ, bkpinfo->tmpdir); |
2315 | | asprintf(&acl_fname, ACL_BIGGLST_FNAME_RAW_SZ, bkpinfo->tmpdir); |
2316 | | |
2317 | | asprintf(&command, "cp %s/biggielist.txt %s", bkpinfo->tmpdir, |
| 2317 | mr_asprintf(&xattr_fname, XATTR_BIGGLST_FNAME_RAW_SZ, bkpinfo->tmpdir); |
| 2318 | mr_asprintf(&acl_fname, ACL_BIGGLST_FNAME_RAW_SZ, bkpinfo->tmpdir); |
| 2319 | |
| 2320 | mr_asprintf(&command, "cp %s/biggielist.txt %s", bkpinfo->tmpdir, |
2318 | 2321 | biggielist); |
2319 | 2322 | paranoid_system(command); |
2320 | | paranoid_free(command); |
2321 | | |
2322 | | asprintf(&blah, "biggielist = %s", biggielist); |
| 2323 | mr_free(command); |
| 2324 | |
| 2325 | mr_asprintf(&blah, "biggielist = %s", biggielist); |
2323 | 2326 | log_msg(2, blah); |
2324 | | paranoid_free(blah); |
| 2327 | mr_free(blah); |
2325 | 2328 | |
2326 | 2329 | if (!does_file_exist(biggielist)) { |
… |
… |
|
2330 | 2333 | get_fattr_list(biggielist, xattr_fname); |
2331 | 2334 | get_acl_list(biggielist, acl_fname); |
2332 | | asprintf(&command, "cp %s %s/archives/", xattr_fname, |
| 2335 | mr_asprintf(&command, "cp %s %s/archives/", xattr_fname, |
2333 | 2336 | bkpinfo->scratchdir); |
2334 | 2337 | paranoid_system(command); |
2335 | | paranoid_free(command); |
2336 | | |
2337 | | asprintf(&command, "cp %s %s/archives/", acl_fname, |
| 2338 | mr_free(command); |
| 2339 | |
| 2340 | mr_asprintf(&command, "cp %s %s/archives/", acl_fname, |
2338 | 2341 | bkpinfo->scratchdir); |
2339 | 2342 | paranoid_system(command); |
2340 | | paranoid_free(command); |
| 2343 | mr_free(command); |
2341 | 2344 | |
2342 | 2345 | if (IS_THIS_A_STREAMING_BACKUP(bkpinfo->backup_media_type)) { |
2343 | 2346 | res += write_EXAT_files_to_tape(bkpinfo, xattr_fname, acl_fname); |
2344 | | asprintf(&blah, "%ld", count_lines_in_file(biggielist)); |
| 2347 | mr_asprintf(&blah, "%ld", count_lines_in_file(biggielist)); |
2345 | 2348 | write_header_block_to_stream((off_t)0, blah, BLK_START_BIGGIEFILES); |
2346 | | paranoid_free(blah); |
2347 | | } |
2348 | | paranoid_free(xattr_fname); |
2349 | | paranoid_free(acl_fname); |
| 2349 | mr_free(blah); |
| 2350 | } |
| 2351 | mr_free(xattr_fname); |
| 2352 | mr_free(acl_fname); |
2350 | 2353 | |
2351 | 2354 | res = make_slices_and_images(bkpinfo, biggielist); |
2352 | | paranoid_free(biggielist); |
| 2355 | mr_free(biggielist); |
2353 | 2356 | |
2354 | 2357 | if (IS_THIS_A_STREAMING_BACKUP(bkpinfo->backup_media_type)) { |
… |
… |
|
2418 | 2421 | continue; |
2419 | 2422 | } |
2420 | | asprintf(&curr_file, "%s", cf); |
| 2423 | mr_asprintf(&curr_file, "%s", cf); |
2421 | 2424 | if (!does_file_exist(curr_file)) { |
2422 | 2425 | log_msg(1, |
… |
… |
|
2427 | 2430 | would_occupy += length_of_file(curr_file) / 1024; |
2428 | 2431 | } |
2429 | | paranoid_free(curr_file); |
| 2432 | mr_free(curr_file); |
2430 | 2433 | } |
2431 | 2434 | va_end(ap); |
… |
… |
|
2448 | 2451 | continue; |
2449 | 2452 | } |
2450 | | asprintf(&curr_file, "%s", cf); |
2451 | | |
2452 | | asprintf(&tmp, "mv -f %s %s/archives/", curr_file, |
| 2453 | mr_asprintf(&curr_file, "%s", cf); |
| 2454 | |
| 2455 | mr_asprintf(&tmp, "mv -f %s %s/archives/", curr_file, |
2453 | 2456 | bkpinfo->scratchdir); |
2454 | 2457 | res = run_program_and_log_output(tmp, 5); |
… |
… |
|
2459 | 2462 | log_msg(8, "Moved %s to CD OK", tmp); |
2460 | 2463 | } |
2461 | | paranoid_free(tmp); |
2462 | | paranoid_free(curr_file); |
| 2464 | mr_free(tmp); |
| 2465 | mr_free(curr_file); |
2463 | 2466 | // unlink (curr_file); |
2464 | 2467 | } |
… |
… |
|
2518 | 2521 | system("/usr/sbin/fdcontrol -F 1722 /dev/fd0.1722"); |
2519 | 2522 | #endif |
2520 | | asprintf(&bootdisk_dev, "%s", DEFAULT_1722MB_DISK); |
| 2523 | mr_asprintf(&bootdisk_dev, "%s", DEFAULT_1722MB_DISK); |
2521 | 2524 | } else if (does_device_exist(BACKUP_1722MB_DISK)) { |
2522 | | asprintf(&bootdisk_dev, "/dev/fd0H1722"); |
| 2525 | mr_asprintf(&bootdisk_dev, "/dev/fd0H1722"); |
2523 | 2526 | } else { |
2524 | 2527 | log_msg(1, "Warning - can't find a 1.72MB floppy device *sigh*"); |
2525 | | asprintf(&bootdisk_dev, DEFAULT_1722MB_DISK); |
2526 | | } |
2527 | | asprintf(&datadisk_dev, "%s", "/dev/fd0"); |
| 2528 | mr_asprintf(&bootdisk_dev, DEFAULT_1722MB_DISK); |
| 2529 | } |
| 2530 | mr_asprintf(&datadisk_dev, "%s", "/dev/fd0"); |
2528 | 2531 | if (!does_device_exist(datadisk_dev)) { |
2529 | 2532 | log_msg(1, "Warning - can't find a 1.44MB floppy device *sigh*"); |
2530 | | paranoid_free(datadisk_dev); |
2531 | | asprintf(&datadisk_dev, "%s", "/dev/fd0"); |
| 2533 | mr_free(datadisk_dev); |
| 2534 | mr_asprintf(&datadisk_dev, "%s", "/dev/fd0"); |
2532 | 2535 | } |
2533 | 2536 | format_first = ask_me_yes_or_no |
… |
… |
|
2538 | 2541 | log_to_screen("Writing boot floppy"); |
2539 | 2542 | #ifdef __FreeBSD__ |
2540 | | asprintf(&tmp, "%s/mindi-kern.1722.img", imagesdir); |
| 2543 | mr_asprintf(&tmp, "%s/mindi-kern.1722.img", imagesdir); |
2541 | 2544 | if (format_first) { |
2542 | 2545 | format_disk(bootdisk_dev); |
2543 | 2546 | } |
2544 | 2547 | res += write_image_to_floppy(bootdisk_dev, tmp); |
2545 | | paranoid_free(tmp); |
| 2548 | mr_free(tmp); |
2546 | 2549 | |
2547 | 2550 | if (ask_me_OK_or_cancel("About to write 1.44MB mfsroot disk")) { |
… |
… |
|
2550 | 2553 | format_disk(datadisk_dev); |
2551 | 2554 | } |
2552 | | asprintf(&tmp, "%s/mindi-mfsroot.1440.img", imagesdir); |
| 2555 | mr_asprintf(&tmp, "%s/mindi-mfsroot.1440.img", imagesdir); |
2553 | 2556 | write_image_to_floppy(datadisk_dev, tmp); |
2554 | | paranoid_free(tmp); |
| 2557 | mr_free(tmp); |
2555 | 2558 | } |
2556 | 2559 | #else |
2557 | | asprintf(&bootdisk_file, "%s/mindi-bootroot.1722.img", imagesdir); |
| 2560 | mr_asprintf(&bootdisk_file, "%s/mindi-bootroot.1722.img", imagesdir); |
2558 | 2561 | if (does_file_exist(bootdisk_file)) { |
2559 | 2562 | if (format_first) { |
… |
… |
|
2562 | 2565 | res += write_image_to_floppy(bootdisk_dev, bootdisk_file); |
2563 | 2566 | } else { |
2564 | | paranoid_free(bootdisk_file); |
2565 | | asprintf(&bootdisk_file, "%s/mindi-boot.1440.img", imagesdir); |
2566 | | asprintf(&rootdisk_file, "%s/mindi-root.1440.img", imagesdir); |
| 2567 | mr_free(bootdisk_file); |
| 2568 | mr_asprintf(&bootdisk_file, "%s/mindi-boot.1440.img", imagesdir); |
| 2569 | mr_asprintf(&rootdisk_file, "%s/mindi-root.1440.img", imagesdir); |
2567 | 2570 | root_disk_exists = TRUE; |
2568 | 2571 | if (!does_file_exist(rootdisk_file) |
… |
… |
|
2572 | 2575 | log_to_screen |
2573 | 2576 | ("Failed to find boot/root floppy images. Oh dear."); |
2574 | | paranoid_free(bootdisk_file); |
2575 | | paranoid_free(rootdisk_file); |
2576 | | paranoid_free(bootdisk_dev); |
| 2577 | mr_free(bootdisk_file); |
| 2578 | mr_free(rootdisk_file); |
| 2579 | mr_free(bootdisk_dev); |
2577 | 2580 | return (1); |
2578 | 2581 | } |
… |
… |
|
2586 | 2589 | format_disk(datadisk_dev); |
2587 | 2590 | } |
2588 | | asprintf(&tmp, "cat %s > %s", rootdisk_file, datadisk_dev); |
| 2591 | mr_asprintf(&tmp, "cat %s > %s", rootdisk_file, datadisk_dev); |
2589 | 2592 | log_msg(1, "tmp = '%s'", tmp); |
2590 | 2593 | res += |
… |
… |
|
2592 | 2595 | ("Writing root floppy", tmp); |
2593 | 2596 | // res += write_image_to_floppy (datadisk_dev, rootdisk_file); |
2594 | | paranoid_free(tmp); |
2595 | | } |
2596 | | paranoid_free(rootdisk_file); |
2597 | | paranoid_free(bootdisk_file); |
| 2597 | mr_free(tmp); |
| 2598 | } |
| 2599 | mr_free(rootdisk_file); |
| 2600 | mr_free(bootdisk_file); |
2598 | 2601 | } |
2599 | 2602 | #endif |
2600 | 2603 | } |
2601 | | paranoid_free(bootdisk_dev); |
| 2604 | mr_free(bootdisk_dev); |
2602 | 2605 | |
2603 | 2606 | if (IS_THIS_A_STREAMING_BACKUP(bkpinfo->backup_media_type)) { |
… |
… |
|
2607 | 2610 | } |
2608 | 2611 | for (i = 1; i < 99; i++) { |
2609 | | asprintf(&tmp, "%s/mindi-data-%d.img", imagesdir, i); |
| 2612 | mr_asprintf(&tmp, "%s/mindi-data-%d.img", imagesdir, i); |
2610 | 2613 | log_msg(3, tmp); |
2611 | 2614 | if (!does_file_exist(tmp)) { |
… |
… |
|
2613 | 2616 | break; |
2614 | 2617 | } |
2615 | | asprintf(&comment, "About to write data disk #%d", i); |
| 2618 | mr_asprintf(&comment, "About to write data disk #%d", i); |
2616 | 2619 | if (ask_me_OK_or_cancel(comment)) { |
2617 | | paranoid_free(comment); |
2618 | | asprintf(&comment, "Writing data disk #%3d", i); |
| 2620 | mr_free(comment); |
| 2621 | mr_asprintf(&comment, "Writing data disk #%3d", i); |
2619 | 2622 | log_to_screen(comment); |
2620 | | paranoid_free(comment); |
| 2623 | mr_free(comment); |
2621 | 2624 | if (format_first) { |
2622 | 2625 | res += format_disk(datadisk_dev); |
… |
… |
|
2625 | 2628 | } |
2626 | 2629 | } |
2627 | | paranoid_free(tmp); |
2628 | | paranoid_free(datadisk_dev); |
| 2630 | mr_free(tmp); |
| 2631 | mr_free(datadisk_dev); |
2629 | 2632 | return (res); |
2630 | 2633 | } |
… |
… |
|
2729 | 2732 | continue; |
2730 | 2733 | } |
2731 | | asprintf(&curr_file, "%s", cf); |
| 2734 | mr_asprintf(&curr_file, "%s", cf); |
2732 | 2735 | if (!does_file_exist(curr_file)) { |
2733 | 2736 | log_msg(1, |
… |
… |
|
2752 | 2755 | retval += res; |
2753 | 2756 | unlink(curr_file); |
2754 | | paranoid_free(curr_file); |
| 2757 | mr_free(curr_file); |
2755 | 2758 | /* write closing header */ |
2756 | 2759 | write_header_block_to_stream((off_t)0, "finished-writing-file", stop_chr); |
… |
… |
|
2786 | 2789 | if ((cdrw_device = find_cdrw_device()) != NULL) { |
2787 | 2790 | if (!system("which cdrecord > /dev/null 2> /dev/null")) { |
2788 | | asprintf(&cdrecord, "cdrecord dev=%s -atip", cdrw_device); |
| 2791 | mr_asprintf(&cdrecord, "cdrecord dev=%s -atip", cdrw_device); |
2789 | 2792 | } else if (!system("which dvdrecord > /dev/null 2> /dev/null")) { |
2790 | | asprintf(&cdrecord, "cdrecord dev=%s -atip", cdrw_device); |
| 2793 | mr_asprintf(&cdrecord, "cdrecord dev=%s -atip", cdrw_device); |
2791 | 2794 | } else { |
2792 | | asprintf(&cdrecord, " "); |
| 2795 | mr_asprintf(&cdrecord, " "); |
2793 | 2796 | log_msg(2, "Found no cdrecord nor dvdrecord in path."); |
2794 | 2797 | } |
… |
… |
|
2797 | 2800 | run_program_and_log_output(cdrecord, 5); |
2798 | 2801 | } |
2799 | | paranoid_free(cdrecord); |
| 2802 | mr_free(cdrecord); |
2800 | 2803 | } |
2801 | 2804 | return(cdrw_device); |
… |
… |
|
2827 | 2830 | char *szunmount; |
2828 | 2831 | |
2829 | | asprintf(&szmsg, "I am about to burn %s #%d", |
| 2832 | mr_asprintf(&szmsg, "I am about to burn %s #%d", |
2830 | 2833 | g_backup_media_string, |
2831 | 2834 | g_current_media_number); |
2832 | 2835 | log_to_screen(szmsg); |
2833 | | paranoid_free(szmsg); |
| 2836 | mr_free(szmsg); |
2834 | 2837 | if (g_current_media_number < ask_for_one_if_more_than_this) { |
2835 | 2838 | return; |
2836 | 2839 | } |
2837 | 2840 | log_to_screen("Scanning CD-ROM drive..."); |
2838 | | asprintf(&mtpt, "/tmp/cd.mtpt.%ld.%ld", (long int) random(), |
| 2841 | mr_asprintf(&mtpt, "/tmp/cd.mtpt.%ld.%ld", (long int) random(), |
2839 | 2842 | (long int) random()); |
2840 | 2843 | make_hole_for_dir(mtpt); |
… |
… |
|
2848 | 2851 | retract_CD_tray_and_defeat_autorun(); |
2849 | 2852 | */ |
2850 | | asprintf(&tmp, "umount %s", cdrom_dev); |
| 2853 | mr_asprintf(&tmp, "umount %s", cdrom_dev); |
2851 | 2854 | run_program_and_log_output(tmp, 1); |
2852 | | paranoid_free(tmp); |
2853 | | asprintf(&szcdno, "%s/archives/THIS-CD-NUMBER", mtpt); |
2854 | | asprintf(&szserfname, "%s/archives/SERIAL-STRING", mtpt); |
2855 | | asprintf(&szunmount, "umount %s", mtpt); |
| 2855 | mr_free(tmp); |
| 2856 | mr_asprintf(&szcdno, "%s/archives/THIS-CD-NUMBER", mtpt); |
| 2857 | mr_asprintf(&szserfname, "%s/archives/SERIAL-STRING", mtpt); |
| 2858 | mr_asprintf(&szunmount, "umount %s", mtpt); |
2856 | 2859 | cd_number = -1; |
2857 | | asprintf(&tmp, "mount %s %s", cdrom_dev, mtpt); |
| 2860 | mr_asprintf(&tmp, "mount %s %s", cdrom_dev, mtpt); |
2858 | 2861 | if ((attempt_to_mount_returned_this = |
2859 | 2862 | run_program_and_log_output(tmp, 1))) { |
2860 | 2863 | log_msg(4, "Failed to mount %s at %s", cdrom_dev, mtpt); |
2861 | 2864 | log_to_screen("If there's a CD/DVD in the drive, it's blank."); |
2862 | | asprintf(&our_serial_str, "%s", ""); |
| 2865 | mr_asprintf(&our_serial_str, "%s", ""); |
2863 | 2866 | } else if (!does_file_exist(szcdno) |
2864 | 2867 | || !does_file_exist(szserfname)) { |
… |
… |
|
2866 | 2869 | ("%s has data on it but it's probably not a Mondo CD.", |
2867 | 2870 | g_backup_media_string); |
2868 | | asprintf(&our_serial_str, "%s", ""); |
| 2871 | mr_asprintf(&our_serial_str, "%s", ""); |
2869 | 2872 | } else { |
2870 | 2873 | log_to_screen("%s found in drive. It's a Mondo disk.", |
… |
… |
|
2872 | 2875 | tmp1 = last_line_of_file(szcdno); |
2873 | 2876 | cd_number = atoi(tmp1); |
2874 | | paranoid_free(tmp1); |
2875 | | asprintf(&tmp1, "cat %s 2> /dev/null", szserfname); |
| 2877 | mr_free(tmp1); |
| 2878 | mr_asprintf(&tmp1, "cat %s 2> /dev/null", szserfname); |
2876 | 2879 | our_serial_str = call_program_and_get_last_line_of_output(tmp1); |
2877 | | paranoid_free(tmp1); |
| 2880 | mr_free(tmp1); |
2878 | 2881 | // FIXME - should be able to use last_line_of_file(), surely? |
2879 | 2882 | } |
2880 | | paranoid_free(szcdno); |
2881 | | paranoid_free(szserfname); |
2882 | | paranoid_free(tmp); |
| 2883 | mr_free(szcdno); |
| 2884 | mr_free(szserfname); |
| 2885 | mr_free(tmp); |
2883 | 2886 | |
2884 | 2887 | run_program_and_log_output(szunmount, 1); |
2885 | | paranoid_free(szunmount); |
| 2888 | mr_free(szunmount); |
2886 | 2889 | |
2887 | 2890 | log_msg(2, "paafcd: cd_number = %d", cd_number); |
… |
… |
|
2904 | 2907 | log_to_screen("...but not part of _our_ backup set."); |
2905 | 2908 | } |
2906 | | paranoid_free(our_serial_str); |
| 2909 | mr_free(our_serial_str); |
2907 | 2910 | } else { |
2908 | 2911 | log_msg(2, |
… |
… |
|
2914 | 2917 | g_backup_media_string); |
2915 | 2918 | } |
2916 | | paranoid_free(cdrw_device); |
2917 | | } |
2918 | | paranoid_free(mtpt); |
| 2919 | mr_free(cdrw_device); |
| 2920 | } |
| 2921 | mr_free(mtpt); |
2919 | 2922 | |
2920 | 2923 | if (!ok_go_ahead_burn_it) { |
2921 | 2924 | eject_device(cdrom_dev); |
2922 | | asprintf(&tmp, |
| 2925 | mr_asprintf(&tmp, |
2923 | 2926 | "I am about to burn %s #%d of the backup set. Please insert %s and press Enter.", |
2924 | 2927 | g_backup_media_string, |
… |
… |
|
2926 | 2929 | g_backup_media_string); |
2927 | 2930 | popup_and_OK(tmp); |
2928 | | paranoid_free(tmp); |
| 2931 | mr_free(tmp); |
2929 | 2932 | goto gotos_make_me_puke; |
2930 | 2933 | } else { |
2931 | 2934 | log_msg(2, "paafcd: OK, going ahead and burning it."); |
2932 | 2935 | } |
2933 | | paranoid_free(cdrom_dev); |
| 2936 | mr_free(cdrom_dev); |
2934 | 2937 | |
2935 | 2938 | log_msg(2, |
… |
… |
|
3048 | 3051 | if (is_this_file_compressed(biggie_filename) |
3049 | 3052 | || bkpinfo->compression_level == 0) { |
3050 | | asprintf(&suffix, "%s", ""); |
| 3053 | mr_asprintf(&suffix, "%s", ""); |
3051 | 3054 | // log_it("%s is indeed compressed :-)", filename); |
3052 | 3055 | should_I_compress_slices = FALSE; |
3053 | 3056 | } else { |
3054 | | asprintf(&suffix, "%s", bkpinfo->zip_suffix); |
| 3057 | mr_asprintf(&suffix, "%s", bkpinfo->zip_suffix); |
3055 | 3058 | should_I_compress_slices = TRUE; |
3056 | 3059 | } |
… |
… |
|
3061 | 3064 | if (ntfsprog_fifo) { |
3062 | 3065 | file_to_openin = ntfsprog_fifo; |
3063 | | asprintf(&checksum_line, "IGNORE"); |
| 3066 | mr_asprintf(&checksum_line, "IGNORE"); |
3064 | 3067 | log_msg(2, |
3065 | 3068 | "Not calculating checksum for %s: it would take too long", |
… |
… |
|
3069 | 3072 | fatal_error("ntfsresize not found"); |
3070 | 3073 | } |
3071 | | paranoid_free(tmp); |
3072 | | |
3073 | | asprintf(&command, "ntfsresize --force --info %s|grep '^You might resize at '|cut -d' ' -f5", biggie_filename); |
| 3074 | mr_free(tmp); |
| 3075 | |
| 3076 | mr_asprintf(&command, "ntfsresize --force --info %s|grep '^You might resize at '|cut -d' ' -f5", biggie_filename); |
3074 | 3077 | log_it("command = %s", command); |
3075 | 3078 | tmp = call_program_and_get_last_line_of_output(command); |
3076 | | paranoid_free(command); |
| 3079 | mr_free(command); |
3077 | 3080 | |
3078 | 3081 | log_it("res of it = %s", tmp); |
3079 | 3082 | totallength = (off_t)atoll(tmp); |
3080 | | paranoid_free(tmp); |
| 3083 | mr_free(tmp); |
3081 | 3084 | } else { |
3082 | 3085 | file_to_openin = biggie_filename; |
3083 | 3086 | if (strchr(biggie_filename,'\'') != NULL) { |
3084 | | asprintf(&command, "md5sum \"%s\"", biggie_filename); |
| 3087 | mr_asprintf(&command, "md5sum \"%s\"", biggie_filename); |
3085 | 3088 | } else { |
3086 | | asprintf(&command, "md5sum '%s'", biggie_filename); |
| 3089 | mr_asprintf(&command, "md5sum '%s'", biggie_filename); |
3087 | 3090 | } |
3088 | 3091 | if (!(fin = popen(command, "r"))) { |
3089 | 3092 | log_OS_error("Unable to popen-in command"); |
3090 | | paranoid_free(command); |
| 3093 | mr_free(command); |
3091 | 3094 | return (1); |
3092 | 3095 | } |
3093 | | paranoid_free(command); |
3094 | | (void) getline(&checksum_line, &n, fin); |
| 3096 | mr_free(command); |
| 3097 | mr_getline(&checksum_line, &n, fin); |
3095 | 3098 | pclose(fin); |
3096 | 3099 | totallength = length_of_file (biggie_filename); |
… |
… |
|
3114 | 3117 | fatal_error("checksum_line too big"); |
3115 | 3118 | } |
3116 | | paranoid_free(checksum_line); |
| 3119 | mr_free(checksum_line); |
3117 | 3120 | |
3118 | 3121 | tmp = slice_fname(biggie_file_number, 0, bkpinfo->tmpdir, ""); |
3119 | 3122 | fout = fopen(tmp, "w"); |
3120 | | paranoid_free(tmp); |
| 3123 | mr_free(tmp); |
3121 | 3124 | (void) fwrite((void *) &biggiestruct, 1, sizeof(biggiestruct), fout); |
3122 | 3125 | paranoid_fclose(fout); |
… |
… |
|
3126 | 3129 | if (!(fin = fopen(file_to_openin, "r"))) { |
3127 | 3130 | log_OS_error("Unable to openin biggie_filename"); |
3128 | | asprintf(&tmp, "Cannot archive bigfile '%s': not found", |
| 3131 | mr_asprintf(&tmp, "Cannot archive bigfile '%s': not found", |
3129 | 3132 | biggie_filename); |
3130 | 3133 | log_to_screen(tmp); |
3131 | | paranoid_free(tmp); |
3132 | | |
3133 | | paranoid_free(suffix); |
| 3134 | mr_free(tmp); |
| 3135 | |
| 3136 | mr_free(suffix); |
3134 | 3137 | return (1); |
3135 | 3138 | } |
… |
… |
|
3140 | 3143 | res = move_files_to_cd(bkpinfo, tmp, NULL); |
3141 | 3144 | } |
3142 | | paranoid_free(tmp); |
| 3145 | mr_free(tmp); |
3143 | 3146 | i = bkpinfo->optimal_set_size / 256; |
3144 | 3147 | for (slice_num = 1; !finished; slice_num++) { |
… |
… |
|
3148 | 3151 | tmp = percent_media_full_comment(bkpinfo); |
3149 | 3152 | update_progress_form(tmp); |
3150 | | paranoid_free(tmp); |
| 3153 | mr_free(tmp); |
3151 | 3154 | |
3152 | 3155 | if (!(fout = fopen(curr_slice_fname_uncompressed, "w"))) { |
3153 | 3156 | log_OS_error(curr_slice_fname_uncompressed); |
3154 | 3157 | |
3155 | | paranoid_free(curr_slice_fname_uncompressed); |
3156 | | paranoid_free(curr_slice_fname_compressed); |
3157 | | paranoid_free(suffix); |
| 3158 | mr_free(curr_slice_fname_uncompressed); |
| 3159 | mr_free(curr_slice_fname_compressed); |
| 3160 | mr_free(suffix); |
3158 | 3161 | return (1); |
3159 | 3162 | } |
… |
… |
|
3175 | 3178 | i = 0; |
3176 | 3179 | } |
3177 | | paranoid_free(tempblock); |
| 3180 | mr_free(tempblock); |
3178 | 3181 | paranoid_fclose(fout); |
3179 | 3182 | if (i > 0) // length_of_file (curr_slice_fname_uncompressed) |
… |
… |
|
3185 | 3188 | } |
3186 | 3189 | if (should_I_compress_slices && bkpinfo->compression_level > 0) { |
3187 | | asprintf(&command, "%s -%d %s", bkpinfo->zip_exe, |
| 3190 | mr_asprintf(&command, "%s -%d %s", bkpinfo->zip_exe, |
3188 | 3191 | bkpinfo->compression_level, |
3189 | 3192 | curr_slice_fname_uncompressed); |
… |
… |
|
3195 | 3198 | } else { |
3196 | 3199 | /* BERLIOS: Useless |
3197 | | asprintf(&command, "mv %s %s 2>> %s", |
| 3200 | mr_asprintf(&command, "mv %s %s 2>> %s", |
3198 | 3201 | curr_slice_fname_uncompressed, |
3199 | 3202 | curr_slice_fname_compressed, MONDO_LOGFILE); |
… |
… |
|
3212 | 3215 | } |
3213 | 3216 | if (res) { |
3214 | | asprintf(&tmp, "Problem with slice # %ld", slice_num); |
| 3217 | mr_asprintf(&tmp, "Problem with slice # %ld", slice_num); |
3215 | 3218 | } else { |
3216 | | asprintf(&tmp, |
| 3219 | mr_asprintf(&tmp, |
3217 | 3220 | "%s - Bigfile #%ld, slice #%ld compressed OK ", |
3218 | 3221 | biggie_filename, biggie_file_number + 1, |
… |
… |
|
3229 | 3232 | log_msg(2, tmp); |
3230 | 3233 | #endif |
3231 | | paranoid_free(tmp); |
3232 | | asprintf(&file_to_archive, "%s", curr_slice_fname_compressed); |
| 3234 | mr_free(tmp); |
| 3235 | mr_asprintf(&file_to_archive, "%s", curr_slice_fname_compressed); |
3233 | 3236 | g_current_progress++; |
3234 | 3237 | } else { /* if i==0 then ... */ |
3235 | 3238 | |
3236 | 3239 | finished = TRUE; |
3237 | | asprintf(&file_to_archive, "%s", |
| 3240 | mr_asprintf(&file_to_archive, "%s", |
3238 | 3241 | curr_slice_fname_uncompressed); |
3239 | 3242 | if (IS_THIS_A_STREAMING_BACKUP(bkpinfo->backup_media_type)) { |
… |
… |
|
3251 | 3254 | res = move_files_to_cd(bkpinfo, file_to_archive, NULL); |
3252 | 3255 | } |
3253 | | paranoid_free(file_to_archive); |
| 3256 | mr_free(file_to_archive); |
3254 | 3257 | retval += res; |
3255 | 3258 | if (res) { |
3256 | | asprintf(&tmp, |
| 3259 | mr_asprintf(&tmp, |
3257 | 3260 | "Failed to add slice %ld of bigfile %ld to scratchdir", |
3258 | 3261 | slice_num, biggie_file_number + 1); |
3259 | 3262 | log_to_screen(tmp); |
3260 | | paranoid_free(tmp); |
| 3263 | mr_free(tmp); |
3261 | 3264 | fatal_error |
3262 | 3265 | ("Hard disk full. You should have bought a bigger one."); |
3263 | 3266 | } |
3264 | | paranoid_free(curr_slice_fname_uncompressed); |
3265 | | paranoid_free(curr_slice_fname_compressed); |
3266 | | } |
3267 | | paranoid_free(suffix); |
| 3267 | mr_free(curr_slice_fname_uncompressed); |
| 3268 | mr_free(curr_slice_fname_compressed); |
| 3269 | } |
| 3270 | mr_free(suffix); |
3268 | 3271 | paranoid_fclose(fin); |
3269 | 3272 | if (retval) { |
3270 | | asprintf(&tmp, "Sliced bigfile #%ld...FAILED", |
| 3273 | mr_asprintf(&tmp, "Sliced bigfile #%ld...FAILED", |
3271 | 3274 | biggie_file_number + 1); |
3272 | 3275 | } else { |
3273 | | asprintf(&tmp, "Sliced bigfile #%ld...OK!", |
| 3276 | mr_asprintf(&tmp, "Sliced bigfile #%ld...OK!", |
3274 | 3277 | biggie_file_number + 1); |
3275 | 3278 | } |
3276 | 3279 | log_msg(1, tmp); |
3277 | | paranoid_free(tmp); |
| 3280 | mr_free(tmp); |
3278 | 3281 | return (retval); |
3279 | 3282 | } |
… |
… |
|
3300 | 3303 | assert_string_is_neither_NULL_nor_zerolength(d); |
3301 | 3304 | |
3302 | | asprintf(&dir, "%s/archives", d); |
3303 | | asprintf(&tmp, "find %s -name '*.afio*' -exec rm -f '{}' \\;", dir); |
| 3305 | mr_asprintf(&dir, "%s/archives", d); |
| 3306 | mr_asprintf(&tmp, "find %s -name '*.afio*' -exec rm -f '{}' \\;", dir); |
3304 | 3307 | run_program_and_log_output(tmp, FALSE); |
3305 | | paranoid_free(tmp); |
3306 | | |
3307 | | asprintf(&tmp, "find %s -name '*list.[0-9]*' -exec rm -f '{}' \\;", |
| 3308 | mr_free(tmp); |
| 3309 | |
| 3310 | mr_asprintf(&tmp, "find %s -name '*list.[0-9]*' -exec rm -f '{}' \\;", |
3308 | 3311 | dir); |
3309 | 3312 | run_program_and_log_output(tmp, FALSE); |
3310 | | paranoid_free(tmp); |
3311 | | |
3312 | | asprintf(&tmp, "find %s -name 'slice*' -exec rm -f '{}' \\;", dir); |
| 3313 | mr_free(tmp); |
| 3314 | |
| 3315 | mr_asprintf(&tmp, "find %s -name 'slice*' -exec rm -f '{}' \\;", dir); |
3313 | 3316 | run_program_and_log_output(tmp, FALSE); |
3314 | | paranoid_free(tmp); |
3315 | | |
3316 | | asprintf(&tmp, "rm -f %s/cklist*", dir); |
| 3317 | mr_free(tmp); |
| 3318 | |
| 3319 | mr_asprintf(&tmp, "rm -f %s/cklist*", dir); |
3317 | 3320 | run_program_and_log_output(tmp, FALSE); |
3318 | | paranoid_free(tmp); |
3319 | | |
3320 | | asprintf(&tmp, "rm -f %s/zero", dir); |
| 3321 | mr_free(tmp); |
| 3322 | |
| 3323 | mr_asprintf(&tmp, "rm -f %s/zero", dir); |
3321 | 3324 | run_program_and_log_output(tmp, FALSE); |
3322 | | paranoid_free(tmp); |
| 3325 | mr_free(tmp); |
3323 | 3326 | |
3324 | 3327 | log_msg(1, "Wiped %s's archives", dir); |
3325 | | asprintf(&tmp, "ls -l %s", dir); |
| 3328 | mr_asprintf(&tmp, "ls -l %s", dir); |
3326 | 3329 | run_program_and_log_output(tmp, FALSE); |
3327 | | paranoid_free(tmp); |
3328 | | |
3329 | | paranoid_free(dir); |
| 3330 | mr_free(tmp); |
| 3331 | |
| 3332 | mr_free(dir); |
3330 | 3333 | } |
3331 | 3334 | |
… |
… |
|
3357 | 3360 | // I should really check if there are any slices or tarballs to be copied to CD-R(W)'s; the odds are approx. 1 in a million that there are no files here, so I'll just go ahead & make one more CD anyway |
3358 | 3361 | |
3359 | | asprintf(&tmp, "Writing the final ISO"); |
| 3362 | mr_asprintf(&tmp, "Writing the final ISO"); |
3360 | 3363 | log_msg(2, tmp); |
3361 | 3364 | /* BERLIOS: center_string is now broken |
… |
… |
|
3367 | 3370 | } |
3368 | 3371 | #endif |
3369 | | paranoid_free(tmp); |
| 3372 | mr_free(tmp); |
3370 | 3373 | res = write_iso_and_go_on(bkpinfo, TRUE); |
3371 | 3374 | #ifndef _XWIN |
… |
… |
|
3432 | 3435 | /* label the ISO with its number */ |
3433 | 3436 | |
3434 | | asprintf(&cdno_fname, "%s/archives/THIS-CD-NUMBER", |
| 3437 | mr_asprintf(&cdno_fname, "%s/archives/THIS-CD-NUMBER", |
3435 | 3438 | bkpinfo->scratchdir); |
3436 | 3439 | fout = fopen(cdno_fname, "w"); |
3437 | 3440 | fprintf(fout, "%d", g_current_media_number); |
3438 | 3441 | paranoid_fclose(fout); |
3439 | | paranoid_free(cdno_fname); |
3440 | | |
3441 | | asprintf(&tmp, "cp -f %s/autorun %s/", g_mondo_home, |
| 3442 | mr_free(cdno_fname); |
| 3443 | |
| 3444 | mr_asprintf(&tmp, "cp -f %s/autorun %s/", g_mondo_home, |
3442 | 3445 | bkpinfo->scratchdir); |
3443 | 3446 | if (run_program_and_log_output(tmp, FALSE)) { |
3444 | 3447 | log_msg(2, "Warning - unable to copy autorun to scratchdir"); |
3445 | 3448 | } |
3446 | | paranoid_free(tmp); |
| 3449 | mr_free(tmp); |
3447 | 3450 | |
3448 | 3451 | /* last CD or not? Label accordingly */ |
3449 | | asprintf(&lastcd_fname, "%s/archives/NOT-THE-LAST", |
| 3452 | mr_asprintf(&lastcd_fname, "%s/archives/NOT-THE-LAST", |
3450 | 3453 | bkpinfo->scratchdir); |
3451 | 3454 | if (last_cd) { |
… |
… |
|
3459 | 3462 | paranoid_fclose(fout); |
3460 | 3463 | } |
3461 | | paranoid_free(lastcd_fname); |
| 3464 | mr_free(lastcd_fname); |
3462 | 3465 | |
3463 | 3466 | if (space_occupied_by_cd(bkpinfo->scratchdir) / 1024 > |
3464 | 3467 | bkpinfo->media_size[g_current_media_number]) { |
3465 | | asprintf(&tmp, |
| 3468 | mr_asprintf(&tmp, |
3466 | 3469 | "Warning! CD is too big. It occupies %ld KB, which is more than the %ld KB allowed.", |
3467 | 3470 | (long) space_occupied_by_cd(bkpinfo->scratchdir), |
3468 | 3471 | (long) bkpinfo->media_size[g_current_media_number]); |
3469 | 3472 | log_to_screen(tmp); |
3470 | | paranoid_free(tmp); |
3471 | | } |
3472 | | asprintf(&isofile, "%s/%s/%s-%d.iso", bkpinfo->isodir, |
| 3473 | mr_free(tmp); |
| 3474 | } |
| 3475 | mr_asprintf(&isofile, "%s/%s/%s-%d.iso", bkpinfo->isodir, |
3473 | 3476 | bkpinfo->nfs_remote_dir, bkpinfo->prefix, |
3474 | 3477 | g_current_media_number); |
… |
… |
|
3485 | 3488 | else { |
3486 | 3489 | log_msg(3, "Great. Found Mike's CD-ROM drive."); |
3487 | | paranoid_free(tmp); |
| 3490 | mr_free(tmp); |
3488 | 3491 | } |
3489 | 3492 | } |
… |
… |
|
3500 | 3503 | that_one_was_ok = TRUE; |
3501 | 3504 | } else { |
3502 | | asprintf(&tmp, "Failed to burn %s #%d. Retry?", |
| 3505 | mr_asprintf(&tmp, "Failed to burn %s #%d. Retry?", |
3503 | 3506 | bkpinfo->backup_media_string, |
3504 | 3507 | g_current_media_number); |
3505 | 3508 | res = ask_me_yes_or_no(tmp); |
3506 | | paranoid_free(tmp); |
| 3509 | mr_free(tmp); |
3507 | 3510 | if (!res) { |
3508 | 3511 | if (ask_me_yes_or_no("Abort the backup?")) { |
… |
… |
|
3520 | 3523 | if (using_nfs) |
3521 | 3524 | { |
3522 | | asprintf(&tmp,"mv -f %s %s/%s/", isofile, bkpinfo->isodir, bkpinfo->nfs_remote_dir); |
| 3525 | mr_asprintf(&tmp,"mv -f %s %s/%s/", isofile, bkpinfo->isodir, bkpinfo->nfs_remote_dir); |
3523 | 3526 | if (run_program_and_log_output(tmp, FALSE)) |
3524 | 3527 | { log_to_screen("Unable to move ISO to NFS dir"); } |
3525 | 3528 | } |
3526 | 3529 | */ |
3527 | | paranoid_free(isofile); |
| 3530 | mr_free(isofile); |
3528 | 3531 | |
3529 | 3532 | g_current_media_number++; |
… |
… |
|
3532 | 3535 | } |
3533 | 3536 | wipe_archives(bkpinfo->scratchdir); |
3534 | | asprintf(&tmp, "rm -Rf %s/images/*gz %s/images/*data*img", |
| 3537 | mr_asprintf(&tmp, "rm -Rf %s/images/*gz %s/images/*data*img", |
3535 | 3538 | bkpinfo->scratchdir, bkpinfo->scratchdir); |
3536 | 3539 | if (system(tmp)) { |
… |
… |
|
3538 | 3541 | "Error occurred when I tried to delete the redundant IMGs and GZs"); |
3539 | 3542 | } |
3540 | | paranoid_free(tmp); |
| 3543 | mr_free(tmp); |
3541 | 3544 | |
3542 | 3545 | if (last_cd) { |
… |
… |
|
3576 | 3579 | "Verifying archives against live filesystem"); |
3577 | 3580 | if (bkpinfo->backup_media_type == cdstream) { |
3578 | | paranoid_alloc(bkpinfo->media_device,"/dev/cdrom"); |
| 3581 | mr_allocstr(bkpinfo->media_device,"/dev/cdrom"); |
3579 | 3582 | } |
3580 | 3583 | verify_tape_backups(bkpinfo); |
… |
… |
|
3606 | 3609 | retval += res; |
3607 | 3610 | if (res) { |
3608 | | asprintf(&tmp, |
| 3611 | mr_asprintf(&tmp, |
3609 | 3612 | "Warnings/errors were reported while checking %s #%d", |
3610 | 3613 | bkpinfo->backup_media_string, |
3611 | 3614 | g_current_media_number); |
3612 | 3615 | log_to_screen(tmp); |
3613 | | paranoid_free(tmp); |
3614 | | |
3615 | | } |
3616 | | } |
3617 | | asprintf(&tmp, |
| 3616 | mr_free(tmp); |
| 3617 | |
| 3618 | } |
| 3619 | } |
| 3620 | mr_asprintf(&tmp, |
3618 | 3621 | "grep 'afio: ' %s | sed 's/afio: //' | grep -vx '/dev/.*' >> /tmp/changed.files", |
3619 | 3622 | MONDO_LOGFILE); |
3620 | 3623 | system(tmp); |
3621 | | paranoid_free(tmp); |
3622 | | |
3623 | | asprintf(&tmp, |
| 3624 | mr_free(tmp); |
| 3625 | |
| 3626 | mr_asprintf(&tmp, |
3624 | 3627 | "grep 'star: ' %s | sed 's/star: //' | grep -vx '/dev/.*' >> /tmp/changed.files", |
3625 | 3628 | MONDO_LOGFILE); |
3626 | 3629 | system(tmp); |
3627 | | paranoid_free(tmp); |
| 3630 | mr_free(tmp); |
3628 | 3631 | |
3629 | 3632 | run_program_and_log_output("umount " MNT_CDROM, FALSE); |
… |
… |
|
3676 | 3679 | p++; |
3677 | 3680 | } |
3678 | | asprintf(&title, "Writing %s to floppy", p); |
| 3681 | mr_asprintf(&title, "Writing %s to floppy", p); |
3679 | 3682 | open_evalcall_form(title); |
3680 | | paranoid_free(title); |
| 3683 | mr_free(title); |
3681 | 3684 | |
3682 | 3685 | /* functional stuff */ |
… |
… |
|
3687 | 3690 | maxblocks = 1440; |
3688 | 3691 | } |
3689 | | asprintf(&tmp, "maxblocks = %d; p=%s", maxblocks, p); |
| 3692 | mr_asprintf(&tmp, "maxblocks = %d; p=%s", maxblocks, p); |
3690 | 3693 | log_msg(2, tmp); |
3691 | | paranoid_free(tmp); |
| 3694 | mr_free(tmp); |
3692 | 3695 | |
3693 | 3696 | /* copy data from image to floppy */ |
… |
… |
|
3763 | 3766 | char *param = NULL; |
3764 | 3767 | |
3765 | | mr_conf = (struct s_mr_conf *)malloc(sizeof(struct s_mr_conf)); |
3766 | | if (mr_conf == NULL) { |
3767 | | fatal_error("Unable to malloc mr_conf"); |
3768 | | } |
3769 | | /* Default for everything int : 0 char * : NULL */ |
| 3768 | mr_conf = (struct s_mr_conf *)mr_malloc(sizeof(struct s_mr_conf)); |
3770 | 3769 | |
3771 | 3770 | /* mindi conf parameters also needed in mondo */ |
3772 | | mr_conf->mindi_ia64_boot_size = 0; |
3773 | | |
3774 | | asprintf(&command, "mindi -printvar IA64_BOOT_SIZE"); |
| 3771 | mr_asprintf(&command, "mindi -printvar IA64_BOOT_SIZE"); |
3775 | 3772 | fin = popen(command, "r"); |
3776 | | getline(¶m, &n, fin); |
| 3773 | mr_getline(¶m, &n, fin); |
3777 | 3774 | pclose(fin); |
3778 | | paranoid_free(command); |
| 3775 | mr_free(command); |
| 3776 | |
3779 | 3777 | mr_conf->mindi_ia64_boot_size = atoi(param); |
3780 | | paranoid_free(param); |
3781 | | |
3782 | | mr_conf->mondo_iso_creation_cmd = NULL; |
| 3778 | mr_free(param); |
3783 | 3779 | |
3784 | 3780 | /* Finds mondo conf file */ |
… |
… |
|
3786 | 3782 | |
3787 | 3783 | /* mondo conf parameters needed */ |
3788 | | mr_conf->mondo_iso_creation_cmd = mr_conf_sread("mondo_iso_creation_cmd"); |
| 3784 | if ((mr_conf->mondo_iso_creation_cmd = mr_conf_sread("mondo_iso_creation_cmd")) == NULL) {; |
| 3785 | mr_log_exit(-1,"Unable to get mondo_iso_creation_cmd parameter from conf file\nAborting...\n"); |
| 3786 | } |
| 3787 | |
| 3788 | if ((mr_conf->mondo_logfile = mr_conf_sread("mondo_logfile")) == NULL) { |
| 3789 | mr_log_exit(-1,"Unable to get mondo_logfile parameter from conf file\nAborting...\n"); |
| 3790 | } |
3789 | 3791 | |
3790 | 3792 | mr_conf_close(); |
-
r839
|
r900
|
|
17 | 17 | #include "libmondo-fork-EXT.h" |
18 | 18 | #include "libmondo-stream-EXT.h" |
| 19 | #include "mr_mem.h" |
19 | 20 | |
20 | 21 | #include <sys/ioctl.h> |
… |
… |
|
62 | 63 | { |
63 | 64 | if (bkpinfo->media_device != NULL) { |
64 | | paranoid_alloc(g_cdrom_drive_is_here, bkpinfo->media_device); // just in case |
65 | | paranoid_alloc(g_dvd_drive_is_here, bkpinfo->media_device); // just in case |
| 65 | mr_allocstr(g_cdrom_drive_is_here, bkpinfo->media_device); // just in case |
| 66 | mr_allocstr(g_dvd_drive_is_here, bkpinfo->media_device); // just in case |
66 | 67 | } |
67 | 68 | } |
… |
… |
|
113 | 114 | make_hole_for_dir(mountpoint); |
114 | 115 | if (isdigit(device[0])) { |
115 | | paranoid_free(device); |
| 116 | mr_free(device); |
116 | 117 | device = find_cdrom_device(FALSE); |
117 | 118 | } |
… |
… |
|
123 | 124 | dev = make_vn(device)); |
124 | 125 | if (!dev) { |
125 | | asprintf(&command, "Unable to mount ISO (make_vn(%s) failed)", |
| 126 | mr_asprintf(&command, "Unable to mount ISO (make_vn(%s) failed)", |
126 | 127 | device); |
127 | 128 | fatal_error(command); |
128 | 129 | } |
129 | | paranoid_free(device); |
| 130 | mr_free(device); |
130 | 131 | device = dev; |
131 | 132 | #endif |
… |
… |
|
137 | 138 | |
138 | 139 | #ifdef __FreeBSD__ |
139 | | asprintf(&command, "mount_cd9660 -r %s %s 2>> %s", |
| 140 | mr_asprintf(&command, "mount_cd9660 -r %s %s 2>> %s", |
140 | 141 | device, mountpoint, MONDO_LOGFILE); |
141 | 142 | #else |
142 | | asprintf(&command, "mount %s -o ro,loop -t iso9660 %s 2>> %s", |
| 143 | mr_asprintf(&command, "mount %s -o ro,loop -t iso9660 %s 2>> %s", |
143 | 144 | device, mountpoint, MONDO_LOGFILE); |
144 | 145 | #endif |
… |
… |
|
150 | 151 | retval = system(command); |
151 | 152 | log_msg(1, "system(%s) returned %d", command, retval); |
152 | | paranoid_free(command); |
| 153 | mr_free(command); |
153 | 154 | |
154 | 155 | if (retval == 0) { |
… |
… |
|
171 | 172 | bool is_this_a_ramdisk = FALSE; |
172 | 173 | |
173 | | asprintf(&tmp, where_is_root_mounted()); |
174 | | asprintf(&comment, "root is mounted at %s\n", tmp); |
| 174 | mr_asprintf(&tmp, where_is_root_mounted()); |
| 175 | mr_asprintf(&comment, "root is mounted at %s\n", tmp); |
175 | 176 | log_msg(0, comment); |
176 | | paranoid_free(comment); |
| 177 | mr_free(comment); |
177 | 178 | |
178 | 179 | log_msg(0, |
… |
… |
|
194 | 195 | } |
195 | 196 | #endif |
196 | | paranoid_free(tmp); |
| 197 | mr_free(tmp); |
197 | 198 | |
198 | 199 | if (is_this_a_ramdisk) { |
… |
… |
|
222 | 223 | char *output = NULL; |
223 | 224 | |
224 | | paranoid_free(output); |
| 225 | mr_free(output); |
225 | 226 | |
226 | 227 | switch (bt) { |
227 | 228 | case none: |
228 | | asprintf(&output, _("none")); |
| 229 | mr_asprintf(&output, _("none")); |
229 | 230 | break; |
230 | 231 | case iso: |
231 | | asprintf(&output, _("iso")); |
| 232 | mr_asprintf(&output, _("iso")); |
232 | 233 | break; |
233 | 234 | case cdr: |
234 | | asprintf(&output, _("cdr")); |
| 235 | mr_asprintf(&output, _("cdr")); |
235 | 236 | break; |
236 | 237 | case cdrw: |
237 | | asprintf(&output, _("cdrw")); |
| 238 | mr_asprintf(&output, _("cdrw")); |
238 | 239 | break; |
239 | 240 | case cdstream: |
240 | | asprintf(&output, _("cdstream")); |
| 241 | mr_asprintf(&output, _("cdstream")); |
241 | 242 | break; |
242 | 243 | case nfs: |
243 | | asprintf(&output, _("nfs")); |
| 244 | mr_asprintf(&output, _("nfs")); |
244 | 245 | break; |
245 | 246 | case tape: |
246 | | asprintf(&output, _("tape")); |
| 247 | mr_asprintf(&output, _("tape")); |
247 | 248 | break; |
248 | 249 | case udev: |
249 | | asprintf(&output, _("udev")); |
| 250 | mr_asprintf(&output, _("udev")); |
250 | 251 | break; |
251 | 252 | default: |
252 | | asprintf(&output, _("default")); |
| 253 | mr_asprintf(&output, _("default")); |
253 | 254 | } |
254 | 255 | return (output); |
… |
… |
|
272 | 273 | if (IS_THIS_A_STREAMING_BACKUP(g_backup_media_type) |
273 | 274 | && g_backup_media_type != udev) { |
274 | | asprintf(&command, "mt -f %s offline", dev); |
| 275 | mr_asprintf(&command, "mt -f %s offline", dev); |
275 | 276 | res1 = run_program_and_log_output(command, 1); |
276 | | paranoid_free(command); |
| 277 | mr_free(command); |
277 | 278 | } else { |
278 | 279 | res1 = 0; |
… |
… |
|
281 | 282 | #ifdef __FreeBSD__ |
282 | 283 | if (strstr(dev, "acd")) { |
283 | | asprintf(&command, "cdcontrol -f %s eject", dev); |
284 | | } else { |
285 | | asprintf(&command, "camcontrol eject `echo %s | sed 's|/dev/||'`", |
| 284 | mr_asprintf(&command, "cdcontrol -f %s eject", dev); |
| 285 | } else { |
| 286 | mr_asprintf(&command, "camcontrol eject `echo %s | sed 's|/dev/||'`", |
286 | 287 | dev); |
287 | 288 | } |
288 | 289 | #else |
289 | | asprintf(&command, "eject %s", dev); |
| 290 | mr_asprintf(&command, "eject %s", dev); |
290 | 291 | #endif |
291 | 292 | |
292 | 293 | log_msg(3, "Ejecting %s", dev); |
293 | 294 | res2 = run_program_and_log_output(command, 1); |
294 | | paranoid_free(command); |
| 295 | mr_free(command); |
295 | 296 | if (res1 && res2) { |
296 | 297 | return (1); |
… |
… |
|
313 | 314 | #ifdef __FreeBSD__ |
314 | 315 | if (strstr(dev, "acd")) { |
315 | | asprintf(&command, "cdcontrol -f %s close", dev); |
316 | | } else { |
317 | | asprintf(&command, "camcontrol load `echo %s | sed 's|/dev/||'`", |
| 316 | mr_asprintf(&command, "cdcontrol -f %s close", dev); |
| 317 | } else { |
| 318 | mr_asprintf(&command, "camcontrol load `echo %s | sed 's|/dev/||'`", |
318 | 319 | dev); |
319 | 320 | } |
320 | 321 | #else |
321 | | asprintf(&command, "eject -t %s", dev); |
| 322 | mr_asprintf(&command, "eject -t %s", dev); |
322 | 323 | #endif |
323 | 324 | i = run_program_and_log_output(command, FALSE); |
324 | | paranoid_free(command); |
| 325 | mr_free(command); |
325 | 326 | return (i); |
326 | 327 | } |
… |
… |
|
341 | 342 | assert_string_is_neither_NULL_nor_zerolength(device); |
342 | 343 | |
343 | | asprintf(&tmp, "ls %s > /dev/null 2> /dev/null", device); |
| 344 | mr_asprintf(&tmp, "ls %s > /dev/null 2> /dev/null", device); |
344 | 345 | |
345 | 346 | if (system(tmp)) { |
… |
… |
|
348 | 349 | ret = TRUE; |
349 | 350 | } |
350 | | paranoid_free(tmp); |
| 351 | mr_free(tmp); |
351 | 352 | return(ret); |
352 | 353 | } |
… |
… |
|
398 | 399 | #ifdef __FreeBSD__ |
399 | 400 | // We assume here that this is running from mondorestore. (It is.) |
400 | | asprintf(&program, "ls %s >/dev/null 2>&1", drive); |
| 401 | mr_asprintf(&program, "ls %s >/dev/null 2>&1", drive); |
401 | 402 | res = system(program); |
402 | | paranoid_free(program); |
| 403 | mr_free(program); |
403 | 404 | return(res); |
404 | 405 | #endif |
405 | 406 | |
406 | | asprintf(&program, "parted2fdisk -l %s 2> /dev/null", drive); |
| 407 | mr_asprintf(&program, "parted2fdisk -l %s 2> /dev/null", drive); |
407 | 408 | fin = popen(program, "r"); |
408 | 409 | if (!fin) { |
409 | 410 | log_it("program=%s", program); |
410 | 411 | log_OS_error("Cannot popen-in program"); |
411 | | paranoid_free(program); |
| 412 | mr_free(program); |
412 | 413 | return (0); |
413 | 414 | } |
414 | | paranoid_free(program); |
| 415 | mr_free(program); |
415 | 416 | |
416 | 417 | searchstr = build_partition_name(drive, partno); |
417 | | asprintf(&tmp, "%s ", searchstr); |
418 | | paranoid_free(searchstr); |
419 | | |
420 | | for (res = 0; !res && getline(&incoming, &n, fin);) { |
| 418 | mr_asprintf(&tmp, "%s ", searchstr); |
| 419 | mr_free(searchstr); |
| 420 | |
| 421 | for (res = 0; !res ;) { |
| 422 | mr_getline(&incoming, &n, fin); |
421 | 423 | if (strstr(incoming, tmp)) { |
422 | 424 | res = 1; |
423 | 425 | } |
424 | 426 | } |
425 | | paranoid_free(incoming); |
| 427 | mr_free(incoming); |
426 | 428 | |
427 | 429 | if (pclose(fin)) { |
428 | 430 | log_OS_error("Cannot pclose fin"); |
429 | 431 | } |
430 | | paranoid_free(tmp); |
| 432 | mr_free(tmp); |
431 | 433 | return (res); |
432 | 434 | } |
… |
… |
|
450 | 452 | assert_string_is_neither_NULL_nor_zerolength(str); |
451 | 453 | |
452 | | asprintf(&command, |
| 454 | mr_asprintf(&command, |
453 | 455 | "dd if=%s bs=446 count=1 2> /dev/null | strings | grep \"%s\" > /dev/null 2> /dev/null", |
454 | 456 | dev, str); |
455 | 457 | ret = system(command); |
456 | | paranoid_free(command); |
| 458 | mr_free(command); |
457 | 459 | if (ret) { |
458 | 460 | return (FALSE); |
… |
… |
|
477 | 479 | int ret; |
478 | 480 | |
479 | | asprintf(&command, |
| 481 | mr_asprintf(&command, |
480 | 482 | "dd if=%s bs=512 count=%i 2> /dev/null | strings | grep \"%s\" > /dev/null 2> /dev/null", |
481 | 483 | dev, n, str); |
482 | 484 | ret = system(command); |
483 | | paranoid_free(command); |
| 485 | mr_free(command); |
484 | 486 | |
485 | 487 | if (ret) { |
… |
… |
|
514 | 516 | if (g_backup_media_type == dvd) { |
515 | 517 | if (g_dvd_drive_is_here != NULL) { |
516 | | asprintf(&dev, g_dvd_drive_is_here); |
| 518 | mr_asprintf(&dev, g_dvd_drive_is_here); |
517 | 519 | } else { |
518 | 520 | dev = find_dvd_device(); |
… |
… |
|
520 | 522 | } else { |
521 | 523 | if (g_cdrom_drive_is_here != NULL) { |
522 | | asprintf(&dev, g_cdrom_drive_is_here); |
| 524 | mr_asprintf(&dev, g_cdrom_drive_is_here); |
523 | 525 | } else { |
524 | 526 | // find_cdrom_device allocates the string |
… |
… |
|
532 | 534 | |
533 | 535 | if ((dev == NULL) || (! mount_CDROM_here(dev, mountpoint))) { |
534 | | paranoid_free(dev); |
| 536 | mr_free(dev); |
535 | 537 | if (!popup_and_get_string |
536 | 538 | (_("CD-ROM device"), _("Please enter your CD-ROM's /dev device"), dev)) { |
… |
… |
|
545 | 547 | log_msg(1, _("mount succeeded with %s"), dev); |
546 | 548 | } |
547 | | paranoid_free(dev); |
| 549 | mr_free(dev); |
548 | 550 | return(res); |
549 | 551 | } |
… |
… |
|
565 | 567 | |
566 | 568 | if (g_cdrw_drive_is_here != NULL) { |
567 | | asprintf(&cdrw_device, g_cdrw_drive_is_here); |
| 569 | mr_asprintf(&cdrw_device, g_cdrw_drive_is_here); |
568 | 570 | log_msg(3, "Been there, done that. Returning %s", cdrw_device); |
569 | 571 | return(cdrw_device); |
… |
… |
|
577 | 579 | tmp = find_home_of_exe("cdrecord"); |
578 | 580 | if (tmp) { |
579 | | asprintf(&cdr_exe, "cdrecord"); |
580 | | } else { |
581 | | asprintf(&cdr_exe, "dvdrecord"); |
582 | | } |
583 | | paranoid_free(tmp); |
| 581 | mr_asprintf(&cdr_exe, "cdrecord"); |
| 582 | } else { |
| 583 | mr_asprintf(&cdr_exe, "dvdrecord"); |
| 584 | } |
| 585 | mr_free(tmp); |
584 | 586 | |
585 | 587 | tmp1 = find_home_of_exe(cdr_exe); |
586 | 588 | if (tmp1) { |
587 | | asprintf(&command, |
| 589 | mr_asprintf(&command, |
588 | 590 | "%s -scanbus 2> /dev/null | tr -s '\t' ' ' | grep \"[0-9]*,[0-9]*,[0-9]*\" | grep -v \"[0-9]*) \\*\" | grep CD | cut -d' ' -f2 | head -n1", |
589 | 591 | cdr_exe); |
590 | | asprintf(&tmp, call_program_and_get_last_line_of_output(command)); |
591 | | paranoid_free(command); |
592 | | } else { |
593 | | asprintf(&tmp, " "); |
594 | | } |
595 | | paranoid_free(tmp1); |
596 | | paranoid_free(cdr_exe); |
| 592 | mr_asprintf(&tmp, call_program_and_get_last_line_of_output(command)); |
| 593 | mr_free(command); |
| 594 | } else { |
| 595 | mr_asprintf(&tmp, " "); |
| 596 | } |
| 597 | mr_free(tmp1); |
| 598 | mr_free(cdr_exe); |
597 | 599 | |
598 | 600 | if (strlen(tmp) < 2) { |
599 | | paranoid_free(tmp); |
| 601 | mr_free(tmp); |
600 | 602 | return(NULL); |
601 | 603 | } else { |
602 | 604 | cdrw_device = tmp; |
603 | 605 | |
604 | | asprintf(&comment, "Found CDRW device - %s", cdrw_device); |
| 606 | mr_asprintf(&comment, "Found CDRW device - %s", cdrw_device); |
605 | 607 | log_it(comment); |
606 | | paranoid_free(comment); |
607 | | |
608 | | paranoid_free(g_cdrw_drive_is_here); |
609 | | asprintf(&g_cdrw_drive_is_here, cdrw_device); |
| 608 | mr_free(comment); |
| 609 | |
| 610 | mr_free(g_cdrw_drive_is_here); |
| 611 | mr_asprintf(&g_cdrw_drive_is_here, cdrw_device); |
610 | 612 | return(cdrw_device); |
611 | 613 | } |
… |
… |
|
649 | 651 | |
650 | 652 | if ((g_cdrom_drive_is_here != NULL) && !isdigit(g_cdrom_drive_is_here[0])) { |
651 | | asprintf(&output, g_cdrom_drive_is_here); |
| 653 | mr_asprintf(&output, g_cdrom_drive_is_here); |
652 | 654 | log_msg(3, "Been there, done that. Returning %s", output); |
653 | 655 | return(output); |
654 | 656 | } |
655 | 657 | if ((the_last_place_i_found_it != NULL) && !try_to_mount) { |
656 | | asprintf(&output, the_last_place_i_found_it); |
| 658 | mr_asprintf(&output, the_last_place_i_found_it); |
657 | 659 | log_msg(3, |
658 | 660 | "find_cdrom_device() --- returning last found location - '%s'", |
… |
… |
|
663 | 665 | tmp = find_home_of_exe("cdrecord"); |
664 | 666 | if (tmp) { |
665 | | asprintf(&cdr_exe, "cdrecord"); |
666 | | } else { |
667 | | asprintf(&cdr_exe, "dvdrecord"); |
668 | | } |
669 | | paranoid_free(tmp); |
| 667 | mr_asprintf(&cdr_exe, "cdrecord"); |
| 668 | } else { |
| 669 | mr_asprintf(&cdr_exe, "dvdrecord"); |
| 670 | } |
| 671 | mr_free(tmp); |
670 | 672 | |
671 | 673 | tmp = find_home_of_exe(cdr_exe); |
672 | 674 | if (!tmp) { |
673 | | asprintf(&output, "/dev/cdrom"); |
| 675 | mr_asprintf(&output, "/dev/cdrom"); |
674 | 676 | log_msg(4, "Can't find cdrecord; assuming %s", output); |
675 | 677 | if (!does_device_exist(output)) { |
676 | 678 | log_msg(4, "That didn't work. Sorry."); |
677 | | paranoid_free(cdr_exe); |
678 | | paranoid_free(output); |
| 679 | mr_free(cdr_exe); |
| 680 | mr_free(output); |
679 | 681 | return(NULL); |
680 | 682 | } else { |
681 | | paranoid_free(cdr_exe); |
| 683 | mr_free(cdr_exe); |
682 | 684 | return(output); |
683 | 685 | } |
684 | 686 | } |
685 | | paranoid_free(tmp); |
686 | | |
687 | | asprintf(&command, "%s -scanbus 2> /dev/null", cdr_exe); |
| 687 | mr_free(tmp); |
| 688 | |
| 689 | mr_asprintf(&command, "%s -scanbus 2> /dev/null", cdr_exe); |
688 | 690 | fin = popen(command, "r"); |
689 | 691 | if (!fin) { |
690 | 692 | log_msg(4, "command=%s", command); |
691 | 693 | log_OS_error("Cannot popen command"); |
692 | | paranoid_free(cdr_exe); |
693 | | paranoid_free(command); |
| 694 | mr_free(cdr_exe); |
| 695 | mr_free(command); |
694 | 696 | return (NULL); |
695 | 697 | } |
696 | | paranoid_free(command); |
697 | | |
698 | | for (getline(&tmp, &n, fin); !feof(fin); |
699 | | getline(&tmp, &n, fin)) { |
| 698 | mr_free(command); |
| 699 | |
| 700 | for (mr_getline(&tmp, &n, fin); !feof(fin); |
| 701 | mr_getline(&tmp, &n, fin)) { |
700 | 702 | p = strchr(tmp, '\''); |
701 | 703 | if (p) { |
… |
… |
|
713 | 715 | *q = '\0'; |
714 | 716 | #ifndef __FreeBSD__ |
715 | | paranoid_free(phrase_two); |
716 | | asprintf(&phrase_two, p); |
| 717 | mr_free(phrase_two); |
| 718 | mr_asprintf(&phrase_two, p); |
717 | 719 | #endif |
718 | 720 | } |
… |
… |
|
722 | 724 | } |
723 | 725 | paranoid_pclose(fin); |
724 | | paranoid_free(tmp); |
| 726 | mr_free(tmp); |
725 | 727 | tmp = NULL; |
726 | 728 | n = 0; |
… |
… |
|
730 | 732 | log_msg(4, "Not running phase two. String is empty."); |
731 | 733 | } else { |
732 | | asprintf(&command, "dmesg | grep \"%s\" 2> /dev/null", phrase_two); |
| 734 | mr_asprintf(&command, "dmesg | grep \"%s\" 2> /dev/null", phrase_two); |
733 | 735 | fin = popen(command, "r"); |
734 | 736 | if (!fin) { |
735 | 737 | log_msg(4, "Cannot run 2nd command - non-fatal, fortunately"); |
736 | 738 | } else { |
737 | | for (getline(&tmp, &n, fin); !feof(fin); |
738 | | getline(&tmp, &n, fin)) { |
| 739 | for (mr_getline(&tmp, &n, fin); !feof(fin); |
| 740 | mr_getline(&tmp, &n, fin)) { |
739 | 741 | log_msg(5, "--> '%s'", tmp); |
740 | 742 | if (tmp[0] != ' ' && tmp[1] != ' ') { |
… |
… |
|
743 | 745 | *p = '\0'; |
744 | 746 | if (strstr(tmp, "DVD")) { |
745 | | paranoid_free(dvd_last_resort); |
746 | | asprintf(&dvd_last_resort, "/dev/%s", tmp); |
| 747 | mr_free(dvd_last_resort); |
| 748 | mr_asprintf(&dvd_last_resort, "/dev/%s", tmp); |
747 | 749 | log_msg(4, |
748 | 750 | "Ignoring '%s' because it's a DVD drive", |
749 | 751 | tmp); |
750 | 752 | } else { |
751 | | asprintf(&output, "/dev/%s", tmp); |
| 753 | mr_asprintf(&output, "/dev/%s", tmp); |
752 | 754 | found_it = TRUE; |
753 | 755 | } |
… |
… |
|
755 | 757 | } |
756 | 758 | } |
757 | | paranoid_free(tmp); |
| 759 | mr_free(tmp); |
758 | 760 | paranoid_pclose(fin); |
759 | 761 | } |
760 | | paranoid_free(command); |
761 | | } |
762 | | paranoid_free(phrase_two); |
| 762 | mr_free(command); |
| 763 | } |
| 764 | mr_free(phrase_two); |
763 | 765 | |
764 | 766 | #endif |
… |
… |
|
789 | 791 | "/dev/cd1"))) |
790 | 792 | { |
791 | | paranoid_free(cdr_exe); |
| 793 | mr_free(cdr_exe); |
792 | 794 | return(NULL); |
793 | 795 | } |
… |
… |
|
804 | 806 | log_msg(4, "Well, I'll use the DVD - %s - as a last resort", |
805 | 807 | dvd_last_resort); |
806 | | paranoid_free(output); |
807 | | asprintf(&output, dvd_last_resort); |
| 808 | mr_free(output); |
| 809 | mr_asprintf(&output, dvd_last_resort); |
808 | 810 | found_it = TRUE; |
809 | 811 | } |
810 | 812 | } |
811 | | paranoid_free(dvd_last_resort); |
| 813 | mr_free(dvd_last_resort); |
812 | 814 | |
813 | 815 | if (found_it) { |
814 | | asprintf(&tmp, "grep \"%s=ide-scsi\" /proc/cmdline &> /dev/null", |
| 816 | mr_asprintf(&tmp, "grep \"%s=ide-scsi\" /proc/cmdline &> /dev/null", |
815 | 817 | strrchr(output, '/') + 1); |
816 | 818 | if (system(tmp) == 0) { |
… |
… |
|
819 | 821 | output); |
820 | 822 | found_it = FALSE; |
821 | | paranoid_free(output); |
822 | | } |
823 | | paranoid_free(tmp); |
| 823 | mr_free(output); |
| 824 | } |
| 825 | mr_free(tmp); |
824 | 826 | } |
825 | 827 | |
… |
… |
|
829 | 831 | log_msg(4, "OK, I was wrong, I haven't found it... yet."); |
830 | 832 | found_it = FALSE; |
831 | | paranoid_free(output); |
| 833 | mr_free(output); |
832 | 834 | } |
833 | 835 | } |
… |
… |
|
862 | 864 | g_cdrw_drive_is_here))) |
863 | 865 | { |
864 | | paranoid_free(cdr_exe); |
| 866 | mr_free(cdr_exe); |
865 | 867 | return(NULL); |
866 | 868 | } |
… |
… |
|
875 | 877 | #endif |
876 | 878 | |
877 | | asprintf(&mountpoint, "/tmp/cd.%d", (int) (random() % 32767)); |
| 879 | mr_asprintf(&mountpoint, "/tmp/cd.%d", (int) (random() % 32767)); |
878 | 880 | make_hole_for_dir(mountpoint); |
879 | 881 | |
… |
… |
|
882 | 884 | log_msg(4, "[Cardigans] I've changed my mind"); |
883 | 885 | found_it = FALSE; |
884 | | paranoid_free(output); |
| 886 | mr_free(output); |
885 | 887 | } else { |
886 | | asprintf(&tmp, "%s/archives", mountpoint); |
| 888 | mr_asprintf(&tmp, "%s/archives", mountpoint); |
887 | 889 | if (!does_file_exist(tmp)) { |
888 | 890 | log_msg(4, "[Cardigans] I'll take it back"); |
889 | 891 | found_it = FALSE; |
890 | | paranoid_free(output); |
| 892 | mr_free(output); |
891 | 893 | } else { |
892 | | asprintf(&command, "umount %s", output); |
| 894 | mr_asprintf(&command, "umount %s", output); |
893 | 895 | paranoid_system(command); |
894 | | paranoid_free(command); |
| 896 | mr_free(command); |
895 | 897 | log_msg(4, "I'm confident the Mondo CD is in %s", output); |
896 | 898 | } |
897 | | paranoid_free(tmp); |
| 899 | mr_free(tmp); |
898 | 900 | } |
899 | 901 | } |
900 | 902 | unlink(mountpoint); |
901 | | paranoid_free(mountpoint); |
| 903 | mr_free(mountpoint); |
902 | 904 | |
903 | 905 | if (found_it) { |
904 | 906 | if (!does_file_exist(output)) { |
905 | 907 | log_msg(3, "I still haven't found it."); |
906 | | paranoid_free(output); |
| 908 | mr_free(output); |
907 | 909 | return(NULL); |
908 | 910 | } |
909 | 911 | log_msg(3, "(find_cdrom_device) --> '%s'", output); |
910 | | asprintf(&the_last_place_i_found_it, output); |
911 | | paranoid_free(g_cdrom_drive_is_here); |
912 | | asprintf(&g_cdrom_drive_is_here, output); |
| 912 | mr_asprintf(&the_last_place_i_found_it, output); |
| 913 | mr_free(g_cdrom_drive_is_here); |
| 914 | mr_asprintf(&g_cdrom_drive_is_here, output); |
913 | 915 | return(output); |
914 | 916 | } |
915 | 917 | |
916 | | asprintf(&command, |
| 918 | mr_asprintf(&command, |
917 | 919 | "%s -scanbus | grep \"[0-9],[0-9],[0-9]\" | grep \"[D|C][V|D]\" | grep -n \"\" | grep \"%s\" | cut -d':' -f2", |
918 | 920 | cdr_exe, g_cdrw_drive_is_here); |
919 | | paranoid_free(cdr_exe); |
| 921 | mr_free(cdr_exe); |
920 | 922 | |
921 | 923 | log_msg(1, "command=%s", command); |
922 | | asprintf(&tmp, call_program_and_get_last_line_of_output(command)); |
923 | | paranoid_free(command); |
| 924 | mr_asprintf(&tmp, call_program_and_get_last_line_of_output(command)); |
| 925 | mr_free(command); |
924 | 926 | |
925 | 927 | if (tmp[0]) { |
… |
… |
|
927 | 929 | log_msg(4, "Finally found it at %s", output); |
928 | 930 | } else { |
929 | | paranoid_free(tmp); |
930 | | paranoid_free(output); |
| 931 | mr_free(tmp); |
| 932 | mr_free(output); |
931 | 933 | log_msg(4, "Still couldn't find it."); |
932 | 934 | } |
… |
… |
|
942 | 944 | |
943 | 945 | if (g_dvd_drive_is_here != NULL) { |
944 | | asprintf(&output, g_dvd_drive_is_here); |
| 946 | mr_asprintf(&output, g_dvd_drive_is_here); |
945 | 947 | log_msg(3, "Been there, done that. Returning %s", output); |
946 | 948 | return (output); |
947 | 949 | } |
948 | 950 | |
949 | | asprintf(&tmp, call_program_and_get_last_line_of_output |
| 951 | mr_asprintf(&tmp, call_program_and_get_last_line_of_output |
950 | 952 | ("dvdrecord -scanbus 2> /dev/null | grep \") '\" | grep -n \"\" | grep DVD | cut -d':' -f1") |
951 | 953 | ); |
952 | 954 | log_msg(5, "tmp = '%s'", tmp); |
953 | 955 | if (!tmp[0]) { |
954 | | paranoid_free(tmp); |
955 | | asprintf(&tmp, call_program_and_get_last_line_of_output |
| 956 | mr_free(tmp); |
| 957 | mr_asprintf(&tmp, call_program_and_get_last_line_of_output |
956 | 958 | ("cdrecord -scanbus 2> /dev/null | grep \") '\" | grep -n \"\" | grep DVD | cut -d':' -f1") |
957 | 959 | ); |
… |
… |
|
960 | 962 | devno = atoi(tmp) - 1; |
961 | 963 | } |
962 | | paranoid_free(tmp); |
| 964 | mr_free(tmp); |
963 | 965 | |
964 | 966 | if (devno >= 0) { |
965 | 967 | retval = 0; |
966 | | asprintf(&output, "/dev/scd%d", devno); |
967 | | paranoid_free(g_dvd_drive_is_here); |
968 | | asprintf(&g_dvd_drive_is_here, output); |
| 968 | mr_asprintf(&output, "/dev/scd%d", devno); |
| 969 | mr_free(g_dvd_drive_is_here); |
| 970 | mr_asprintf(&g_dvd_drive_is_here, output); |
969 | 971 | log_msg(2, "I think DVD is at %s", output); |
970 | 972 | } else { |
… |
… |
|
1092 | 1094 | assert_string_is_neither_NULL_nor_zerolength(format); |
1093 | 1095 | |
1094 | | asprintf(&format_sz, "%s ", format); |
| 1096 | mr_asprintf(&format_sz, "%s ", format); |
1095 | 1097 | |
1096 | 1098 | #ifdef __FreeBSD__ |
1097 | | asprintf(&command, |
| 1099 | mr_asprintf(&command, |
1098 | 1100 | "lsvfs | tr -s '\t' ' ' | grep -v Filesys | grep -v -- -- | cut -d' ' -f1 | tr -s '\n' ' '"); |
1099 | 1101 | #else |
1100 | | asprintf(&command, |
| 1102 | mr_asprintf(&command, |
1101 | 1103 | "grep -v nodev /proc/filesystems | tr -s '\t' ' ' | cut -d' ' -f2 | tr -s '\n' ' '"); |
1102 | 1104 | #endif |
1103 | 1105 | |
1104 | 1106 | pin = popen(command, "r"); |
1105 | | paranoid_free(command); |
| 1107 | mr_free(command); |
1106 | 1108 | |
1107 | 1109 | if (!pin) { |
… |
… |
|
1109 | 1111 | retval = FALSE; |
1110 | 1112 | } else { |
1111 | | getline(&good_formats, &n , pin); |
| 1113 | mr_getline(&good_formats, &n , pin); |
1112 | 1114 | if (pclose(pin)) { |
1113 | 1115 | log_OS_error("Cannot pclose good formats"); |
… |
… |
|
1115 | 1117 | strip_spaces(good_formats); |
1116 | 1118 | // " ntfs 7 " -- um, cheating much? :) |
1117 | | asprintf(&tmp, " %s swap lvm raid ntfs 7 ",good_formats); |
1118 | | paranoid_free(good_formats); |
| 1119 | mr_asprintf(&tmp, " %s swap lvm raid ntfs 7 ",good_formats); |
| 1120 | mr_free(good_formats); |
1119 | 1121 | good_formats = tmp; |
1120 | 1122 | |
… |
… |
|
1124 | 1126 | retval = FALSE; |
1125 | 1127 | } |
1126 | | paranoid_free(good_formats); |
1127 | | } |
1128 | | paranoid_free(format_sz); |
| 1128 | mr_free(good_formats); |
| 1129 | } |
| 1130 | mr_free(format_sz); |
1129 | 1131 | return (retval); |
1130 | 1132 | } |
… |
… |
|
1164 | 1166 | log_msg(1, "%s needs to have a '/' prefixed - I'll do it", |
1165 | 1167 | device_raw); |
1166 | | asprintf(&tmp, "/%s", device_raw); |
1167 | | } else { |
1168 | | asprintf(&tmp, device_raw); |
| 1168 | mr_asprintf(&tmp, "/%s", device_raw); |
| 1169 | } else { |
| 1170 | mr_asprintf(&tmp, device_raw); |
1169 | 1171 | } |
1170 | 1172 | log_msg(1, "Is %s mounted?", tmp); |
… |
… |
|
1174 | 1176 | return (FALSE); |
1175 | 1177 | } |
1176 | | asprintf(&device_with_tab, "%s\t", tmp); |
1177 | | asprintf(&device_with_space, "%s ", tmp); |
1178 | | paranoid_free(tmp); |
| 1178 | mr_asprintf(&device_with_tab, "%s\t", tmp); |
| 1179 | mr_asprintf(&device_with_space, "%s ", tmp); |
| 1180 | mr_free(tmp); |
1179 | 1181 | |
1180 | 1182 | if (!(fin = popen("mount", "r"))) { |
… |
… |
|
1182 | 1184 | return (FALSE); |
1183 | 1185 | } |
1184 | | for (getline(&incoming, &n, fin); !feof(fin); |
1185 | | getline(&incoming, &n, fin)) { |
| 1186 | for (mr_getline(&incoming, &n, fin); !feof(fin); |
| 1187 | mr_getline(&incoming, &n, fin)) { |
1186 | 1188 | if (strstr(incoming, device_with_space) //> incoming |
1187 | 1189 | || strstr(incoming, device_with_tab)) // > incoming) |
… |
… |
|
1191 | 1193 | } |
1192 | 1194 | } |
1193 | | paranoid_free(incoming); |
1194 | | paranoid_free(device_with_tab); |
| 1195 | mr_free(incoming); |
| 1196 | mr_free(device_with_tab); |
1195 | 1197 | paranoid_pclose(fin); |
1196 | 1198 | |
1197 | | asprintf(&tmp, "%s | grep -w \"%s\" > /dev/null 2> /dev/null", |
| 1199 | mr_asprintf(&tmp, "%s | grep -w \"%s\" > /dev/null 2> /dev/null", |
1198 | 1200 | SWAPLIST_COMMAND, device_with_space); |
1199 | | paranoid_free(device_with_space); |
| 1201 | mr_free(device_with_space); |
1200 | 1202 | |
1201 | 1203 | log_msg(4, "tmp (command) = '%s'", tmp); |
1202 | 1204 | if (!system(tmp)) { |
1203 | | paranoid_free(tmp); |
| 1205 | mr_free(tmp); |
1204 | 1206 | return(TRUE); |
1205 | 1207 | } |
1206 | | paranoid_free(tmp); |
| 1208 | mr_free(tmp); |
1207 | 1209 | return (FALSE); |
1208 | 1210 | } |
… |
… |
|
1228 | 1230 | ("/sbin/sysctl -n kern.osreldate")) < 500000) { |
1229 | 1231 | do { |
1230 | | paranoid_free(mddevice); |
1231 | | asprintf(&mddevice, "vn%ic", vndev++); |
1232 | | |
1233 | | paranoid_free(command); |
1234 | | asprintf(&command, "vnconfig %s %s", mddevice, fname); |
| 1232 | mr_free(mddevice); |
| 1233 | mr_asprintf(&mddevice, "vn%ic", vndev++); |
| 1234 | |
| 1235 | mr_free(command); |
| 1236 | mr_asprintf(&command, "vnconfig %s %s", mddevice, fname); |
1235 | 1237 | |
1236 | 1238 | if (vndev > 10) { |
1237 | | paranoid_free(command); |
1238 | | paranoid_free(mddevice); |
| 1239 | mr_free(command); |
| 1240 | mr_free(mddevice); |
1239 | 1241 | return NULL; |
1240 | 1242 | } |
1241 | 1243 | } |
1242 | 1244 | while (system(command)); |
1243 | | paranoid_free(command); |
1244 | | } else { |
1245 | | asprintf(&command, "mdconfig -a -t vnode -f %s", fname); |
1246 | | asprintf(&mddevice, call_program_and_get_last_line_of_output(command)); |
1247 | | paranoid_free(command); |
| 1245 | mr_free(command); |
| 1246 | } else { |
| 1247 | mr_asprintf(&command, "mdconfig -a -t vnode -f %s", fname); |
| 1248 | mr_asprintf(&mddevice, call_program_and_get_last_line_of_output(command)); |
| 1249 | mr_free(command); |
1248 | 1250 | |
1249 | 1251 | if (!strstr(mddevice, "md")) { |
1250 | | paranoid_free(mddevice); |
| 1252 | mr_free(mddevice); |
1251 | 1253 | return NULL; |
1252 | 1254 | } |
1253 | 1255 | } |
1254 | | asprintf(&device, "/dev/%s", mddevice); |
1255 | | paranoid_free(mddevice); |
| 1256 | mr_asprintf(&device, "/dev/%s", mddevice); |
| 1257 | mr_free(mddevice); |
1256 | 1258 | return(device); |
1257 | 1259 | } |
… |
… |
|
1278 | 1280 | (call_program_and_get_last_line_of_output |
1279 | 1281 | ("/sbin/sysctl -n kern.osreldate")) < 500000) { |
1280 | | asprintf(&command, "vnconfig -d %s", dname); |
| 1282 | mr_asprintf(&command, "vnconfig -d %s", dname); |
1281 | 1283 | ret = system(command); |
1282 | | paranoid_free(command); |
| 1284 | mr_free(command); |
1283 | 1285 | return(ret); |
1284 | 1286 | } else { |
1285 | | asprintf(&command, "mdconfig -d -u %s", dname); |
| 1287 | mr_asprintf(&command, "mdconfig -d -u %s", dname); |
1286 | 1288 | ret = system(command); |
1287 | | paranoid_free(command); |
| 1289 | mr_free(command); |
1288 | 1290 | return(ret); |
1289 | 1291 | } |
… |
… |
|
1327 | 1329 | } |
1328 | 1330 | |
1329 | | asprintf(&tmp, "mkdir -p " MNT_CDROM); |
| 1331 | mr_asprintf(&tmp, "mkdir -p " MNT_CDROM); |
1330 | 1332 | run_program_and_log_output(tmp, 5); |
1331 | | paranoid_free(tmp); |
| 1333 | mr_free(tmp); |
1332 | 1334 | |
1333 | 1335 | if (g_ISO_restore_mode || bkpinfo->backup_media_type == iso |
… |
… |
|
1341 | 1343 | } |
1342 | 1344 | system("mkdir -p /tmp/isodir &> /dev/null"); |
1343 | | asprintf(&tmp, "%s/%s/%s-%d.iso", bkpinfo->isodir, |
| 1345 | mr_asprintf(&tmp, "%s/%s/%s-%d.iso", bkpinfo->isodir, |
1344 | 1346 | bkpinfo->nfs_remote_dir, bkpinfo->prefix, |
1345 | 1347 | cd_number_i_want); |
1346 | 1348 | if (!does_file_exist(tmp)) { |
1347 | | paranoid_free(tmp); |
1348 | | asprintf(&tmp, "/tmp/isodir/%s/%s-%d.iso", |
| 1349 | mr_free(tmp); |
| 1350 | mr_asprintf(&tmp, "/tmp/isodir/%s/%s-%d.iso", |
1349 | 1351 | bkpinfo->nfs_remote_dir, bkpinfo->prefix, |
1350 | 1352 | cd_number_i_want); |
… |
… |
|
1353 | 1355 | "FIXME - hacking bkpinfo->isodir from '%s' to /tmp/isodir", |
1354 | 1356 | bkpinfo->isodir); |
1355 | | paranoid_alloc(bkpinfo->isodir, "/tmp/isodir"); |
| 1357 | mr_allocstr(bkpinfo->isodir, "/tmp/isodir"); |
1356 | 1358 | } |
1357 | 1359 | } |
… |
… |
|
1360 | 1362 | fatal_error("Mommy!"); |
1361 | 1363 | } |
1362 | | paranoid_free(tmp); |
| 1364 | mr_free(tmp); |
1363 | 1365 | } |
1364 | 1366 | if ((res = what_number_cd_is_this(bkpinfo)) != cd_number_i_want) { |
1365 | 1367 | log_msg(3, "Currently, we hold %d but we want %d", res, |
1366 | 1368 | cd_number_i_want); |
1367 | | asprintf(&tmp, "Insisting on %s #%d", |
| 1369 | mr_asprintf(&tmp, "Insisting on %s #%d", |
1368 | 1370 | bkpinfo->backup_media_string, |
1369 | 1371 | cd_number_i_want); |
1370 | | asprintf(&request, "Please insert %s #%d and press Enter.", |
| 1372 | mr_asprintf(&request, "Please insert %s #%d and press Enter.", |
1371 | 1373 | bkpinfo->backup_media_string, |
1372 | 1374 | cd_number_i_want); |
1373 | 1375 | log_msg(3, tmp); |
1374 | | paranoid_free(tmp); |
| 1376 | mr_free(tmp); |
1375 | 1377 | |
1376 | 1378 | while (what_number_cd_is_this(bkpinfo) != cd_number_i_want) { |
… |
… |
|
1399 | 1401 | sync(); |
1400 | 1402 | } |
1401 | | paranoid_free(request); |
| 1403 | mr_free(request); |
1402 | 1404 | |
1403 | 1405 | log_msg(1, "Thankyou. Proceeding..."); |
… |
… |
|
1494 | 1496 | finish(1); |
1495 | 1497 | } |
1496 | | asprintf(&comment, _("What speed is your %s (re)writer?"), |
| 1498 | mr_asprintf(&comment, _("What speed is your %s (re)writer?"), |
1497 | 1499 | bkpinfo->backup_media_string); |
1498 | 1500 | if (bkpinfo->backup_media_type == dvd) { |
1499 | | paranoid_free(bkpinfo->media_device); |
| 1501 | mr_free(bkpinfo->media_device); |
1500 | 1502 | bkpinfo->media_device = find_dvd_device(); |
1501 | | asprintf(&tmp, "1"); |
1502 | | asprintf(&sz_size, "%d", DEFAULT_DVD_DISK_SIZE); // 4.7 salesman's GB = 4.482 real GB = 4582 MB |
| 1503 | mr_asprintf(&tmp, "1"); |
| 1504 | mr_asprintf(&sz_size, "%d", DEFAULT_DVD_DISK_SIZE); // 4.7 salesman's GB = 4.482 real GB = 4582 MB |
1503 | 1505 | log_msg(1, "Setting to DVD defaults"); |
1504 | 1506 | } else { |
1505 | | paranoid_alloc(bkpinfo->media_device,VANILLA_SCSI_CDROM ); |
1506 | | asprintf(&tmp, "4"); |
1507 | | asprintf(&sz_size, "650"); |
| 1507 | mr_allocstr(bkpinfo->media_device,VANILLA_SCSI_CDROM ); |
| 1508 | mr_asprintf(&tmp, "4"); |
| 1509 | mr_asprintf(&sz_size, "650"); |
1508 | 1510 | log_msg(1, "Setting to CD defaults"); |
1509 | 1511 | } |
… |
… |
|
1514 | 1516 | } |
1515 | 1517 | } |
1516 | | paranoid_free(comment); |
| 1518 | mr_free(comment); |
1517 | 1519 | |
1518 | 1520 | bkpinfo->cdrw_speed = atoi(tmp); // if DVD then this shouldn't ever be used anyway :) |
1519 | | paranoid_free(tmp); |
1520 | | |
1521 | | asprintf(&comment, |
| 1521 | mr_free(tmp); |
| 1522 | |
| 1523 | mr_asprintf(&comment, |
1522 | 1524 | _("How much data (in Megabytes) will each %s store?"), |
1523 | 1525 | bkpinfo->backup_media_string); |
… |
… |
|
1527 | 1529 | finish(1); |
1528 | 1530 | } |
1529 | | paranoid_free(comment); |
| 1531 | mr_free(comment); |
1530 | 1532 | |
1531 | 1533 | for (i = 0; i <= MAX_NOOF_MEDIA; i++) { |
1532 | 1534 | bkpinfo->media_size[i] = atoi(sz_size); |
1533 | 1535 | } |
1534 | | paranoid_free(sz_size); |
| 1536 | mr_free(sz_size); |
1535 | 1537 | |
1536 | 1538 | if (bkpinfo->media_size[0] <= 0) { |
… |
… |
|
1541 | 1543 | case cdstream: |
1542 | 1544 | if (bkpinfo->disaster_recovery) { |
1543 | | paranoid_alloc(bkpinfo->media_device, "/dev/cdrom"); |
| 1545 | mr_allocstr(bkpinfo->media_device, "/dev/cdrom"); |
1544 | 1546 | log_msg(2, "CD-ROM device assumed to be at %s", |
1545 | 1547 | bkpinfo->media_device); |
… |
… |
|
1547 | 1549 | || bkpinfo->backup_media_type == dvd) { |
1548 | 1550 | if (bkpinfo->media_device == NULL) { |
1549 | | asprintf(&bkpinfo->media_device, "/dev/cdrom"); |
| 1551 | mr_asprintf(&bkpinfo->media_device, "/dev/cdrom"); |
1550 | 1552 | } // just for the heck of it :) |
1551 | 1553 | log_msg(1, "bkpinfo->media_device = %s", |
… |
… |
|
1554 | 1556 | if ((bkpinfo->backup_media_type == dvd) |
1555 | 1557 | || (tmp != NULL)) { |
1556 | | paranoid_alloc(bkpinfo->media_device, tmp); |
| 1558 | mr_allocstr(bkpinfo->media_device, tmp); |
1557 | 1559 | log_msg(1, "bkpinfo->media_device = %s", |
1558 | 1560 | bkpinfo->media_device); |
1559 | | asprintf(&comment, |
| 1561 | mr_asprintf(&comment, |
1560 | 1562 | _("Please specify your %s drive's /dev entry"), |
1561 | 1563 | bkpinfo->backup_media_string); |
… |
… |
|
1565 | 1567 | finish(1); |
1566 | 1568 | } |
1567 | | paranoid_free(comment); |
1568 | | } |
1569 | | paranoid_free(tmp); |
| 1569 | mr_free(comment); |
| 1570 | } |
| 1571 | mr_free(tmp); |
1570 | 1572 | |
1571 | 1573 | log_msg(2, "%s device found at %s", |
… |
… |
|
1575 | 1577 | bkpinfo->media_device = find_cdrw_device(); |
1576 | 1578 | if (bkpinfo->media_device != NULL) { |
1577 | | asprintf(&tmp, |
| 1579 | mr_asprintf(&tmp, |
1578 | 1580 | _("I think I've found your %s burner at SCSI node %s; am I right on the money? Say no if you have an IDE burner and you are running a 2.6 kernel. Instead, specify the IDE burner's /dev address at the next screen."), |
1579 | 1581 | bkpinfo->backup_media_string, |
1580 | 1582 | bkpinfo->media_device); |
1581 | 1583 | if (!ask_me_yes_or_no(tmp)) { |
1582 | | paranoid_free(bkpinfo->media_device); |
| 1584 | mr_free(bkpinfo->media_device); |
1583 | 1585 | } |
1584 | | paranoid_free(tmp); |
| 1586 | mr_free(tmp); |
1585 | 1587 | } else { |
1586 | 1588 | if (g_kernel_version < 2.6) { |
… |
… |
|
1613 | 1615 | case tape: |
1614 | 1616 | |
1615 | | paranoid_free(bkpinfo->media_device); |
| 1617 | mr_free(bkpinfo->media_device); |
1616 | 1618 | if (find_tape_device_and_size(bkpinfo->media_device, sz_size)) { |
1617 | 1619 | log_msg(3, _("Ok, using vanilla scsi tape.")); |
1618 | | paranoid_alloc(bkpinfo->media_device,VANILLA_SCSI_TAPE"0" ); |
| 1620 | mr_allocstr(bkpinfo->media_device,VANILLA_SCSI_TAPE"0" ); |
1619 | 1621 | if ((fin = fopen(bkpinfo->media_device, "r"))) { |
1620 | 1622 | paranoid_fclose(fin); |
1621 | 1623 | } else { |
1622 | | paranoid_alloc(bkpinfo->media_device,"/dev/osst0"); |
| 1624 | mr_allocstr(bkpinfo->media_device,"/dev/osst0"); |
1623 | 1625 | } |
1624 | 1626 | } |
… |
… |
|
1628 | 1630 | } else { |
1629 | 1631 | if (does_file_exist("/tmp/mondo-restore.cfg")) { |
1630 | | paranoid_free(bkpinfo->media_device); |
| 1632 | mr_free(bkpinfo->media_device); |
1631 | 1633 | read_cfg_var("/tmp/mondo-restore.cfg", "media-dev", |
1632 | 1634 | bkpinfo->media_device); |
1633 | 1635 | } |
1634 | 1636 | } |
1635 | | asprintf(&tmp, |
| 1637 | mr_asprintf(&tmp, |
1636 | 1638 | _("I think I've found your tape streamer at %s; am I right on the money?"), |
1637 | 1639 | bkpinfo->media_device); |
1638 | 1640 | if (!ask_me_yes_or_no(tmp)) { |
1639 | | paranoid_free(bkpinfo->media_device); |
1640 | | } |
1641 | | paranoid_free(tmp); |
| 1641 | mr_free(bkpinfo->media_device); |
| 1642 | } |
| 1643 | mr_free(tmp); |
1642 | 1644 | } else { |
1643 | 1645 | if (!popup_and_get_string |
… |
… |
|
1649 | 1651 | } |
1650 | 1652 | } |
1651 | | asprintf(&tmp, "ls -l %s", bkpinfo->media_device); |
| 1653 | mr_asprintf(&tmp, "ls -l %s", bkpinfo->media_device); |
1652 | 1654 | if (run_program_and_log_output(tmp, FALSE)) { |
1653 | 1655 | log_to_screen(_("User has not specified a valid /dev entry")); |
1654 | 1656 | finish(1); |
1655 | 1657 | } |
1656 | | paranoid_free(tmp); |
| 1658 | mr_free(tmp); |
1657 | 1659 | log_msg(4, "sz_size = %s", sz_size); |
1658 | | paranoid_free(sz_size); |
| 1660 | mr_free(sz_size); |
1659 | 1661 | bkpinfo->media_size[0] = 0; |
1660 | 1662 | log_msg(4, "media_size[0] = %ld", bkpinfo->media_size[0]); |
… |
… |
|
1708 | 1710 | if (bkpinfo->nfs_mount[strlen(bkpinfo->nfs_mount) - 1] == '/') |
1709 | 1711 | bkpinfo->nfs_mount[strlen(bkpinfo->nfs_mount) - 1] = '\0'; |
1710 | | asprintf(&command, "mount | grep \"%s \" | cut -d' ' -f3", |
| 1712 | mr_asprintf(&command, "mount | grep \"%s \" | cut -d' ' -f3", |
1711 | 1713 | bkpinfo->nfs_mount); |
1712 | | paranoid_free(bkpinfo->isodir); |
| 1714 | mr_free(bkpinfo->isodir); |
1713 | 1715 | bkpinfo->isodir = call_program_and_get_last_line_of_output(command); |
1714 | | paranoid_free(command); |
1715 | | |
1716 | | asprintf(&comment, |
| 1716 | mr_free(command); |
| 1717 | |
| 1718 | mr_asprintf(&comment, |
1717 | 1719 | _("How much data (in Megabytes) will each media store?")); |
1718 | 1720 | if (!popup_and_get_string(_("Size"), comment, sz_size)) { |
… |
… |
|
1727 | 1729 | finish(1); |
1728 | 1730 | } |
1729 | | paranoid_free(comment); |
| 1731 | mr_free(comment); |
1730 | 1732 | } |
1731 | 1733 | if (bkpinfo->disaster_recovery) { |
… |
… |
|
1739 | 1741 | } |
1740 | 1742 | if (!is_this_device_mounted(bkpinfo->nfs_mount)) { |
1741 | | paranoid_free(bkpinfo->isodir); |
1742 | | asprintf(&bkpinfo->isodir, "/tmp/isodir.mondo.%d", |
| 1743 | mr_free(bkpinfo->isodir); |
| 1744 | mr_asprintf(&bkpinfo->isodir, "/tmp/isodir.mondo.%d", |
1743 | 1745 | (int) (random() % 32768)); |
1744 | | asprintf(&command, "mkdir -p %s", bkpinfo->isodir); |
| 1746 | mr_asprintf(&command, "mkdir -p %s", bkpinfo->isodir); |
1745 | 1747 | run_program_and_log_output(command, 5); |
1746 | | paranoid_free(command); |
1747 | | |
1748 | | asprintf(&tmp, "mount -t nfs -o nolock %s %s", bkpinfo->nfs_mount, |
| 1748 | mr_free(command); |
| 1749 | |
| 1750 | mr_asprintf(&tmp, "mount -t nfs -o nolock %s %s", bkpinfo->nfs_mount, |
1749 | 1751 | bkpinfo->isodir); |
1750 | 1752 | run_program_and_log_output(tmp, 5); |
1751 | | paranoid_free(tmp); |
1752 | | asprintf(&g_selfmounted_isodir, bkpinfo->isodir); |
| 1753 | mr_free(tmp); |
| 1754 | mr_asprintf(&g_selfmounted_isodir, bkpinfo->isodir); |
1753 | 1755 | } |
1754 | 1756 | if (!is_this_device_mounted(bkpinfo->nfs_mount)) { |
… |
… |
|
1763 | 1765 | } |
1764 | 1766 | |
1765 | | asprintf(&command, "echo hi > '%s/%s/.dummy.txt'", bkpinfo->isodir, |
| 1767 | mr_asprintf(&command, "echo hi > '%s/%s/.dummy.txt'", bkpinfo->isodir, |
1766 | 1768 | bkpinfo->nfs_remote_dir); |
1767 | 1769 | while (run_program_and_log_output(command, FALSE)) { |
1768 | | asprintf(&prompt, |
| 1770 | mr_asprintf(&prompt, |
1769 | 1771 | _("Directory '%s' under mountpoint '%s' does not exist or is not writable. You can fix this or change the directory and retry or cancel the backup."), |
1770 | 1772 | bkpinfo->nfs_remote_dir, bkpinfo->isodir); |
… |
… |
|
1774 | 1776 | finish(1); |
1775 | 1777 | } |
1776 | | paranoid_free(prompt); |
1777 | | |
1778 | | paranoid_free(command); |
1779 | | asprintf(&command, "echo hi > %s/%s/.dummy.txt", |
| 1778 | mr_free(prompt); |
| 1779 | |
| 1780 | mr_free(command); |
| 1781 | mr_asprintf(&command, "echo hi > %s/%s/.dummy.txt", |
1780 | 1782 | bkpinfo->isodir, bkpinfo->nfs_remote_dir); |
1781 | 1783 | } |
1782 | | paranoid_free(command); |
| 1784 | mr_free(command); |
1783 | 1785 | |
1784 | 1786 | if (!popup_and_get_string |
… |
… |
|
1845 | 1847 | |
1846 | 1848 | if (bkpinfo->boot_device) { |
1847 | | paranoid_free(bkpinfo->boot_device); |
| 1849 | mr_free(bkpinfo->boot_device); |
1848 | 1850 | } |
1849 | 1851 | #ifdef __FreeBSD__ |
… |
… |
|
1903 | 1905 | } |
1904 | 1906 | bkpinfo->boot_loader = i; |
1905 | | asprintf(&bkpinfo->include_paths, "/"); |
| 1907 | mr_asprintf(&bkpinfo->include_paths, "/"); |
1906 | 1908 | if (!popup_and_get_string |
1907 | 1909 | (_("Backup paths"), |
… |
… |
|
1916 | 1918 | if (bkpinfo->exclude_paths != NULL) { |
1917 | 1919 | tmp1 = bkpinfo->exclude_paths; |
1918 | | asprintf(&bkpinfo->exclude_paths, "%s %s", tmp1, tmp); |
1919 | | paranoid_free(tmp1); |
| 1920 | mr_asprintf(&bkpinfo->exclude_paths, "%s %s", tmp1, tmp); |
| 1921 | mr_free(tmp1); |
1920 | 1922 | } else { |
1921 | 1923 | bkpinfo->exclude_paths = tmp; |
1922 | 1924 | } |
1923 | 1925 | } |
1924 | | paranoid_free(tmp); |
| 1926 | mr_free(tmp); |
1925 | 1927 | // NTFS |
1926 | 1928 | tmp = call_program_and_get_last_line_of_output |
… |
… |
|
1936 | 1938 | if (bkpinfo->image_devs != NULL) { |
1937 | 1939 | tmp2 = bkpinfo->image_devs; |
1938 | | asprintf(&bkpinfo->image_devs, "%s %s", tmp2, tmp1); |
1939 | | paranoid_free(tmp2); |
| 1940 | mr_asprintf(&bkpinfo->image_devs, "%s %s", tmp2, tmp1); |
| 1941 | mr_free(tmp2); |
1940 | 1942 | } else { |
1941 | 1943 | bkpinfo->image_devs = tmp1; |
1942 | 1944 | } |
1943 | | paranoid_free(tmp1); |
1944 | | } |
1945 | | paranoid_free(tmp); |
| 1945 | mr_free(tmp1); |
| 1946 | } |
| 1947 | mr_free(tmp); |
1946 | 1948 | |
1947 | 1949 | if (!popup_and_get_string |
… |
… |
|
1961 | 1963 | if (!ask_me_yes_or_no |
1962 | 1964 | (_("Are you confident that your kernel is a sane, sensible, standard Linux kernel? Say 'no' if you are using a Gentoo <1.4 or Debian <3.0, please."))){ |
1963 | | paranoid_alloc(bkpinfo->kernel_path, "FAILSAFE"); |
| 1965 | mr_allocstr(bkpinfo->kernel_path, "FAILSAFE"); |
1964 | 1966 | } |
1965 | 1967 | #endif |
… |
… |
|
1992 | 1994 | log_it("media size = %ld", bkpinfo->media_size[1]); |
1993 | 1995 | log_it("media type = %s", bkpinfo->backup_media_string); |
1994 | | paranoid_free(tmp); |
| 1996 | mr_free(tmp); |
1995 | 1997 | log_it("prefix = %s", bkpinfo->prefix); |
1996 | 1998 | log_it("compression = %ld", bkpinfo->compression_level); |
… |
… |
|
2024 | 2026 | ("mount -t coda,ncpfs,nfs,smbfs,cifs,afs,mvfs | tr -s '\t' ' ' | cut -d' ' -f3 | tr -s '\n' ' ' | awk '{print $0;}'")); |
2025 | 2027 | /* BERLIOS : Useless |
2026 | | asprintf(&exclude_these_devices, |
| 2028 | mr_asprintf(&exclude_these_devices, |
2027 | 2029 | call_program_and_get_last_line_of_output |
2028 | 2030 | ("tr -s '\t' ' ' < /etc/fstab | grep -E '( (coda|ncpfs|nfs|smbfs|cifs|mvfs) )' | cut -d' ' -f1 | tr -s '\n' ' ' | awk '{print $0;}'")); |
… |
… |
|
2057 | 2059 | |
2058 | 2060 | if (tmp[0] != '/') { |
2059 | | asprintf(&sz, "/%s", tmp); |
2060 | | paranoid_free(tmp); |
| 2061 | mr_asprintf(&sz, "/%s", tmp); |
| 2062 | mr_free(tmp); |
2061 | 2063 | tmp = sz; |
2062 | 2064 | } |
… |
… |
|
2065 | 2067 | } |
2066 | 2068 | i = (int) (random() % 32768); |
2067 | | paranoid_free(bkpinfo->tmpdir); |
2068 | | asprintf(&bkpinfo->tmpdir, "%s/mondo.tmp.%d", tmp, i); |
| 2069 | mr_free(bkpinfo->tmpdir); |
| 2070 | mr_asprintf(&bkpinfo->tmpdir, "%s/mondo.tmp.%d", tmp, i); |
2069 | 2071 | log_it("bkpinfo->tmpdir is being set to %s", bkpinfo->tmpdir); |
2070 | 2072 | |
2071 | | paranoid_free(bkpinfo->scratchdir); |
2072 | | asprintf(&bkpinfo->scratchdir, "%s/mondo.scratch.%d", tmp, i); |
| 2073 | mr_free(bkpinfo->scratchdir); |
| 2074 | mr_asprintf(&bkpinfo->scratchdir, "%s/mondo.scratch.%d", tmp, i); |
2073 | 2075 | log_it("bkpinfo->scratchdir is being set to %s", bkpinfo->scratchdir); |
2074 | 2076 | |
2075 | | asprintf(&g_erase_tmpdir_and_scratchdir, "rm -Rf %s %s", bkpinfo->tmpdir, |
| 2077 | mr_asprintf(&g_erase_tmpdir_and_scratchdir, "rm -Rf %s %s", bkpinfo->tmpdir, |
2076 | 2078 | bkpinfo->scratchdir); |
2077 | 2079 | |
2078 | | asprintf(&command, "rm -Rf %s/mondo.tmp.* %s/mondo.scratch.*", tmp, tmp); |
2079 | | paranoid_free(tmp); |
| 2080 | mr_asprintf(&command, "rm -Rf %s/mondo.tmp.* %s/mondo.scratch.*", tmp, tmp); |
| 2081 | mr_free(tmp); |
2080 | 2082 | |
2081 | 2083 | paranoid_system(command); |
2082 | | paranoid_free(command); |
| 2084 | mr_free(command); |
2083 | 2085 | } |
2084 | 2086 | |
… |
… |
|
2099 | 2101 | char *command; |
2100 | 2102 | |
2101 | | paranoid_free(output); |
| 2103 | mr_free(output); |
2102 | 2104 | if (!dev || dev[0] == '\0') { |
2103 | 2105 | return (FALSE); |
… |
… |
|
2109 | 2111 | return (FALSE); |
2110 | 2112 | } |
2111 | | asprintf(&command, "dd bs=%ld count=1 if=%s of=/dev/null &> /dev/null", |
| 2113 | mr_asprintf(&command, "dd bs=%ld count=1 if=%s of=/dev/null &> /dev/null", |
2112 | 2114 | 512L, dev); |
2113 | 2115 | if (!run_program_and_log_output(command, FALSE) |
2114 | 2116 | && !run_program_and_log_output(command, FALSE)) { |
2115 | | asprintf(&output, dev); |
| 2117 | mr_asprintf(&output, dev); |
2116 | 2118 | log_msg(4, "Found it - %s", dev); |
2117 | | paranoid_free(command); |
| 2119 | mr_free(command); |
2118 | 2120 | return (TRUE); |
2119 | 2121 | } else { |
2120 | 2122 | log_msg(4, "It's not %s", dev); |
2121 | | paranoid_free(command); |
| 2123 | mr_free(command); |
2122 | 2124 | return (FALSE); |
2123 | 2125 | } |
… |
… |
|
2141 | 2143 | assert(bkpinfo != NULL); |
2142 | 2144 | if (g_ISO_restore_mode) { |
2143 | | asprintf(&tmp, "mount | grep iso9660 | awk '{print $3;}'"); |
| 2145 | mr_asprintf(&tmp, "mount | grep iso9660 | awk '{print $3;}'"); |
2144 | 2146 | |
2145 | 2147 | tmp1 = call_program_and_get_last_line_of_output(tmp); |
2146 | | paranoid_free(tmp); |
2147 | | |
2148 | | asprintf(&mountdev, "%s/archives/THIS-CD-NUMBER", tmp1); |
2149 | | paranoid_free(tmp1); |
| 2148 | mr_free(tmp); |
| 2149 | |
| 2150 | mr_asprintf(&mountdev, "%s/archives/THIS-CD-NUMBER", tmp1); |
| 2151 | mr_free(tmp1); |
2150 | 2152 | |
2151 | 2153 | tmp = last_line_of_file(mountdev); |
2152 | 2154 | cd_number = atoi(tmp); |
2153 | | paranoid_free(mountdev); |
2154 | | paranoid_free(tmp); |
| 2155 | mr_free(mountdev); |
| 2156 | mr_free(tmp); |
2155 | 2157 | |
2156 | 2158 | return (cd_number); |
… |
… |
|
2167 | 2169 | tmp = last_line_of_file(MNT_CDROM "/archives/THIS-CD-NUMBER"); |
2168 | 2170 | cd_number = atoi(tmp); |
2169 | | paranoid_free(tmp); |
| 2171 | mr_free(tmp); |
2170 | 2172 | return (cd_number); |
2171 | 2173 | } |
… |
… |
|
2190 | 2192 | ("mount | grep \" on / \" | cut -d' ' -f1 | sed s/[0-9]// | sed s/[0-9]//"); |
2191 | 2193 | if (strstr(tmp, "/dev/cciss/")) { |
2192 | | paranoid_free(tmp); |
| 2194 | mr_free(tmp); |
2193 | 2195 | tmp = call_program_and_get_last_line_of_output |
2194 | 2196 | ("mount | grep \" on / \" | cut -d' ' -f1 | cut -dp -f1"); |
2195 | 2197 | } |
2196 | 2198 | if (strstr(tmp, "/dev/md")) { |
2197 | | paranoid_free(tmp); |
| 2199 | mr_free(tmp); |
2198 | 2200 | tmp = call_program_and_get_last_line_of_output |
2199 | 2201 | ("mount | grep \" on / \" | cut -d' ' -f1"); |
… |
… |
|
2278 | 2280 | #endif |
2279 | 2281 | assert(which_device != NULL); |
2280 | | asprintf(&list_drives_cmd, |
| 2282 | mr_asprintf(&list_drives_cmd, |
2281 | 2283 | "parted2fdisk -l 2>/dev/null | grep \"/dev/.*:\" | tr -s ':' ' ' | tr -s ' ' '\n' | grep /dev/; echo %s", |
2282 | 2284 | where_is_root_mounted()); |
… |
… |
|
2285 | 2287 | if (!(pdrives = popen(list_drives_cmd, "r"))) { |
2286 | 2288 | log_OS_error("Unable to open list of drives"); |
2287 | | paranoid_free(list_drives_cmd); |
| 2289 | mr_free(list_drives_cmd); |
2288 | 2290 | return ('\0'); |
2289 | 2291 | } |
2290 | | paranoid_free(list_drives_cmd); |
2291 | | |
2292 | | for (getline(¤t_drive, &n, pdrives); !feof(pdrives); |
2293 | | getline(¤t_drive, &n, pdrives)) { |
| 2292 | mr_free(list_drives_cmd); |
| 2293 | |
| 2294 | for (mr_getline(¤t_drive, &n, pdrives); !feof(pdrives); |
| 2295 | mr_getline(¤t_drive, &n, pdrives)) { |
2294 | 2296 | strip_spaces(current_drive); |
2295 | 2297 | log_it("looking at drive %s's MBR", current_drive); |
2296 | 2298 | if (does_string_exist_in_boot_block(current_drive, "GRUB")) { |
2297 | 2299 | count_grubs++; |
2298 | | paranoid_alloc(which_device,current_drive); |
| 2300 | mr_allocstr(which_device,current_drive); |
2299 | 2301 | break; |
2300 | 2302 | } |
2301 | 2303 | if (does_string_exist_in_boot_block(current_drive, "LILO")) { |
2302 | 2304 | count_lilos++; |
2303 | | paranoid_alloc(which_device,current_drive); |
| 2305 | mr_allocstr(which_device,current_drive); |
2304 | 2306 | break; |
2305 | 2307 | } |
… |
… |
|
2371 | 2373 | log_it |
2372 | 2374 | ("resolve_softlinks_to_get_to_actual_device_file --- device not found"); |
2373 | | asprintf(&output, incoming); |
2374 | | } else { |
2375 | | asprintf(&curr_fname, incoming); |
| 2375 | mr_asprintf(&output, incoming); |
| 2376 | } else { |
| 2377 | mr_asprintf(&curr_fname, incoming); |
2376 | 2378 | lstat(curr_fname, &statbuf); |
2377 | 2379 | while (S_ISLNK(statbuf.st_mode)) { |
2378 | 2380 | log_msg(1, "curr_fname = %s", curr_fname); |
2379 | | asprintf(&command, "file %s", curr_fname); |
| 2381 | mr_asprintf(&command, "file %s", curr_fname); |
2380 | 2382 | tmp = call_program_and_get_last_line_of_output(command); |
2381 | | paranoid_free(command); |
| 2383 | mr_free(command); |
2382 | 2384 | |
2383 | 2385 | for (p = tmp + strlen(tmp); p != tmp && *p != '`' && *p != ' '; |
2384 | 2386 | p--); |
2385 | 2387 | p++; |
2386 | | asprintf(&scratch, p); |
| 2388 | mr_asprintf(&scratch, p); |
2387 | 2389 | for (p = scratch; *p != '\0' && *p != '\''; p++); |
2388 | 2390 | *p = '\0'; |
2389 | 2391 | log_msg(0, "curr_fname %s --> '%s' --> %s", curr_fname, tmp, scratch); |
2390 | | paranoid_free(tmp); |
| 2392 | mr_free(tmp); |
2391 | 2393 | |
2392 | 2394 | if (scratch[0] == '/') { |
2393 | | paranoid_free(curr_fname); |
2394 | | asprintf(&curr_fname, scratch); // copy whole thing because it's an absolute softlink |
| 2395 | mr_free(curr_fname); |
| 2396 | mr_asprintf(&curr_fname, scratch); // copy whole thing because it's an absolute softlink |
2395 | 2397 | } else { // copy over the basename cos it's a relative softlink |
2396 | 2398 | p = curr_fname + strlen(curr_fname); |
… |
… |
|
2402 | 2404 | } |
2403 | 2405 | *p = '\0'; |
2404 | | asprintf(&tmp, "%s%s", curr_fname, scratch); |
2405 | | paranoid_free(curr_fname); |
| 2406 | mr_asprintf(&tmp, "%s%s", curr_fname, scratch); |
| 2407 | mr_free(curr_fname); |
2406 | 2408 | curr_fname = tmp; |
2407 | 2409 | } |
2408 | | paranoid_free(scratch); |
| 2410 | mr_free(scratch); |
2409 | 2411 | lstat(curr_fname, &statbuf); |
2410 | 2412 | } |
2411 | | asprintf(&output, curr_fname); |
| 2413 | mr_asprintf(&output, curr_fname); |
2412 | 2414 | log_it("resolved %s to %s", incoming, output); |
2413 | | paranoid_free(curr_fname); |
| 2415 | mr_free(curr_fname); |
2414 | 2416 | } |
2415 | 2417 | return (output); |
… |
… |
|
2431 | 2433 | |
2432 | 2434 | log_msg(0, "Looking for partition table format type"); |
2433 | | asprintf(&fdisk, "/sbin/parted2fdisk"); |
| 2435 | mr_asprintf(&fdisk, "/sbin/parted2fdisk"); |
2434 | 2436 | log_msg(1, "Using %s", fdisk); |
2435 | | asprintf(&command, "%s -l %s | grep 'EFI GPT'", fdisk, drive); |
2436 | | paranoid_free(fdisk); |
| 2437 | mr_asprintf(&command, "%s -l %s | grep 'EFI GPT'", fdisk, drive); |
| 2438 | mr_free(fdisk); |
2437 | 2439 | |
2438 | 2440 | tmp = call_program_and_get_last_line_of_output(command); |
2439 | | paranoid_free(command); |
| 2441 | mr_free(command); |
2440 | 2442 | |
2441 | 2443 | if (strstr(tmp, "GPT") == NULL) { |
2442 | | asprintf(&output, "MBR"); |
2443 | | } else { |
2444 | | asprintf(&output, "GPT"); |
2445 | | } |
2446 | | paranoid_free(tmp); |
| 2444 | mr_asprintf(&output, "MBR"); |
| 2445 | } else { |
| 2446 | mr_asprintf(&output, "GPT"); |
| 2447 | } |
| 2448 | mr_free(tmp); |
2447 | 2449 | log_msg(0, "Found %s partition table format type", output); |
2448 | 2450 | return (output); |
-
r808
|
r900
|
|
28 | 28 | #include "mondostructures.h" |
29 | 29 | #include "libmondo.h" |
| 30 | #include "mr_mem.h" |
30 | 31 | |
31 | 32 | /** |
… |
… |
|
82 | 83 | assert_string_is_neither_NULL_nor_zerolength(device); |
83 | 84 | assert(direction == 'w' || direction == 'r'); |
84 | | asprintf(&sz_dir, "%c", direction); |
| 85 | mr_asprintf(&sz_dir, "%c", direction); |
85 | 86 | wise_upper_limit = (am_I_in_disaster_recovery_mode()? 8 : 32); |
86 | 87 | wise_lower_limit = 1; // wise_upper_limit/2 + 1; |
… |
… |
|
88 | 89 | for (bufsize = wise_upper_limit, res = -1; |
89 | 90 | res != 0 && bufsize >= wise_lower_limit; bufsize--) { |
90 | | asprintf(&tmp, |
| 91 | mr_asprintf(&tmp, |
91 | 92 | "dd if=/dev/zero bs=1024 count=16k 2> /dev/null | buffer -o /dev/null -s %ld -m %d%c", |
92 | 93 | internal_tape_block_size, bufsize, 'm'); |
93 | 94 | res = run_program_and_log_output(tmp, 2); |
94 | | paranoid_free(tmp); |
| 95 | mr_free(tmp); |
95 | 96 | } |
96 | 97 | if (!res) { |
97 | 98 | bufsize++; |
98 | | asprintf(&tmp, _("Negotiated max buffer of %d MB "), bufsize); |
| 99 | mr_asprintf(&tmp, _("Negotiated max buffer of %d MB "), bufsize); |
99 | 100 | log_to_screen(tmp); |
100 | | paranoid_free(tmp); |
| 101 | mr_free(tmp); |
101 | 102 | } else { |
102 | 103 | bufsize = 0; |
… |
… |
|
111 | 112 | } |
112 | 113 | if (bufsize) { |
113 | | asprintf(&g_sz_call_to_buffer, |
| 114 | mr_asprintf(&g_sz_call_to_buffer, |
114 | 115 | "buffer -m %d%c -p%d -B -s%ld -%c %s 2>> %s", bufsize, |
115 | 116 | 'm', (direction == 'r') ? 20 : 75, |
116 | 117 | internal_tape_block_size, keych, device, MONDO_LOGFILE); |
117 | 118 | } else { |
118 | | asprintf(&g_sz_call_to_buffer, "dd bs=%ld %cf=%s", |
| 119 | mr_asprintf(&g_sz_call_to_buffer, "dd bs=%ld %cf=%s", |
119 | 120 | internal_tape_block_size, keych, device); |
120 | 121 | } |
121 | 122 | log_msg(2, "Calling buffer --- command = '%s'", g_sz_call_to_buffer); |
122 | 123 | fres = popen(g_sz_call_to_buffer, sz_dir); |
123 | | paranoid_free(sz_dir); |
| 124 | mr_free(sz_dir); |
124 | 125 | if (fres) { |
125 | 126 | log_msg(2, "Successfully opened ('%c') tape device %s", direction, |
… |
… |
|
130 | 131 | } |
131 | 132 | sleep(2); |
132 | | asprintf(&tmp, "ps %s | grep \"%s\"", ps_options, g_sz_call_to_buffer); |
| 133 | mr_asprintf(&tmp, "ps %s | grep \"%s\"", ps_options, g_sz_call_to_buffer); |
133 | 134 | if (run_program_and_log_output(tmp, 2)) { |
134 | 135 | log_msg(2, "Warning - I think I failed to open tape, actually."); |
135 | 136 | } |
136 | | paranoid_free(tmp); |
| 137 | mr_free(tmp); |
137 | 138 | g_tape_buffer_size_MB = bufsize; |
138 | | asprintf(&tmp, "ps %s | grep buffer | grep -v grep", ps_options); |
| 139 | mr_asprintf(&tmp, "ps %s | grep buffer | grep -v grep", ps_options); |
139 | 140 | if (run_program_and_log_output(tmp, 1)) { |
140 | 141 | fres = NULL; |
… |
… |
|
143 | 144 | log_to_screen(_("Buffer successfully started.")); |
144 | 145 | } |
145 | | paranoid_free(tmp); |
| 146 | mr_free(tmp); |
146 | 147 | return (fres); |
147 | 148 | } |
… |
… |
|
157 | 158 | |
158 | 159 | sync(); |
159 | | asprintf(&command, |
| 160 | mr_asprintf(&command, |
160 | 161 | "ps %s | grep -F \"%s\" | grep -Fv grep | awk '{print $1;}' | grep -v PID | tr -s '\n' ' ' | awk '{ print $1; }'", ps_options, |
161 | 162 | g_sz_call_to_buffer); |
162 | | paranoid_free(g_sz_call_to_buffer); |
| 163 | mr_free(g_sz_call_to_buffer); |
163 | 164 | log_msg(2, "kill_buffer() --- command = %s", command); |
164 | 165 | |
165 | 166 | tmp = call_program_and_get_last_line_of_output(command); |
166 | | paranoid_free(command); |
| 167 | mr_free(command); |
167 | 168 | |
168 | | asprintf(&command, "kill %s", tmp); |
| 169 | mr_asprintf(&command, "kill %s", tmp); |
169 | 170 | log_msg(2, "kill_buffer() --- command = %s", command); |
170 | 171 | |
… |
… |
|
172 | 173 | run_program_and_log_output(command, TRUE); |
173 | 174 | } |
174 | | paranoid_free(tmp); |
175 | | paranoid_free(command); |
| 175 | mr_free(tmp); |
| 176 | mr_free(command); |
176 | 177 | } |
177 | 178 | |
-
r863
|
r900
|
|
17 | 17 | #include "newt-specific-EXT.h" |
18 | 18 | #include "libmondo-tools-EXT.h" |
19 | | #include "mr_string.h" |
| 19 | #include "mr_str.h" |
| 20 | #include "mr_mem.h" |
20 | 21 | |
21 | 22 | #include <time.h> |
… |
… |
|
102 | 103 | { i=0; log_to_screen ("This will take more time. Please be patient."); } |
103 | 104 | */ |
104 | | asprintf(&filelist, "%s/archives/filelist.full", bkpinfo->scratchdir); |
| 105 | mr_asprintf(&filelist, "%s/archives/filelist.full", bkpinfo->scratchdir); |
105 | 106 | if (!does_file_exist(filelist)) { |
106 | 107 | log_it("filelist %s not found", filelist); |
… |
… |
|
111 | 112 | chop_filelist(filelist, bkpinfo->tmpdir, |
112 | 113 | bkpinfo->optimal_set_size); |
113 | | paranoid_free(filelist); |
| 114 | mr_free(filelist); |
114 | 115 | |
115 | 116 | estimate_noof_media_required(bkpinfo, noof_sets); // for cosmetic purposes |
116 | 117 | |
117 | | asprintf(&tempfile, "%s/biggielist.txt", bkpinfo->tmpdir); |
| 118 | mr_asprintf(&tempfile, "%s/biggielist.txt", bkpinfo->tmpdir); |
118 | 119 | if (!(fout = fopen(tempfile, "a"))) { |
119 | 120 | log_OS_error("Cannot append to biggielist"); |
120 | 121 | retval++; |
121 | 122 | } |
122 | | paranoid_free(tempfile); |
| 123 | mr_free(tempfile); |
123 | 124 | log_it(bkpinfo->image_devs); |
124 | 125 | |
… |
… |
|
126 | 127 | |
127 | 128 | while (ptr && *ptr) { |
128 | | asprintf(&dev, ptr); |
| 129 | mr_asprintf(&dev, ptr); |
129 | 130 | log_it("Examining imagedev %s", dev); |
130 | 131 | for (i = 0; i < (int) strlen(dev) && dev[i] != ' '; i++); |
… |
… |
|
135 | 136 | fprintf(fout, "%s\n", dev); |
136 | 137 | log_it("Adding '%s' to biggielist", dev); |
137 | | paranoid_free(dev); |
| 138 | mr_free(dev); |
138 | 139 | |
139 | 140 | if ((ptr = strchr(ptr, ' '))) { |
… |
… |
|
156 | 157 | |
157 | 158 | log_msg(1, "Sorting file %s", orig_fname); |
158 | | asprintf(&tmp_fname, "/tmp/sort.%d.%d.%d", (int) (random() % 32768), |
| 159 | mr_asprintf(&tmp_fname, "/tmp/sort.%d.%d.%d", (int) (random() % 32768), |
159 | 160 | (int) (random() % 32768), (int) (random() % 32768)); |
160 | 161 | |
… |
… |
|
163 | 164 | } // no sense in trying to sort an empty file |
164 | 165 | |
165 | | asprintf(&command, "sort %s > %s 2>> %s", orig_fname, tmp_fname, |
| 166 | mr_asprintf(&command, "sort %s > %s 2>> %s", orig_fname, tmp_fname, |
166 | 167 | MONDO_LOGFILE); |
167 | 168 | retval = system(command); |
168 | | paranoid_free(command); |
| 169 | mr_free(command); |
169 | 170 | |
170 | 171 | if (retval) { |
… |
… |
|
173 | 174 | log_msg(2, "Sorted %s --> %s OK. Copying it back to %s now", |
174 | 175 | orig_fname, tmp_fname, orig_fname); |
175 | | asprintf(&command, "mv -f %s %s", tmp_fname, orig_fname); |
| 176 | mr_asprintf(&command, "mv -f %s %s", tmp_fname, orig_fname); |
176 | 177 | retval += run_program_and_log_output(command, 2); |
177 | | paranoid_free(command); |
| 178 | mr_free(command); |
178 | 179 | |
179 | 180 | if (retval) { |
… |
… |
|
184 | 185 | } |
185 | 186 | } |
186 | | paranoid_free(tmp_fname); |
| 187 | mr_free(tmp_fname); |
187 | 188 | log_msg(1, "Finished sorting file %s", orig_fname); |
188 | 189 | return (retval); |
… |
… |
|
248 | 249 | curr_set_no = 0; |
249 | 250 | curr_set_size = 0; |
250 | | asprintf(&outfname, "%s/filelist.%ld", outdir, curr_set_no); |
251 | | asprintf(&biggie_fname, "%s/biggielist.txt", outdir); |
| 251 | mr_asprintf(&outfname, "%s/filelist.%ld", outdir, curr_set_no); |
| 252 | mr_asprintf(&biggie_fname, "%s/biggielist.txt", outdir); |
252 | 253 | log_it("outfname=%s; biggie_fname=%s", outfname, biggie_fname); |
253 | 254 | if (!(fbig = fopen(biggie_fname, "w"))) { |
… |
… |
|
259 | 260 | return (0); |
260 | 261 | } |
261 | | (void) getline(&incoming, &n, fin); |
| 262 | mr_getline(&incoming, &n, fin); |
262 | 263 | while (!feof(fin)) { |
263 | 264 | lino++; |
… |
… |
|
286 | 287 | paranoid_fclose(fout); |
287 | 288 | sort_file(outfname); |
288 | | paranoid_free(outfname); |
| 289 | mr_free(outfname); |
289 | 290 | |
290 | 291 | curr_set_no++; |
291 | 292 | curr_set_size = 0; |
292 | | asprintf(&outfname, "%s/filelist.%ld", outdir, |
| 293 | mr_asprintf(&outfname, "%s/filelist.%ld", outdir, |
293 | 294 | curr_set_no); |
294 | 295 | if (!(fout = fopen(outfname, "w"))) { |
… |
… |
|
299 | 300 | } |
300 | 301 | } |
301 | | (void) getline(&incoming, &n, fin); |
| 302 | mr_getline(&incoming, &n, fin); |
302 | 303 | } |
303 | 304 | paranoid_fclose(fin); |
… |
… |
|
312 | 313 | sort_file(outfname); |
313 | 314 | sort_file(biggie_fname); |
314 | | paranoid_free(biggie_fname); |
315 | | paranoid_free(outfname); |
316 | | |
317 | | asprintf(&outfname, "%s/LAST-FILELIST-NUMBER", outdir); |
318 | | asprintf(&tmp, "%ld", curr_set_no); |
| 315 | mr_free(biggie_fname); |
| 316 | mr_free(outfname); |
| 317 | |
| 318 | mr_asprintf(&outfname, "%s/LAST-FILELIST-NUMBER", outdir); |
| 319 | mr_asprintf(&tmp, "%ld", curr_set_no); |
319 | 320 | if (write_one_liner_data_file(outfname, tmp)) { |
320 | 321 | log_OS_error |
… |
… |
|
322 | 323 | return (0); |
323 | 324 | } |
324 | | paranoid_free(outfname); |
325 | | paranoid_free(tmp); |
| 325 | mr_free(outfname); |
| 326 | mr_free(tmp); |
326 | 327 | |
327 | 328 | if (curr_set_no == 0) { |
328 | | asprintf(&tmp, "Only one fileset. Fine."); |
| 329 | mr_asprintf(&tmp, "Only one fileset. Fine."); |
329 | 330 | } else { |
330 | | asprintf(&tmp, "Filelist divided into %ld sets", curr_set_no + 1); |
| 331 | mr_asprintf(&tmp, "Filelist divided into %ld sets", curr_set_no + 1); |
331 | 332 | } |
332 | 333 | log_msg(1, tmp); |
333 | | paranoid_free(tmp); |
| 334 | mr_free(tmp); |
334 | 335 | close_evalcall_form(); |
335 | 336 | /* This is to work around an obscure bug in Newt; open a form, close it, |
… |
… |
|
391 | 392 | } |
392 | 393 | filelist->ch = '\0'; |
393 | | paranoid_free(filelist); |
| 394 | mr_free((void *)filelist); |
394 | 395 | depth--; |
395 | 396 | if (depth == 0) { |
… |
… |
|
416 | 417 | return (2); |
417 | 418 | } |
418 | | for (getline(&tmp, &n, pattr); !feof(pattr); getline(&tmp, &n, pattr)) { |
| 419 | for (mr_getline(&tmp, &n, pattr); !feof(pattr); mr_getline(&tmp, &n, pattr)) { |
419 | 420 | fputs(tmp, pout); |
420 | 421 | } |
421 | 422 | paranoid_pclose(pattr); |
422 | | paranoid_free(tmp); |
| 423 | mr_free(tmp); |
423 | 424 | return (0); |
424 | 425 | } |
… |
… |
|
432 | 433 | char *pout_command; |
433 | 434 | char *syscall; |
434 | | char *tmp; |
435 | 435 | char *file_to_analyze = NULL; |
436 | 436 | int i; |
… |
… |
|
441 | 441 | return (1); |
442 | 442 | } |
443 | | asprintf(&pout_command, "gzip -c1 > %s", auxlist_fname); |
| 443 | mr_asprintf(&pout_command, "gzip -c1 > %s", auxlist_fname); |
444 | 444 | if (!(pout = popen(pout_command, "w"))) { |
445 | 445 | log_msg(1, "Cannot openout auxlist_fname %s", auxlist_fname); |
446 | 446 | fclose(fin); |
447 | | paranoid_free(pout_command); |
| 447 | mr_free(pout_command); |
448 | 448 | return (4); |
449 | 449 | } |
450 | | paranoid_free(pout_command); |
451 | | |
452 | | for (getline(&file_to_analyze, &n, fin); !feof(fin); |
453 | | getline(&file_to_analyze, &n, fin)) { |
| 450 | mr_free(pout_command); |
| 451 | |
| 452 | for (mr_getline(&file_to_analyze, &n, fin); !feof(fin); |
| 453 | mr_getline(&file_to_analyze, &n, fin)) { |
454 | 454 | i = strlen(file_to_analyze); |
455 | 455 | if (i > 0 && file_to_analyze[i - 1] < 32) { |
… |
… |
|
458 | 458 | log_msg(8, "Analyzing %s", file_to_analyze); |
459 | 459 | /* BERLIOS : to be checked */ |
460 | | asprintf(&syscall, "%s %s 2>> /dev/null", syscall_sprintf,mr_stresc(file_to_analyze, "`$\\\"", '\\')); |
| 460 | mr_asprintf(&syscall, "%s %s 2>> /dev/null", syscall_sprintf,mr_stresc(file_to_analyze, "`$\\\"", '\\')); |
461 | 461 | call_exe_and_pipe_output_to_fd(syscall, pout); |
462 | | paranoid_free(syscall); |
| 462 | mr_free(syscall); |
463 | 463 | } |
464 | 464 | paranoid_fclose(fin); |
465 | 465 | paranoid_pclose(pout); |
466 | | paranoid_free(file_to_analyze); |
| 466 | mr_free(file_to_analyze); |
467 | 467 | return (0); |
468 | 468 | } |
… |
… |
|
475 | 475 | int retval = 0; |
476 | 476 | |
477 | | asprintf(&command, "touch %s", facl_fname); |
| 477 | mr_asprintf(&command, "touch %s", facl_fname); |
478 | 478 | run_program_and_log_output(command, 8); |
479 | | paranoid_free(command); |
| 479 | mr_free(command); |
480 | 480 | |
481 | 481 | tmp = find_home_of_exe("getfacl"); |
482 | 482 | if (tmp) { |
483 | 483 | // sort_file(filelist); // FIXME - filelist chopper sorts, so this isn't necessary |
484 | | asprintf(&command, |
| 484 | mr_asprintf(&command, |
485 | 485 | "getfacl --all-effective -P %s 2>> %s | gzip -c1 > %s 2>> %s", |
486 | 486 | filelist, MONDO_LOGFILE, facl_fname, MONDO_LOGFILE); |
487 | 487 | iamhere(command); |
488 | 488 | retval = system(command); |
489 | | paranoid_free(command); |
490 | | } |
491 | | paranoid_free(tmp); |
| 489 | mr_free(command); |
| 490 | } |
| 491 | mr_free(tmp); |
492 | 492 | return (retval); |
493 | 493 | } |
… |
… |
|
500 | 500 | int retval = 0; |
501 | 501 | |
502 | | asprintf(&command, "touch %s", fattr_fname); |
| 502 | mr_asprintf(&command, "touch %s", fattr_fname); |
503 | 503 | run_program_and_log_output(command, 8); |
504 | | paranoid_free(command); |
| 504 | mr_free(command); |
505 | 505 | |
506 | 506 | tmp = find_home_of_exe("getfattr"); |
… |
… |
|
511 | 511 | fattr_fname); |
512 | 512 | } |
513 | | paranoid_free(tmp); |
| 513 | mr_free(tmp); |
514 | 514 | return (retval); |
515 | 515 | } |
… |
… |
|
531 | 531 | retval = system(command); |
532 | 532 | } |
533 | | paranoid_free(command); |
| 533 | mr_free(command); |
534 | 534 | return(retval); |
535 | 535 | } |
… |
… |
|
557 | 557 | log_msg(1, |
558 | 558 | "No masklist provided. I shall therefore set ALL attributes."); |
559 | | asprintf(&command, "gzip -dc %s | %s --restore - 2>> %s", |
| 559 | mr_asprintf(&command, "gzip -dc %s | %s --restore - 2>> %s", |
560 | 560 | original_exat_fname, executable, MONDO_LOGFILE); |
561 | 561 | log_msg(1, "command = %s", command); |
562 | 562 | retval = system(command); |
563 | | paranoid_free(command); |
| 563 | mr_free(command); |
564 | 564 | log_msg(1, "Returning w/ retval=%d", retval); |
565 | 565 | return (retval); |
… |
… |
|
571 | 571 | return (0); |
572 | 572 | } |
573 | | asprintf(&masklist, "/tmp/%d.%d.mask", (int) (random() % 32768), |
| 573 | mr_asprintf(&masklist, "/tmp/%d.%d.mask", (int) (random() % 32768), |
574 | 574 | (int) (random() % 32768)); |
575 | | asprintf(&command, "cp -f %s %s", orig_msklist, masklist); |
| 575 | mr_asprintf(&command, "cp -f %s %s", orig_msklist, masklist); |
576 | 576 | run_program_and_log_output(command, 1); |
577 | | paranoid_free(command); |
| 577 | mr_free(command); |
578 | 578 | |
579 | 579 | sort_file(masklist); |
580 | | asprintf(&syscall_pin, "gzip -dc %s", original_exat_fname); |
581 | | asprintf(&syscall_pout, "%s --restore - 2>> %s", executable, |
| 580 | mr_asprintf(&syscall_pin, "gzip -dc %s", original_exat_fname); |
| 581 | mr_asprintf(&syscall_pout, "%s --restore - 2>> %s", executable, |
582 | 582 | MONDO_LOGFILE); |
583 | 583 | |
… |
… |
|
589 | 589 | return (1); |
590 | 590 | } |
591 | | paranoid_free(syscall_pout); |
| 591 | mr_free(syscall_pout); |
592 | 592 | |
593 | 593 | pin = popen(syscall_pin, "r"); |
… |
… |
|
597 | 597 | return (1); |
598 | 598 | } |
599 | | paranoid_free(syscall_pin); |
| 599 | mr_free(syscall_pin); |
600 | 600 | |
601 | 601 | faclin = fopen(masklist, "r"); |
… |
… |
|
608 | 608 | // printf("Hi there. Starting the loop\n"); |
609 | 609 | |
610 | | getline(¤t_subset_file, &n, faclin); |
611 | | getline(&incoming, &n, pin); |
| 610 | mr_getline(¤t_subset_file, &n, faclin); |
| 611 | mr_getline(&incoming, &n, pin); |
612 | 612 | while (!feof(pin) && !feof(faclin)) { |
613 | 613 | // printf("incoming = %s", incoming); |
614 | 614 | |
615 | | asprintf(¤t_master_file, incoming + 8); |
| 615 | mr_asprintf(¤t_master_file, incoming + 8); |
616 | 616 | |
617 | 617 | p = current_subset_file; |
… |
… |
|
641 | 641 | if (i < 0) { // read another subset file in. |
642 | 642 | log_msg(my_depth, "Reading next subset line in\n\n"); |
643 | | getline(¤t_subset_file, &n, faclin); |
| 643 | mr_getline(¤t_subset_file, &n, faclin); |
644 | 644 | continue; |
645 | 645 | } |
… |
… |
|
648 | 648 | fputs(incoming, pout); |
649 | 649 | } |
650 | | getline(&incoming, &n, pin); |
| 650 | mr_getline(&incoming, &n, pin); |
651 | 651 | if (!i) { |
652 | 652 | log_msg(my_depth, "Copying master %s", q); |
… |
… |
|
661 | 661 | fputs(incoming, pout); |
662 | 662 | } |
663 | | getline(&incoming, &n, pin); |
| 663 | mr_getline(&incoming, &n, pin); |
664 | 664 | } |
665 | 665 | if (!i) { |
666 | | getline(¤t_subset_file, &n, faclin); |
667 | | } |
668 | | paranoid_free(current_master_file); |
669 | | } |
670 | | paranoid_free(current_subset_file); |
| 666 | mr_getline(¤t_subset_file, &n, faclin); |
| 667 | } |
| 668 | mr_free(current_master_file); |
| 669 | } |
| 670 | mr_free(current_subset_file); |
671 | 671 | |
672 | 672 | while (!feof(pin)) { |
673 | | getline(&incoming, &n, pin); |
674 | | } |
675 | | paranoid_free(incoming); |
| 673 | mr_getline(&incoming, &n, pin); |
| 674 | } |
| 675 | mr_free(incoming); |
676 | 676 | fclose(faclin); |
677 | 677 | pclose(pin); |
… |
… |
|
681 | 681 | |
682 | 682 | unlink(masklist); |
683 | | paranoid_free(masklist); |
| 683 | mr_free(masklist); |
684 | 684 | |
685 | 685 | return (retval); |
… |
… |
|
719 | 719 | assert(bkpinfo != NULL); |
720 | 720 | |
721 | | asprintf(&cfg_fname, "%s/mondo-restore.cfg", bkpinfo->tmpdir); |
| 721 | mr_asprintf(&cfg_fname, "%s/mondo-restore.cfg", bkpinfo->tmpdir); |
722 | 722 | read_cfg_var(cfg_fname, "last-filelist-number", val_sz); |
723 | 723 | val_i = atoi(val_sz); |
724 | | paranoid_free(val_sz); |
| 724 | mr_free(val_sz); |
725 | 725 | |
726 | 726 | if (val_i <= 0) { |
727 | 727 | val_i = 500; |
728 | 728 | } |
729 | | paranoid_free(cfg_fname); |
| 729 | mr_free(cfg_fname); |
730 | 730 | return (val_i); |
731 | 731 | } |
… |
… |
|
866 | 866 | } |
867 | 867 | log_to_screen(_("Loading filelist")); |
868 | | asprintf(&command_to_open_fname, "gzip -dc %s", filelist_fname); |
869 | | asprintf(&tmp, "zcat %s | wc -l", filelist_fname); |
| 868 | mr_asprintf(&command_to_open_fname, "gzip -dc %s", filelist_fname); |
| 869 | mr_asprintf(&tmp, "zcat %s | wc -l", filelist_fname); |
870 | 870 | log_msg(6, "tmp = %s", tmp); |
871 | 871 | tmp1 = call_program_and_get_last_line_of_output(tmp); |
872 | | paranoid_free(tmp); |
| 872 | mr_free(tmp); |
873 | 873 | |
874 | 874 | lines_in_filelist = atol(tmp1); |
875 | | paranoid_free(tmp1); |
| 875 | mr_free(tmp1); |
876 | 876 | |
877 | 877 | if (lines_in_filelist < 3) { |
… |
… |
|
893 | 893 | return (NULL); |
894 | 894 | } |
895 | | paranoid_free(command_to_open_fname); |
| 895 | mr_free(command_to_open_fname); |
896 | 896 | |
897 | 897 | open_evalcall_form(_("Loading filelist from disk")); |
898 | | for (getline(&fname, &n, pin); !feof(pin); getline(&fname, &n, pin)) { |
| 898 | for (mr_getline(&fname, &n, pin); !feof(pin); mr_getline(&fname, &n, pin)) { |
899 | 899 | if ((fname[strlen(fname) - 1] == 13 |
900 | 900 | || fname[strlen(fname) - 1] == 10) && strlen(fname) > 0) { |
… |
… |
|
908 | 908 | continue; |
909 | 909 | } |
910 | | asprintf(&tmp, fname); |
| 910 | mr_asprintf(&tmp, fname); |
911 | 911 | tmp[pos_in_fname] = '\0'; |
912 | 912 | if (strlen(tmp)) { |
913 | 913 | add_string_at_node(filelist, tmp); |
914 | 914 | } |
915 | | paranoid_free(tmp); |
| 915 | mr_free(tmp); |
916 | 916 | } |
917 | 917 | add_string_at_node(filelist, fname); |
… |
… |
|
921 | 921 | } |
922 | 922 | } |
923 | | paranoid_free(fname); |
| 923 | mr_free(fname); |
924 | 924 | paranoid_pclose(pin); |
925 | 925 | close_evalcall_form(); |
… |
… |
|
1352 | 1352 | if (!depth) { |
1353 | 1353 | malloc_string(find_skeleton_marker); |
1354 | | asprintf(&find_excludes, " "); |
| 1354 | mr_asprintf(&find_excludes, " "); |
1355 | 1355 | while((token = mr_strtok (sth, delims, &lastpos))) { |
1356 | | asprintf(&strtmp,"%s", find_excludes); |
1357 | | paranoid_free(find_excludes); |
1358 | | asprintf(&find_excludes,"%s -path %s -prune -o", strtmp, token); |
1359 | | paranoid_free(strtmp); |
1360 | | paranoid_free(token); |
| 1356 | mr_asprintf(&strtmp,"%s", find_excludes); |
| 1357 | mr_free(find_excludes); |
| 1358 | mr_asprintf(&find_excludes,"%s -path %s -prune -o", strtmp, token); |
| 1359 | mr_free(strtmp); |
| 1360 | mr_free(token); |
1361 | 1361 | } |
1362 | 1362 | #if linux |
1363 | 1363 | // 2.6 has /sys as a proc-type thing -- must be excluded |
1364 | | asprintf(&strtmp, |
| 1364 | mr_asprintf(&strtmp, |
1365 | 1365 | "find %s -maxdepth %d -fstype mvfs -prune -o -path /dev/shm -prune -o %s -type d -print > %s 2> /dev/null", |
1366 | 1366 | dir, MAX_SKEL_DEPTH, find_excludes, skeleton_filelist); |
1367 | 1367 | #else |
1368 | 1368 | // On BSD, for example, /sys is the kernel sources -- don't exclude |
1369 | | asprintf(&strtmp, |
| 1369 | mr_asprintf(&strtmp, |
1370 | 1370 | "find %s -maxdepth %d -fstype mvfs -prune -o -path /proc -prune -o %s -type d -print > %s 2> /dev/null", |
1371 | 1371 | dir, MAX_SKEL_DEPTH, find_excludes, skeleton_filelist); |
1372 | 1372 | #endif |
1373 | | paranoid_free(find_excludes); |
| 1373 | mr_free(find_excludes); |
1374 | 1374 | log_msg(5, "find command = %s", strtmp); |
1375 | 1375 | system(strtmp); |
1376 | | paranoid_free(strtmp); |
1377 | | paranoid_free(tmp); |
1378 | | |
1379 | | asprintf(&tmp, "wc -l %s | awk '{print $1;}'", skeleton_filelist); |
| 1376 | mr_free(strtmp); |
| 1377 | mr_free(tmp); |
| 1378 | |
| 1379 | mr_asprintf(&tmp, "wc -l %s | awk '{print $1;}'", skeleton_filelist); |
1380 | 1380 | tmp1 = call_program_and_get_last_line_of_output(tmp); |
1381 | | paranoid_free(tmp); |
| 1381 | mr_free(tmp); |
1382 | 1382 | |
1383 | 1383 | g_skeleton_entries = 1 + atol(tmp1); |
1384 | | paranoid_free(tmp1); |
1385 | | |
1386 | | asprintf(&name_of_evalcall_form, "Making catalog of %s", dir); |
| 1384 | mr_free(tmp1); |
| 1385 | |
| 1386 | mr_asprintf(&name_of_evalcall_form, "Making catalog of %s", dir); |
1387 | 1387 | open_evalcall_form(name_of_evalcall_form); |
1388 | 1388 | find_skeleton_marker[0] = '\0'; |
… |
… |
|
1410 | 1410 | #ifndef _XWIN |
1411 | 1411 | if (!g_text_mode) { |
1412 | | asprintf(&tmp, _("Reading %-68s"), dir); |
| 1412 | mr_asprintf(&tmp, _("Reading %-68s"), dir); |
1413 | 1413 | newtDrawRootText(0, g_noof_rows - 3, tmp); |
1414 | | paranoid_free(tmp); |
| 1414 | mr_free(tmp); |
1415 | 1415 | } |
1416 | 1416 | #endif |
… |
… |
|
1424 | 1424 | // log_msg(0, "Cataloguing %s", dir); |
1425 | 1425 | if (sth[0] == ' ') { |
1426 | | asprintf(&skip_these, "%s", sth); |
| 1426 | mr_asprintf(&skip_these, "%s", sth); |
1427 | 1427 | } else { |
1428 | | asprintf(&skip_these, " %s ", sth); |
1429 | | } |
1430 | | asprintf(&new_with_spaces, " %s ", dir); |
| 1428 | mr_asprintf(&skip_these, " %s ", sth); |
| 1429 | } |
| 1430 | mr_asprintf(&new_with_spaces, " %s ", dir); |
1431 | 1431 | if ((dip = opendir(dir)) == NULL) { |
1432 | 1432 | log_OS_error("opendir"); |
… |
… |
|
1438 | 1438 | i++; |
1439 | 1439 | if (strcmp(dir, "/")) { |
1440 | | asprintf(&new, "%s/%s", dir, dit->d_name); |
| 1440 | mr_asprintf(&new, "%s/%s", dir, dit->d_name); |
1441 | 1441 | } else { |
1442 | | asprintf(&new, "%s%s", dir, dit->d_name); |
| 1442 | mr_asprintf(&new, "%s%s", dir, dit->d_name); |
1443 | 1443 | } |
1444 | | paranoid_free(new_with_spaces); |
1445 | | asprintf(&new_with_spaces, " %s ", new); |
| 1444 | mr_free(new_with_spaces); |
| 1445 | mr_asprintf(&new_with_spaces, " %s ", new); |
1446 | 1446 | /* BERLIOS: Old code |
1447 | 1447 | new_with_spaces[0] = ' '; |
… |
… |
|
1466 | 1466 | counter = 0; |
1467 | 1467 | uberctr++; |
1468 | | asprintf(&tmp, " %c ", |
| 1468 | mr_asprintf(&tmp, " %c ", |
1469 | 1469 | special_dot_char(uberctr)); |
1470 | 1470 | #ifndef _XWIN |
… |
… |
|
1474 | 1474 | newtRefresh(); |
1475 | 1475 | } |
1476 | | paranoid_free(tmp); |
| 1476 | mr_free(tmp); |
1477 | 1477 | #endif |
1478 | 1478 | } |
… |
… |
|
1481 | 1481 | } |
1482 | 1482 | } |
1483 | | paranoid_free(new); |
1484 | | } |
1485 | | } |
1486 | | paranoid_free(new_with_spaces); |
1487 | | paranoid_free(skip_these); |
| 1483 | mr_free(new); |
| 1484 | } |
| 1485 | } |
| 1486 | mr_free(new_with_spaces); |
| 1487 | mr_free(skip_these); |
1488 | 1488 | |
1489 | 1489 | if (dip) { |
… |
… |
|
1495 | 1495 | if (!depth) { |
1496 | 1496 | close_evalcall_form(); |
1497 | | paranoid_free(name_of_evalcall_form); |
1498 | | paranoid_free(find_skeleton_marker); |
| 1497 | mr_free(name_of_evalcall_form); |
| 1498 | mr_free(find_skeleton_marker); |
1499 | 1499 | unlink(skeleton_filelist); |
1500 | 1500 | log_msg(5, "g_skeleton_entries = %ld", g_skeleton_entries); |
… |
… |
|
1565 | 1565 | |
1566 | 1566 | // The pathname to the skeleton filelist, used to give better progress reporting for mondo_makefilelist(). |
1567 | | asprintf(&sz_datefile, sz_datefile_wildcard, 0); |
| 1567 | mr_asprintf(&sz_datefile, sz_datefile_wildcard, 0); |
1568 | 1568 | if (!include_paths && !userdef_filelist) { |
1569 | 1569 | fatal_error |
… |
… |
|
1571 | 1571 | } |
1572 | 1572 | // make hole for filelist |
1573 | | asprintf(&command, "mkdir -p %s/archives", scratchdir); |
| 1573 | mr_asprintf(&command, "mkdir -p %s/archives", scratchdir); |
1574 | 1574 | paranoid_system(command); |
1575 | | paranoid_free(command); |
1576 | | |
1577 | | asprintf(&sz_filelist, "%s/tmpfs/filelist.full", tmpdir); |
| 1575 | mr_free(command); |
| 1576 | |
| 1577 | mr_asprintf(&sz_filelist, "%s/tmpfs/filelist.full", tmpdir); |
1578 | 1578 | make_hole_for_file(sz_filelist); |
1579 | 1579 | |
1580 | 1580 | if (differential == 0) { |
1581 | 1581 | // restore last good datefile if it exists |
1582 | | asprintf(&command, "cp -f %s.aborted %s", sz_datefile, |
| 1582 | mr_asprintf(&command, "cp -f %s.aborted %s", sz_datefile, |
1583 | 1583 | sz_datefile); |
1584 | 1584 | run_program_and_log_output(command, 3); |
1585 | | paranoid_free(command); |
| 1585 | mr_free(command); |
1586 | 1586 | |
1587 | 1587 | // backup last known good datefile just in case :) |
1588 | 1588 | if (does_file_exist(sz_datefile)) { |
1589 | | asprintf(&command, "mv -f %s %s.aborted", sz_datefile, |
| 1589 | mr_asprintf(&command, "mv -f %s %s.aborted", sz_datefile, |
1590 | 1590 | sz_datefile); |
1591 | 1591 | paranoid_system(command); |
1592 | | paranoid_free(command); |
| 1592 | mr_free(command); |
1593 | 1593 | } |
1594 | 1594 | make_hole_for_file(sz_datefile); |
1595 | 1595 | tmp = call_program_and_get_last_line_of_output("date +%s"); |
1596 | 1596 | write_one_liner_data_file(sz_datefile, tmp); |
1597 | | paranoid_free(tmp); |
| 1597 | mr_free(tmp); |
1598 | 1598 | } else if (lstat(sz_datefile, &statbuf)) { |
1599 | 1599 | log_msg(2, |
… |
… |
|
1605 | 1605 | log_msg(2, "Differential backup. Yay."); |
1606 | 1606 | } |
1607 | | paranoid_free(sz_datefile); |
| 1607 | mr_free(sz_datefile); |
1608 | 1608 | |
1609 | 1609 | // use user-specified filelist (if specified) |
… |
… |
|
1612 | 1612 | "Using the user-specified filelist - %s - instead of calculating one", |
1613 | 1613 | userdef_filelist); |
1614 | | asprintf(&command, "cp -f %s %s", userdef_filelist, sz_filelist); |
| 1614 | mr_asprintf(&command, "cp -f %s %s", userdef_filelist, sz_filelist); |
1615 | 1615 | if (run_program_and_log_output(command, 3)) { |
1616 | 1616 | fatal_error("Failed to copy user-specified filelist"); |
1617 | 1617 | } |
1618 | | paranoid_free(command); |
| 1618 | mr_free(command); |
1619 | 1619 | } else { |
1620 | 1620 | log_msg(2, "include_paths = '%s'", include_paths); |
… |
… |
|
1623 | 1623 | tmp1 = call_program_and_get_last_line_of_output("locate /hiberfil.sys 2> /dev/null"); |
1624 | 1624 | tmp2 = call_program_and_get_last_line_of_output("locate /pagefile.sys 2> /dev/null"); |
1625 | | asprintf(&exclude_paths, " %s %s %s %s %s %s . .. \ |
| 1625 | mr_asprintf(&exclude_paths, " %s %s %s %s %s %s . .. \ |
1626 | 1626 | " MNT_CDROM " " MNT_FLOPPY " /media/cdrom /media/cdrecorder \ |
1627 | 1627 | /proc /sys /tmp /var/cache/mondo /var/cache/mindi", excp, tmp, tmp1, tmp2, (tmpdir[0] == '/' && tmpdir[1] == '/') ? (tmpdir + 1) : tmpdir, (scratchdir[0] == '/' && scratchdir[1] == '/') ? (scratchdir + 1) : scratchdir); |
1628 | | paranoid_free(tmp); |
1629 | | paranoid_free(tmp1); |
1630 | | paranoid_free(tmp2); |
| 1628 | mr_free(tmp); |
| 1629 | mr_free(tmp1); |
| 1630 | mr_free(tmp2); |
1631 | 1631 | |
1632 | 1632 | log_msg(2, "Excluding paths = '%s'", exclude_paths); |
1633 | 1633 | log_msg(2, |
1634 | 1634 | "Generating skeleton filelist so that we can track our progress"); |
1635 | | asprintf(&skeleton_filelist, "%s/tmpfs/skeleton.txt", tmpdir); |
| 1635 | mr_asprintf(&skeleton_filelist, "%s/tmpfs/skeleton.txt", tmpdir); |
1636 | 1636 | make_hole_for_file(skeleton_filelist); |
1637 | 1637 | |
… |
… |
|
1661 | 1661 | } |
1662 | 1662 | paranoid_fclose(fout); |
1663 | | paranoid_free(skeleton_filelist); |
1664 | | paranoid_free(exclude_paths); |
| 1663 | mr_free(skeleton_filelist); |
| 1664 | mr_free(exclude_paths); |
1665 | 1665 | } |
1666 | 1666 | log_msg(2, "Copying new filelist to scratchdir"); |
1667 | | asprintf(&command, "mkdir -p %s/archives", scratchdir); |
| 1667 | mr_asprintf(&command, "mkdir -p %s/archives", scratchdir); |
1668 | 1668 | paranoid_system(command); |
1669 | | paranoid_free(command); |
1670 | | |
1671 | | asprintf(&command, "cp -f %s %s/archives/", sz_filelist, scratchdir); |
| 1669 | mr_free(command); |
| 1670 | |
| 1671 | mr_asprintf(&command, "cp -f %s %s/archives/", sz_filelist, scratchdir); |
1672 | 1672 | paranoid_system(command); |
1673 | | paranoid_free(command); |
1674 | | |
1675 | | asprintf(&command, "mv -f %s %s", sz_filelist, tmpdir); |
| 1673 | mr_free(command); |
| 1674 | |
| 1675 | mr_asprintf(&command, "mv -f %s %s", sz_filelist, tmpdir); |
1676 | 1676 | paranoid_system(command); |
1677 | | paranoid_free(command); |
1678 | | paranoid_free(sz_filelist); |
| 1677 | mr_free(command); |
| 1678 | mr_free(sz_filelist); |
1679 | 1679 | |
1680 | 1680 | log_msg(2, "Exiting"); |
… |
… |
|
1777 | 1777 | } |
1778 | 1778 | while (!feof(fin)) { |
1779 | | getline(&fname, &len, fin); |
| 1779 | mr_getline(&fname, &len, fin); |
1780 | 1780 | if (!use_star) { |
1781 | 1781 | if (fname[0] == '/') { |
1782 | | asprintf(&tmp, fname); |
| 1782 | mr_asprintf(&tmp, fname); |
1783 | 1783 | } else { |
1784 | | asprintf(&tmp, "/%s", fname); |
| 1784 | mr_asprintf(&tmp, "/%s", fname); |
1785 | 1785 | } |
1786 | | paranoid_free(fname); |
| 1786 | mr_free(fname); |
1787 | 1787 | fname = tmp; |
1788 | 1788 | } |
… |
… |
|
1796 | 1796 | if (found_node->selected) { |
1797 | 1797 | if (fname[0] == '/') { |
1798 | | asprintf(&tmp, fname + 1); |
1799 | | paranoid_free(fname); |
| 1798 | mr_asprintf(&tmp, fname + 1); |
| 1799 | mr_free(fname); |
1800 | 1800 | fname = tmp; |
1801 | 1801 | } |
… |
… |
|
1803 | 1803 | turn_wildcard_chars_into_literal_chars(tmp, fname); |
1804 | 1804 | fprintf(fout, "%s\n", tmp); |
1805 | | paranoid_free(tmp); |
| 1805 | mr_free(tmp); |
1806 | 1806 | retval++; |
1807 | 1807 | } |
1808 | 1808 | } |
1809 | | paranoid_free(fname); |
| 1809 | mr_free(fname); |
1810 | 1810 | } |
1811 | 1811 | paranoid_fclose(fout); |
… |
… |
|
1836 | 1836 | return (1); |
1837 | 1837 | } |
1838 | | for (getline(&tmp, &n, fin); !feof(fin); getline(&tmp, &n, fin)) { |
| 1838 | for (mr_getline(&tmp, &n, fin); !feof(fin); mr_getline(&tmp, &n, fin)) { |
1839 | 1839 | if (!tmp[0]) { |
1840 | 1840 | continue; |
… |
… |
|
1861 | 1861 | } |
1862 | 1862 | paranoid_fclose(fin); |
1863 | | paranoid_free(tmp); |
| 1863 | mr_free(tmp); |
1864 | 1864 | return (0); |
1865 | 1865 | } |
-
r783
|
r900
|
|
48 | 48 | extern int read_one_liner_data_file(char *fname, char *contents); |
49 | 49 | extern int mode_of_file(char *fname); |
50 | | extern void paranoid_alloc(char *alloc, char *orig); |
-
r839
|
r900
|
|
18 | 18 | #include "libmondo-fork-EXT.h" |
19 | 19 | #include "libmondo-string-EXT.h" |
| 20 | #include "mr_mem.h" |
20 | 21 | |
21 | 22 | /*@unused@*/ |
… |
… |
|
59 | 60 | |
60 | 61 | if (does_file_exist(filename)) { |
61 | | asprintf(&command, "md5sum \"%s\"", filename); |
| 62 | mr_asprintf(&command, "md5sum \"%s\"", filename); |
62 | 63 | fin = popen(command, "r"); |
63 | | paranoid_free(command); |
| 64 | mr_free(command); |
64 | 65 | |
65 | 66 | if (fin) { |
66 | | (void) getline(&output, &n, fin); |
| 67 | mr_getline(&output, &n, fin); |
67 | 68 | p = strchr(output, ' '); |
68 | 69 | paranoid_pclose(fin); |
69 | 70 | } |
70 | 71 | } else { |
71 | | asprintf(&tmp, "File '%s' not found; cannot calc checksum", |
| 72 | mr_asprintf(&tmp, "File '%s' not found; cannot calc checksum", |
72 | 73 | filename); |
73 | 74 | log_it(tmp); |
74 | | paranoid_free(tmp); |
| 75 | mr_free(tmp); |
75 | 76 | } |
76 | 77 | if (p) { |
… |
… |
|
106 | 107 | assert_string_is_neither_NULL_nor_zerolength(filename); |
107 | 108 | if (!does_file_exist(filename)) { |
108 | | asprintf(&tmp, |
| 109 | mr_asprintf(&tmp, |
109 | 110 | "%s does not exist, so I cannot found the number of lines in it", |
110 | 111 | filename); |
111 | 112 | log_it(tmp); |
112 | | paranoid_free(tmp); |
| 113 | mr_free(tmp); |
113 | 114 | return (0); |
114 | 115 | } |
115 | | asprintf(&command, "cat %s | wc -l", filename); |
| 116 | mr_asprintf(&command, "cat %s | wc -l", filename); |
116 | 117 | if (!does_file_exist(filename)) { |
117 | 118 | return (-1); |
118 | 119 | } |
119 | 120 | fin = popen(command, "r"); |
120 | | paranoid_free(command); |
| 121 | mr_free(command); |
121 | 122 | |
122 | 123 | if (fin) { |
… |
… |
|
124 | 125 | noof_lines = 0; |
125 | 126 | } else { |
126 | | (void) getline(&incoming, &n, fin); |
| 127 | mr_getline(&incoming, &n, fin); |
127 | 128 | while (strlen(incoming) > 0 |
128 | 129 | && incoming[strlen(incoming) - 1] < 32) { |
… |
… |
|
130 | 131 | } |
131 | 132 | noof_lines = atol(incoming); |
132 | | paranoid_free(incoming); |
| 133 | mr_free(incoming); |
133 | 134 | } |
134 | 135 | paranoid_pclose(fin); |
… |
… |
|
189 | 190 | assert_string_is_neither_NULL_nor_zerolength(inout); |
190 | 191 | |
191 | | asprintf(&infname, "%s.in", inout); |
192 | | |
193 | | asprintf(&tmp, "cp -f %s %s", inout, infname); |
| 192 | mr_asprintf(&infname, "%s.in", inout); |
| 193 | |
| 194 | mr_asprintf(&tmp, "cp -f %s %s", inout, infname); |
194 | 195 | run_program_and_log_output(tmp, FALSE); |
195 | | paranoid_free(tmp); |
| 196 | mr_free(tmp); |
196 | 197 | |
197 | 198 | if (!(fin = fopen(infname, "r"))) { |
198 | 199 | log_OS_error("Unable to openin infname"); |
199 | | paranoid_free(infname); |
| 200 | mr_free(infname); |
200 | 201 | return; |
201 | 202 | } |
202 | 203 | |
203 | | asprintf(&outfname, "%s", inout); |
| 204 | mr_asprintf(&outfname, "%s", inout); |
204 | 205 | if (!(fout = fopen(outfname, "w"))) { |
205 | 206 | log_OS_error("Unable to openout outfname"); |
206 | | paranoid_free(outfname); |
| 207 | mr_free(outfname); |
207 | 208 | return; |
208 | 209 | } |
209 | | paranoid_free(outfname); |
210 | | |
211 | | for (getline(&incoming, &n, fin); !feof(fin); |
212 | | getline(&incoming, &n, fin)) { |
| 210 | mr_free(outfname); |
| 211 | |
| 212 | for (mr_getline(&incoming, &n, fin); !feof(fin); |
| 213 | mr_getline(&incoming, &n, fin)) { |
213 | 214 | i = strlen(incoming) - 1; |
214 | 215 | if (i >= 0 && incoming[i] < 32) { |
… |
… |
|
218 | 219 | fprintf(fout, "%s\n", incoming); |
219 | 220 | } else { |
220 | | asprintf(&tmp, "Excluding '%s'-nonexistent\n", incoming); |
| 221 | mr_asprintf(&tmp, "Excluding '%s'-nonexistent\n", incoming); |
221 | 222 | log_it(tmp); |
222 | | paranoid_free(tmp); |
223 | | } |
224 | | } |
225 | | paranoid_free(incoming); |
| 223 | mr_free(tmp); |
| 224 | } |
| 225 | } |
| 226 | mr_free(incoming); |
226 | 227 | paranoid_fclose(fout); |
227 | 228 | paranoid_fclose(fin); |
228 | 229 | unlink(infname); |
229 | | paranoid_free(infname); |
| 230 | mr_free(infname); |
230 | 231 | } |
231 | 232 | |
… |
… |
|
249 | 250 | // If we didn't get anything back, check whether mindi raised a fatal error |
250 | 251 | if (kernel == NULL) { |
251 | | asprintf(&command, "grep 'Fatal error' /var/log/mindi.log"); |
| 252 | mr_asprintf(&command, "grep 'Fatal error' /var/log/mindi.log"); |
252 | 253 | tmp = call_program_and_get_last_line_of_output(command); |
253 | 254 | if (strlen(tmp) > 1) { |
… |
… |
|
255 | 256 | fatal_error("Mindi gave a fatal error. Please check '/var/log/mindi.log'."); |
256 | 257 | } |
257 | | paranoid_free(command); |
258 | | paranoid_free(tmp); |
| 258 | mr_free(command); |
| 259 | mr_free(tmp); |
259 | 260 | } |
260 | 261 | |
… |
… |
|
303 | 304 | assert_string_is_neither_NULL_nor_zerolength(fname); |
304 | 305 | |
305 | | asprintf(&command, "which %s 2> /dev/null", fname); |
| 306 | mr_asprintf(&command, "which %s 2> /dev/null", fname); |
306 | 307 | incoming = call_program_and_get_last_line_of_output(command); |
307 | | paranoid_free(command); |
| 308 | mr_free(command); |
308 | 309 | |
309 | 310 | if (incoming == NULL) { |
… |
… |
|
311 | 312 | return (NULL); // forget it :) |
312 | 313 | } |
313 | | asprintf(&command, |
| 314 | mr_asprintf(&command, |
314 | 315 | "file %s 2> /dev/null | cut -d':' -f1 2> /dev/null", |
315 | 316 | incoming); |
316 | | paranoid_free(incoming); |
| 317 | mr_free(incoming); |
317 | 318 | |
318 | 319 | incoming = call_program_and_get_last_line_of_output(command); |
319 | | paranoid_free(command); |
| 320 | mr_free(command); |
320 | 321 | } |
321 | 322 | if (incoming == NULL) // yes, it is == '\0' twice, not once :) |
322 | 323 | { |
323 | | asprintf(&command, "dirname %s 2> /dev/null", incoming); |
324 | | paranoid_free(incoming); |
| 324 | mr_asprintf(&command, "dirname %s 2> /dev/null", incoming); |
| 325 | mr_free(incoming); |
325 | 326 | |
326 | 327 | incoming = call_program_and_get_last_line_of_output(command); |
327 | | paranoid_free(command); |
| 328 | mr_free(command); |
328 | 329 | } |
329 | 330 | output = incoming; |
… |
… |
|
332 | 333 | log_msg(4, "find_home_of_exe () --- Found %s at %s", fname, output); |
333 | 334 | } else { |
334 | | paranoid_free(output); |
| 335 | mr_free(output); |
335 | 336 | log_msg(4, "find_home_of_exe() --- Could not find %s", fname); |
336 | 337 | } |
… |
… |
|
395 | 396 | && !strstr(err_log_lines[i], "% done"); i--); |
396 | 397 | if (i < 0) { |
397 | | asprintf(&command, |
| 398 | mr_asprintf(&command, |
398 | 399 | "tail -n3 %s | grep -Fi \"%c\" | tail -n1 | awk '{print $0;}'", |
399 | 400 | filename, '%'); |
400 | 401 | lastline = call_program_and_get_last_line_of_output(command); |
401 | | paranoid_free(command); |
| 402 | mr_free(command); |
402 | 403 | if (!lastline) { |
403 | 404 | return (0); |
404 | 405 | } |
405 | 406 | } else { |
406 | | asprintf(&lastline, err_log_lines[i]); |
| 407 | mr_asprintf(&lastline, err_log_lines[i]); |
407 | 408 | } |
408 | 409 | |
… |
… |
|
412 | 413 | } |
413 | 414 | if (!p) { |
414 | | paranoid_free(lastline); |
| 415 | mr_free(lastline); |
415 | 416 | return (0); |
416 | 417 | } |
… |
… |
|
421 | 422 | } |
422 | 423 | i = atoi(p); |
423 | | paranoid_free(lastline); |
| 424 | mr_free(lastline); |
424 | 425 | |
425 | 426 | return (i); |
… |
… |
|
447 | 448 | |
448 | 449 | if (!does_file_exist(filename)) { |
449 | | asprintf(&tmp, _("Tring to get last line of nonexistent file (%s)"), |
| 450 | mr_asprintf(&tmp, _("Tring to get last line of nonexistent file (%s)"), |
450 | 451 | filename); |
451 | 452 | log_it(tmp); |
452 | | paranoid_free(tmp); |
| 453 | mr_free(tmp); |
453 | 454 | return (NULL); |
454 | 455 | } |
455 | | asprintf(&command, "tail -n1 %s", filename); |
| 456 | mr_asprintf(&command, "tail -n1 %s", filename); |
456 | 457 | fin = popen(command, "r"); |
457 | | paranoid_free(command); |
458 | | |
459 | | getline(&output, &n, fin); |
| 458 | mr_free(command); |
| 459 | |
| 460 | mr_getline(&output, &n, fin); |
460 | 461 | paranoid_pclose(fin); |
461 | 462 | while (strlen(output) > 0 && output[strlen(output) - 1] < 32) { |
… |
… |
|
504 | 505 | |
505 | 506 | assert_string_is_neither_NULL_nor_zerolength(outdir_fname); |
506 | | asprintf(&tmp, "mkdir -p %s", outdir_fname); |
| 507 | mr_asprintf(&tmp, "mkdir -p %s", outdir_fname); |
507 | 508 | res = system(tmp); |
508 | | paranoid_free(tmp); |
| 509 | mr_free(tmp); |
509 | 510 | return (res); |
510 | 511 | } |
… |
… |
|
532 | 533 | assert(!strstr(outfile_fname, "/dev/cdrom")); |
533 | 534 | |
534 | | asprintf(&command, "mkdir -p \"%s\" 2> /dev/null", outfile_fname); |
| 535 | mr_asprintf(&command, "mkdir -p \"%s\" 2> /dev/null", outfile_fname); |
535 | 536 | res += system(command); |
536 | | paranoid_free(command); |
537 | | |
538 | | asprintf(&command, "rmdir \"%s\" 2> /dev/null", outfile_fname); |
| 537 | mr_free(command); |
| 538 | |
| 539 | mr_asprintf(&command, "rmdir \"%s\" 2> /dev/null", outfile_fname); |
539 | 540 | res += system(command); |
540 | | paranoid_free(command); |
541 | | |
542 | | asprintf(&command, "rm -f \"%s\" 2> /dev/null", outfile_fname); |
| 541 | mr_free(command); |
| 542 | |
| 543 | mr_asprintf(&command, "rm -f \"%s\" 2> /dev/null", outfile_fname); |
543 | 544 | res += system(command); |
544 | | paranoid_free(command); |
| 545 | mr_free(command); |
545 | 546 | unlink(outfile_fname); |
546 | 547 | return (0); |
… |
… |
|
575 | 576 | return (0); |
576 | 577 | } |
577 | | (void) getline(&incoming, &n, fin); |
| 578 | mr_getline(&incoming, &n, fin); |
578 | 579 | while (!feof(fin)) { |
579 | 580 | if (strstr(incoming, wildcard)) { |
580 | 581 | matches++; |
581 | 582 | } |
582 | | (void) getline(&incoming, &n, fin); |
| 583 | mr_getline(&incoming, &n, fin); |
583 | 584 | } |
584 | 585 | paranoid_fclose(fin); |
585 | | paranoid_free(incoming); |
| 586 | mr_free(incoming); |
586 | 587 | return (matches); |
587 | 588 | } |
… |
… |
|
603 | 604 | FILE *fin; |
604 | 605 | |
605 | | asprintf(&lockfile_fname, "/var/run/monitas-%s.pid", name_str); |
| 606 | mr_asprintf(&lockfile_fname, "/var/run/monitas-%s.pid", name_str); |
606 | 607 | if (!pid) { |
607 | 608 | log_it("Unregistering PID"); |
… |
… |
|
609 | 610 | log_it("Error unregistering PID"); |
610 | 611 | } |
611 | | paranoid_free(lockfile_fname); |
| 612 | mr_free(lockfile_fname); |
612 | 613 | return; |
613 | 614 | } |
614 | 615 | if (does_file_exist(lockfile_fname)) { |
615 | 616 | if ((fin = fopen(lockfile_fname, "r"))) { |
616 | | (void) getline(&tmp, &n, fin); |
| 617 | mr_getline(&tmp, &n, fin); |
617 | 618 | paranoid_fclose(fin); |
618 | 619 | } else { |
… |
… |
|
620 | 621 | } |
621 | 622 | pid = (pid_t) atol(tmp); |
622 | | paranoid_free(tmp); |
623 | | |
624 | | asprintf(&tmp, "ps %ld > /dev/null 2> /dev/null", (long int) pid); |
| 623 | mr_free(tmp); |
| 624 | |
| 625 | mr_asprintf(&tmp, "ps %ld > /dev/null 2> /dev/null", (long int) pid); |
625 | 626 | res = system(tmp); |
626 | | paranoid_free(tmp); |
| 627 | mr_free(tmp); |
627 | 628 | if (!res) { |
628 | 629 | log_it |
… |
… |
|
631 | 632 | } |
632 | 633 | } |
633 | | asprintf(&tmp, "echo %ld > %s 2> /dev/null", (long int) getpid(), |
| 634 | mr_asprintf(&tmp, "echo %ld > %s 2> /dev/null", (long int) getpid(), |
634 | 635 | lockfile_fname); |
635 | | paranoid_free(lockfile_fname); |
| 636 | mr_free(lockfile_fname); |
636 | 637 | |
637 | 638 | if (system(tmp)) { |
638 | 639 | fatal_error("Cannot register PID"); |
639 | 640 | } |
640 | | paranoid_free(tmp); |
| 641 | mr_free(tmp); |
641 | 642 | return; |
642 | 643 | } |
… |
… |
|
655 | 656 | long file_len_K = 0L; |
656 | 657 | |
657 | | asprintf(&command, |
| 658 | mr_asprintf(&command, |
658 | 659 | "grep '%s ' %s/mountlist.txt | head -n1 | awk '{print $4;}'", |
659 | 660 | dev, tmpdir); |
… |
… |
|
662 | 663 | file_len_K = atol(sz_res); |
663 | 664 | log_msg(4, "%s --> %s --> %ld", command, sz_res, file_len_K); |
664 | | paranoid_free(command); |
|