Changeset 2325 in MondoRescue for branches/2.2.10/mondo/src/common/libmondo-devices.c
- Timestamp:
- Aug 18, 2009, 3:19:15 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2.10/mondo/src/common/libmondo-devices.c
r2324 r2325 64 64 65 65 66 void set_g_cdrom_and_g_dvd_to_bkpinfo_value() 67 { 68 strcpy(g_cdrom_drive_is_here, bkpinfo->media_device); // just in case 69 strcpy(g_dvd_drive_is_here, bkpinfo->media_device); // just in case 66 void set_g_cdrom_and_g_dvd_to_bkpinfo_value() { 67 68 if (bkpinfo->media_device) { 69 strcpy(g_cdrom_drive_is_here, bkpinfo->media_device); // just in case 70 strcpy(g_dvd_drive_is_here, bkpinfo->media_device); // just in case 71 } 70 72 } 71 73 … … 205 207 int res1 = 0, res2 = 0; 206 208 209 if (dev == NULL) { 210 return (1); 211 } 212 207 213 if (IS_THIS_A_STREAMING_BACKUP(g_backup_media_type) 208 214 && g_backup_media_type != udev) { … … 243 249 char *command = NULL; 244 250 int i; 251 252 if (dev == NULL) { 253 return (1); 254 } 245 255 246 256 #ifdef __FreeBSD__ … … 429 439 * Try to mount CD-ROM at @p mountpoint. If the CD-ROM is not found or has 430 440 * not been specified, call find_cdrom_device() to find it. 431 * @param bkpinfo The backup information structure. The only field used is @c bkpinfo->media_device.432 441 * @param mountpoint Where to mount the CD-ROM. 433 442 * @return 0 for success, nonzero for failure. 434 443 * @see mount_CDROM_here 435 444 */ 436 int find_and_mount_actual_cd(char *mountpoint) 437 { 445 int find_and_mount_actual_cd(char *mountpoint) { 446 438 447 /*@ buffers ***************************************************** */ 439 448 440 449 /*@ int's ****************************************************** */ 441 450 int res; 442 char *dev ;451 char *dev = NULL; 443 452 char *p = NULL; 444 453 445 454 /*@ end vars **************************************************** */ 446 455 447 malloc_string(dev);448 456 assert(bkpinfo != NULL); 449 457 assert_string_is_neither_NULL_nor_zerolength(mountpoint); 450 458 451 459 if (g_backup_media_type == dvd) { 452 strcpy(dev, g_dvd_drive_is_here); 453 if (!dev[0]) { 454 find_dvd_device(dev, FALSE); 460 if (g_dvd_drive_is_here[0]) { 461 mr_asprintf(dev, "%s", g_dvd_drive_is_here); 462 } 463 if (dev == NULL) { 464 dev = find_dvd_device(); 455 465 } 456 466 } else { 457 strcpy(dev, g_cdrom_drive_is_here); 458 if (!dev[0]) { 459 find_cdrom_device(dev, FALSE); 467 if (g_cdrom_drive_is_here[0]) { 468 mr_asprintf(dev, "%s", g_cdrom_drive_is_here); 469 } 470 if (dev == NULL) { 471 dev = find_cdrom_device(FALSE); 460 472 } 461 473 } … … 465 477 } 466 478 467 if ( !dev[0]|| (res = mount_CDROM_here(dev, mountpoint))) {479 if ((dev == NULL) || (res = mount_CDROM_here(dev, mountpoint))) { 468 480 p = popup_and_get_string ("CD-ROM device", "Please enter your CD-ROM's /dev device",dev); 469 481 if (p == NULL) { … … 479 491 log_msg(1, "mount succeeded with %s", dev); 480 492 } 481 paranoid_free(dev);493 mr_free(dev); 482 494 return (res); 483 495 } … … 493 505 * @return 0 for success, nonzero for failure. 494 506 */ 495 int find_cdrw_device(char *cdrw_device)507 char *find_cdrw_device() 496 508 { 497 509 /*@ buffers ************************ */ … … 499 511 char *cdr_exe = NULL; 500 512 char *command = NULL; 513 char *cdrw_device = NULL; 501 514 502 515 if (g_cdrw_drive_is_here[0]) { 503 strcpy(cdrw_device, g_cdrw_drive_is_here);516 mr_asprintf(cdrw_device, g_cdrw_drive_is_here); 504 517 log_msg(3, "Been there, done that. Returning %s", cdrw_device); 505 return (0);518 return(cdrw_device); 506 519 } 507 520 if (g_backup_media_type == dvd) { 508 log_msg(1, 509 "This is dumb. You're calling find_cdrw_device() but you're backing up to DVD. WTF?"); 510 return (1); 521 log_msg(1, "This is dumb. You're calling find_cdrw_device() but you're backing up to DVD. WTF?"); 522 return(NULL); 511 523 } 512 524 run_program_and_log_output("insmod ide-scsi", -1); … … 524 536 mr_free(tmp); 525 537 mr_free(cdr_exe); 526 return 1;538 return(NULL); 527 539 } else { 528 strcpy(cdrw_device, tmp);540 cdrw_device = tmp; 529 541 log_it("Found CDRW device - %s", cdrw_device); 530 542 strcpy(g_cdrw_drive_is_here, cdrw_device); 531 mr_free(tmp);532 543 mr_free(cdr_exe); 533 return ( 0);544 return (cdrw_device); 534 545 } 535 546 } … … 545 556 * @return 0 for success, nonzero for failure. 546 557 */ 547 int find_cdrom_device(char *output,bool try_to_mount)558 char *find_cdrom_device(bool try_to_mount) 548 559 { 549 560 /*@ pointers **************************************************** */ … … 552 563 char *q; 553 564 char *r; 554 int retval = 0;555 565 556 566 /*@ bool's ****************************************************** */ … … 558 568 559 569 /*@ buffers ***************************************************** */ 560 char *tmp ;570 char *tmp = NULL; 561 571 char *tmp1 = NULL; 572 char *output = NULL; 562 573 char *cdr_exe = NULL; 563 char *phrase_one ;564 char *phrase_two ;574 char *phrase_one = NULL; 575 char *phrase_two = NULL; 565 576 char *command = NULL; 566 577 #ifndef __FreeBSD__ … … 571 582 572 583 /*@ intialize *************************************************** */ 573 malloc_string(tmp); 574 malloc_string(phrase_one); 575 malloc_string(phrase_two); 576 577 output[0] = '\0'; 578 phrase_one[0] = '\0'; 579 phrase_two[0] = '\0'; 584 585 output = NULL; 580 586 #ifndef __FreeBSD__ 581 587 mr_asprintf(dvd_last_resort, "%s", "");; … … 585 591 586 592 if (g_cdrom_drive_is_here[0] && !isdigit(g_cdrom_drive_is_here[0])) { 587 strcpy(output, g_cdrom_drive_is_here);593 mr_asprintf(output, "%s", g_cdrom_drive_is_here); 588 594 log_msg(3, "Been there, done that. Returning %s", output); 589 retval = 0; 590 goto end_of_find_cdrom_device; 595 return(output); 591 596 } 592 597 if (the_last_place_i_found_it[0] != '\0' && !try_to_mount) { 593 strcpy(output, the_last_place_i_found_it); 594 log_msg(3, 595 "find_cdrom_device() --- returning last found location - '%s'", 596 output); 597 retval = 0; 598 goto end_of_find_cdrom_device; 598 mr_asprintf(output, "%s", the_last_place_i_found_it); 599 log_msg(3, "find_cdrom_device() --- returning last found location - '%s'", output); 600 return(output); 599 601 } 600 602 … … 607 609 mr_asprintf(cdr_exe, "dvdrecord"); 608 610 } 609 tmp[0] = '\0'; 611 610 612 if (!find_home_of_exe(cdr_exe)) { 611 strcpy(output, "/dev/cdrom");613 mr_asprintf(output, "/dev/cdrom"); 612 614 log_msg(4, "Can't find cdrecord; assuming %s", output); 615 mr_free(cdr_exe); 613 616 if (!does_device_exist(output)) { 614 617 log_msg(4, "That didn't work. Sorry."); 615 retval = 1;616 goto end_of_find_cdrom_device;618 mr_free(output); 619 return(output); 617 620 } else { 618 retval = 0; 619 goto end_of_find_cdrom_device; 621 return(output); 620 622 } 621 623 } … … 629 631 log_OS_error("Cannot popen command"); 630 632 mr_free(cdr_exe); 631 return (1); 632 } 633 633 return(NULL); 634 } 635 636 malloc_string(phrase_one); 637 phrase_one[0] = '\0'; 638 malloc_string(phrase_two); 639 phrase_two[0] = '\0'; 640 641 malloc_string(tmp); 642 tmp[0] = '\0'; 634 643 for ((void)fgets(tmp, MAX_STR_LEN, fin); !feof(fin); 635 644 (void)fgets(tmp, MAX_STR_LEN, fin)) { … … 656 665 } 657 666 paranoid_pclose(fin); 667 paranoid_free(phrase_one); 658 668 659 669 #ifndef __FreeBSD__ … … 678 688 mr_free(dvd_last_resort); 679 689 mr_asprintf(dvd_last_resort, "/dev/%s", tmp); 680 log_msg(4, 681 "Ignoring '%s' because it's a DVD drive", 682 tmp); 690 log_msg(4, "Ignoring '%s' because it's a DVD drive", tmp); 683 691 } else { 684 sprintf(output, "/dev/%s", tmp);692 mr_asprintf(output, "/dev/%s", tmp); 685 693 found_it = TRUE; 686 694 } … … 691 699 } 692 700 } 701 paranoid_free(phrase_two); 702 paranoid_free(tmp); 693 703 694 704 #endif … … 696 706 if (!found_it) { 697 707 log_msg(4, "OK, approach 2"); 698 if (!(found_it = set_dev_to_this_if_rx_OK(output, "/dev/cdrom"))) { 699 if (! 700 (found_it = 701 set_dev_to_this_if_rx_OK(output, "/dev/cdrom1"))) { 702 if (! 703 (found_it = 704 set_dev_to_this_if_rx_OK(output, "/dev/dvd"))) { 705 if (! 706 (found_it = 707 set_dev_to_this_if_rx_OK(output, "/dev/acd0"))) { 708 if (! 709 (found_it = 710 set_dev_to_this_if_rx_OK(output, 711 "/dev/cd01"))) { 712 if (! 713 (found_it = 714 set_dev_to_this_if_rx_OK(output, 715 "/dev/acd1"))) { 716 if (! 717 (found_it = 718 set_dev_to_this_if_rx_OK(output, 719 "/dev/cd1"))) 720 { 721 retval = 1; 722 goto end_of_find_cdrom_device; 708 if (!(output = set_dev_to_this_if_rx_OK("/dev/cdrom"))) { 709 if (!(output = set_dev_to_this_if_rx_OK("/dev/cdrom1"))) { 710 if (!(output = set_dev_to_this_if_rx_OK("/dev/dvd"))) { 711 if (!(output = set_dev_to_this_if_rx_OK("/dev/acd0"))) { 712 if (!(output = set_dev_to_this_if_rx_OK("/dev/cd01"))) { 713 if (!(output = set_dev_to_this_if_rx_OK("/dev/acd1"))) { 714 if (!(output = set_dev_to_this_if_rx_OK("/dev/cd1"))) { 715 mr_free(cdr_exe); 716 return(NULL); 723 717 } 724 718 } … … 732 726 if (!found_it && strlen(dvd_last_resort) > 0) { 733 727 log_msg(4, "Well, I'll use the DVD - %s - as a last resort", dvd_last_resort); 734 strcpy(output, dvd_last_resort);728 mr_asprintf(output, "%s", dvd_last_resort); 735 729 found_it = TRUE; 736 730 } 737 731 mr_free(dvd_last_resort); 732 738 733 if (found_it) { 739 sprintf(tmp, "grep \"%s=ide-scsi\" /proc/cmdline &> /dev/null", 740 strrchr(output, '/') + 1); 741 if (system(tmp) == 0) { 742 log_msg(4, 743 "%s is not right. It's being SCSI-emulated. Continuing.", 744 output); 734 mr_asprintf(tmp1, "grep \"%s=ide-scsi\" /proc/cmdline &> /dev/null", strrchr(output, '/') + 1); 735 if (system(tmp1) == 0) { 736 log_msg(4, "%s is not right. It's being SCSI-emulated. Continuing.", output); 745 737 found_it = FALSE; 746 output[0] = '\0'; 747 } 738 mr_free(output); 739 } 740 mr_free(tmp1); 748 741 } 749 742 … … 753 746 found_it = FALSE; 754 747 log_msg(4, "OK, I was wrong, I haven't found it... yet."); 748 mr_free(output); 755 749 } 756 750 } … … 758 752 if (!found_it) { 759 753 log_msg(4, "OK, approach 2"); 760 if (!(found_it = set_dev_to_this_if_rx_OK(output, "/dev/scd0"))) { 761 if (!(found_it = set_dev_to_this_if_rx_OK(output, "/dev/sr0"))) { 762 if (! 763 (found_it = 764 set_dev_to_this_if_rx_OK(output, "/dev/cdrom"))) { 765 if (! 766 (found_it = 767 set_dev_to_this_if_rx_OK(output, 768 "/dev/cdrom0"))) { 769 if (! 770 (found_it = 771 set_dev_to_this_if_rx_OK(output, 772 "/dev/cdrom1"))) { 773 if (! 774 (found_it = 775 set_dev_to_this_if_rx_OK(output, 776 "/dev/sr1"))) { 777 if (! 778 (found_it = 779 set_dev_to_this_if_rx_OK(output, 780 "/dev/dvd"))) 781 { 782 if (! 783 (found_it = 784 set_dev_to_this_if_rx_OK(output, 785 g_cdrw_drive_is_here))) 786 { 787 retval = 1; 788 goto end_of_find_cdrom_device; 754 if (!(output = set_dev_to_this_if_rx_OK("/dev/scd0"))) { 755 if (!(output = set_dev_to_this_if_rx_OK("/dev/sr0"))) { 756 if (!(output = set_dev_to_this_if_rx_OK("/dev/cdrom"))) { 757 if (!(output = set_dev_to_this_if_rx_OK("/dev/cdrom0"))) { 758 if (!(output = set_dev_to_this_if_rx_OK("/dev/cdrom1"))) { 759 if (!(output = set_dev_to_this_if_rx_OK("/dev/sr1"))) { 760 if (!(output = set_dev_to_this_if_rx_OK("/dev/dvd"))) { 761 if (!(output = set_dev_to_this_if_rx_OK(g_cdrw_drive_is_here))) { 762 mr_free(cdr_exe); 763 return(NULL); 789 764 } 790 765 } … … 802 777 log_msg(4, "[Cardigans] I've changed my mind"); 803 778 found_it = FALSE; 779 mr_free(output); 804 780 } else { 805 sprintf(tmp, "%s/archives", mountpoint);781 mr_asprintf(tmp1, "%s/archives", mountpoint); 806 782 if (!does_file_exist(tmp)) { 807 783 log_msg(4, "[Cardigans] I'll take it back"); 808 784 found_it = FALSE; 785 mr_free(output); 809 786 } else { 810 787 mr_asprintf(command, "umount %s", output); … … 814 791 log_msg(4, "I'm confident the Mondo CD is in %s", output); 815 792 } 793 mr_free(tmp1); 816 794 } 817 795 } … … 822 800 if (!does_file_exist(output)) { 823 801 log_msg(3, "I still haven't found it."); 824 return (1); 802 mr_free(cdr_exe); 803 mr_free(output); 804 return (NULL); 825 805 } 826 806 log_msg(3, "(find_cdrom_device) --> '%s'", output); 827 807 strcpy(the_last_place_i_found_it, output); 828 808 strcpy(g_cdrom_drive_is_here, output); 829 retval = 0;830 goto end_of_find_cdrom_device;809 mr_free(cdr_exe); 810 return (output); 831 811 } 832 812 833 813 mr_asprintf(command, "%s -scanbus | grep \"[0-9],[0-9],[0-9]\" | grep \"[D|C][V|D]\" | grep -n \"\" | grep \"%s\" | cut -d':' -f2", cdr_exe, g_cdrw_drive_is_here); 814 mr_free(cdr_exe); 815 834 816 log_msg(1, "command=%s", command); 835 817 mr_asprintf(tmp1, "%s", call_program_and_get_last_line_of_output(command)); 836 818 mr_free(command); 837 819 820 mr_free(output); 838 821 if (strlen(tmp1) > 0) { 839 strcpy(output, tmp1);822 mr_asprintf(output, "%s", tmp1); 840 823 log_msg(4, "Finally found it at %s", output); 841 retval = 0;842 824 } else { 843 825 log_msg(4, "Still couldn't find it."); 844 retval = 1;845 826 } 846 827 mr_free(tmp1); 847 828 848 end_of_find_cdrom_device: 849 paranoid_free(tmp); 850 mr_free(cdr_exe); 851 paranoid_free(phrase_one); 852 paranoid_free(phrase_two); 853 return (retval); 854 } 855 856 857 858 859 860 int find_dvd_device(char *output, bool try_to_mount) 829 return (output); 830 } 831 832 833 char *find_dvd_device() 861 834 { 862 835 char *tmp = NULL; 863 int retval = 0, devno = -1; 836 int devno = -1; 837 char *output = NULL; 864 838 865 839 if (g_dvd_drive_is_here[0]) { 866 strcpy(output, g_dvd_drive_is_here);840 mr_asprintf(output, g_dvd_drive_is_here); 867 841 log_msg(3, "Been there, done that. Returning %s", output); 868 return (0); 869 } 870 871 mr_asprintf(tmp, "%s", call_program_and_get_last_line_of_output("dvdrecord -scanbus 2> /dev/null | grep \") '\" | grep -n \"\" | grep DVD | cut -d':' -f1") 872 ); 842 return (output); 843 } 844 845 mr_asprintf(tmp, "%s", call_program_and_get_last_line_of_output("dvdrecord -scanbus 2> /dev/null | grep \") '\" | grep -n \"\" | grep DVD | cut -d':' -f1")); 873 846 log_msg(5, "tmp = '%s'", tmp); 874 847 if (!tmp[0]) … … 882 855 883 856 if (devno >= 0) { 884 retval = 0; 885 sprintf(output, "/dev/scd%d", devno); 857 mr_asprintf(output, "/dev/scd%d", devno); 886 858 strcpy(g_dvd_drive_is_here, output); 887 859 log_msg(2, "I think DVD is at %s", output); 888 860 } else { 889 861 log_msg(2, "I cannot find DVD"); 890 retval = 1; 891 } 892 893 if (try_to_mount) { 894 log_msg(1, "Ignoring the fact that try_to_mount==TRUE"); 895 } 896 return (retval); 862 } 863 864 return (output); 897 865 } 898 866 … … 1079 1047 /*@ end vars **************************************************** */ 1080 1048 1049 if (device_raw == NULL) { 1050 return(FALSE); 1051 } 1052 1081 1053 malloc_string(incoming); 1082 assert(device_raw != NULL);1083 1054 if (device_raw[0] != '/' && !strstr(device_raw, ":/")) { 1084 1055 log_msg(1, "%s needs to have a '/' prefixed - I'll do it", … … 1213 1184 return(1); 1214 1185 } 1215 log_msg(4, "(mount_USB_here --- device=%s, mountpoint=%s", device, 1216 mountpoint); 1186 log_msg(4, "(mount_USB_here --- device=%s, mountpoint=%s", device, mountpoint); 1217 1187 1218 1188 #ifdef __FreeBSD__ … … 1237 1207 * @return 0 for success, nonzero for failure. 1238 1208 */ 1239 int mount_CDROM_here(char *device, c har *mountpoint)1209 int mount_CDROM_here(char *device, const char *mountpoint) 1240 1210 { 1241 1211 /*@ buffer ****************************************************** */ … … 1248 1218 #endif 1249 1219 1250 assert_string_is_neither_NULL_nor_zerolength(device);1251 1220 assert_string_is_neither_NULL_nor_zerolength(mountpoint); 1252 1221 1253 1222 make_hole_for_dir(mountpoint); 1254 1223 1255 if (isdigit(device[0])) { 1256 find_cdrom_device(device, FALSE); 1224 if ((device == NULL) || (isdigit(device[0]))) { 1225 mr_free(device); 1226 device = find_cdrom_device(FALSE); 1257 1227 } 1258 1228 #ifndef __FreeBSD__ … … 1268 1238 fatal_error(command); 1269 1239 } 1270 strcpy(device, dev);1271 paranoid_free(dev);1240 mr_free(device); 1241 device = dev; 1272 1242 #else 1273 1243 mr_strcat(options, ",loop"); … … 1275 1245 1276 1246 } 1277 log_msg(4, "(mount_CDROM_here --- device=%s, mountpoint=%s", device, 1278 mountpoint); 1247 log_msg(4, "(mount_CDROM_here --- device=%s, mountpoint=%s", device, mountpoint); 1279 1248 /*@ end vars *************************************************** */ 1280 1249 … … 1293 1262 retval = system(command); 1294 1263 log_msg(1, "system(%s) returned %d", command, retval); 1295 paranoid_free(command);1264 mr_free(command); 1296 1265 1297 1266 return (retval); … … 1324 1293 /*@ buffers ********************************************************* */ 1325 1294 char *tmp = NULL; 1326 char *p = NULL;1327 1295 char *mds = NULL; 1328 1296 char *request = NULL; … … 1342 1310 mr_free(tmp); 1343 1311 1344 if (g_ISO_restore_mode || bkpinfo->backup_media_type == iso 1345 || bkpinfo->backup_media_type == nfs) { 1312 if (g_ISO_restore_mode || bkpinfo->backup_media_type == iso || bkpinfo->backup_media_type == nfs) { 1313 // BERLIOS --- I'm tempted to do something about this... 1314 // Why unmount and remount again and again? 1346 1315 log_msg(3, "Remounting CD"); 1347 1316 g_ISO_restore_mode = TRUE; 1348 // FIXME --- I'm tempted to do something about this...1349 // Why unmount and remount again and again?1350 1317 if (is_this_device_mounted(MNT_CDROM)) { 1351 1318 run_program_and_log_output("umount " MNT_CDROM, 5); … … 1355 1322 mr_free(tmp); 1356 1323 1357 mr_asprintf(tmp, "%s/%s/%s-%d.iso", bkpinfo->isodir, bkpinfo->nfs_remote_dir, bkpinfo->prefix, cd_number_i_want); 1324 if (((bkpinfo->isodir == NULL) && (bkpinfo->nfs_remote_dir == NULL)) || (bkpinfo->prefix == NULL)) { 1325 fatal_error("Unable to prepare ISO file name. Please report to dev team"); 1326 } 1327 if (bkpinfo->nfs_remote_dir) { 1328 // NFS 1329 mr_asprintf(tmp, "%s/%s/%s-%d.iso", bkpinfo->isodir, bkpinfo->nfs_remote_dir, bkpinfo->prefix, cd_number_i_want); 1330 } else { 1331 // ISO 1332 mr_asprintf(tmp, "%s/%s-%d.iso", bkpinfo->isodir, bkpinfo->prefix, cd_number_i_want); 1333 } 1358 1334 if (!does_file_exist(tmp)) { 1359 1335 mr_free(tmp); 1360 mr_asprintf(tmp, "%s/isodir/%s/%s-%d.iso", bkpinfo->tmpdir, bkpinfo->nfs_remote_dir, bkpinfo->prefix, cd_number_i_want); 1336 if (bkpinfo->nfs_remote_dir) { 1337 // NFS 1338 mr_asprintf(tmp, "%s/isodir/%s/%s-%d.iso", bkpinfo->tmpdir, bkpinfo->nfs_remote_dir, bkpinfo->prefix, cd_number_i_want); 1339 } else { 1340 // ISO 1341 mr_asprintf(tmp, "%s/isodir/%s-%d.iso", bkpinfo->tmpdir, bkpinfo->prefix, cd_number_i_want); 1342 } 1361 1343 if (does_file_exist(tmp)) { 1362 1344 log_msg(1, "FIXME - hacking bkpinfo->isodir from '%s' to %s/isodir", bkpinfo->isodir, bkpinfo->tmpdir); … … 1373 1355 } 1374 1356 if ((res = what_number_cd_is_this()) != cd_number_i_want) { 1375 log_msg(3, "Currently, we hold %d but we want %d", res, 1376 cd_number_i_want); 1357 log_msg(3, "Currently, we hold %d but we want %d", res, cd_number_i_want); 1377 1358 mds = media_descriptor_string(bkpinfo->backup_media_type); 1378 1359 log_msg(3, "Insisting on %s #%d", mds, cd_number_i_want); … … 1490 1471 mds = media_descriptor_string(bkpinfo->backup_media_type); 1491 1472 mr_asprintf(comment, "What speed is your %s (re)writer?", mds); 1473 mr_free(bkpinfo->media_device); 1492 1474 if (bkpinfo->backup_media_type == dvd) { 1493 find_dvd_device(bkpinfo->media_device, FALSE);1475 bkpinfo->media_device = find_dvd_device(); 1494 1476 mr_asprintf(tmp, "1"); 1495 1477 mr_asprintf(sz_size, "%d", DEFAULT_DVD_DISK_SIZE); // 4.7 salesman's GB = 4.482 real GB = 4482 MB 1496 1478 log_msg(1, "Setting to DVD defaults"); 1497 1479 } else { 1498 strcpy(bkpinfo->media_device, VANILLA_SCSI_CDROM);1480 mr_asprintf(bkpinfo->media_device, "%s", VANILLA_SCSI_CDROM); 1499 1481 mr_asprintf(tmp, "4"); 1500 1482 mr_asprintf(sz_size, "%d", 650); … … 1542 1524 mds = media_descriptor_string(bkpinfo->backup_media_type); 1543 1525 1526 mr_free(bkpinfo->media_device); 1544 1527 if ((bkpinfo->disaster_recovery) && (bkpinfo->backup_media_type != usb)) { 1545 strcpy(bkpinfo->media_device, "/dev/cdrom"); 1546 log_msg(2, "CD-ROM device assumed to be at %s", 1547 bkpinfo->media_device); 1548 } else if ((bkpinfo->restore_data && (bkpinfo->backup_media_type != usb)) 1549 || bkpinfo->backup_media_type == dvd) { 1550 if (!bkpinfo->media_device[0]) { 1551 strcpy(bkpinfo->media_device, "/dev/cdrom"); 1552 } // just for the heck of it :) 1553 log_msg(1, "bkpinfo->media_device = %s", 1554 bkpinfo->media_device); 1555 if (bkpinfo->backup_media_type == dvd 1556 || find_cdrom_device(bkpinfo->media_device, FALSE)) { 1557 log_msg(1, "bkpinfo->media_device = %s", 1558 bkpinfo->media_device); 1528 mr_asprintf(bkpinfo->media_device, "/dev/cdrom"); 1529 log_msg(2, "CD-ROM device assumed to be at %s", bkpinfo->media_device); 1530 } else if ((bkpinfo->restore_data && (bkpinfo->backup_media_type != usb)) || bkpinfo->backup_media_type == dvd) { 1531 if ((bkpinfo->backup_media_type == dvd) || ((bkpinfo->media_device = find_cdrom_device(FALSE)) != NULL)) { 1559 1532 mr_asprintf(comment, "Please specify your %s drive's /dev entry", mds); 1560 1533 p = popup_and_get_string("Device?", comment, bkpinfo->media_device); … … 1565 1538 finish(1); 1566 1539 } 1567 strcpy(bkpinfo->media_device, p); 1568 mr_free(p); 1569 } 1570 log_msg(2, "%s device found at %s", mds, bkpinfo->media_device); 1540 mr_free(bkpinfo->media_device); 1541 bkpinfo->media_device = p; 1542 } 1543 if (bkpinfo->media_device != NULL) { 1544 log_msg(2, "%s device found at %s", mds, bkpinfo->media_device); 1545 } else { 1546 log_msg(2, "%s device not found (bkpinfo->media_device is NULL)", mds); 1547 } 1571 1548 } else { 1572 if (( find_cdrw_device(bkpinfo->media_device)) && (bkpinfo->backup_media_type != usb)) {1573 bkpinfo->media_device[0] = '\0';1574 } 1575 if (bkpinfo->media_device [0]) {1549 if (((bkpinfo->media_device = find_cdrw_device()) != NULL) && (bkpinfo->backup_media_type != usb)) { 1550 mr_free(bkpinfo->media_device); 1551 } 1552 if (bkpinfo->media_device != NULL) { 1576 1553 if (bkpinfo->backup_media_type == usb) { 1577 1554 mr_asprintf(tmp, "I think your %s media corresponds to %s. Is this correct?", mds, bkpinfo->media_device); … … 1580 1557 } 1581 1558 if (!ask_me_yes_or_no(tmp)) { 1582 bkpinfo->media_device[0] = '\0';1559 mr_free(bkpinfo->media_device); 1583 1560 } 1584 1561 mr_free(tmp); 1585 1562 } 1586 if (!bkpinfo->media_device [0]) {1563 if (!bkpinfo->media_device) { 1587 1564 if (bkpinfo->backup_media_type == usb) { 1588 p = popup_and_get_string("/dev entry?", "What is the /dev entry of your USB Disk/Key, please?", bkpinfo->media_device);1565 p = popup_and_get_string("/dev entry?", "What is the /dev entry of your USB Disk/Key, please?", NULL); 1589 1566 } else { 1590 1567 if (g_kernel_version < 2.6) { 1591 p = popup_and_get_string("Device node?", "What is the SCSI node of your CD (re)writer, please?", bkpinfo->media_device);1568 p = popup_and_get_string("Device node?", "What is the SCSI node of your CD (re)writer, please?", NULL); 1592 1569 } else { 1593 p = popup_and_get_string("/dev entry?", "What is the /dev entry of your CD (re)writer, please?", bkpinfo->media_device);1570 p = popup_and_get_string("/dev entry?", "What is the /dev entry of your CD (re)writer, please?", NULL); 1594 1571 } 1595 1572 } … … 1598 1575 finish(1); 1599 1576 } 1600 strcpy(bkpinfo->media_device, p); 1601 mr_free(p); 1577 bkpinfo->media_device = p; 1602 1578 } 1603 1579 } … … 1618 1594 case tape: 1619 1595 1620 if ((!bkpinfo->restore_mode) && (!mr_find_tape_device())) { 1596 mr_free(bkpinfo->media_device); 1597 if ((!bkpinfo->restore_mode) && ((bkpinfo->media_device = find_tape_device_and_size(NULL)) == NULL)) { 1621 1598 log_msg(3, "Ok, using vanilla scsi tape."); 1622 strcpy(bkpinfo->media_device, VANILLA_SCSI_TAPE);1599 mr_asprintf(bkpinfo->media_device, "%s", VANILLA_SCSI_TAPE); 1623 1600 if ((fin = fopen(bkpinfo->media_device, "r"))) { 1624 1601 paranoid_fclose(fin); 1625 1602 } else { 1626 strcpy(bkpinfo->media_device, "/dev/osst0"); 1627 } 1628 } 1629 if (bkpinfo->media_device[0]) { 1603 mr_free(bkpinfo->media_device); 1604 mr_asprintf(bkpinfo->media_device, "/dev/osst0"); 1605 } 1606 } 1607 if (bkpinfo->media_device != NULL) { 1630 1608 if ((fin = fopen(bkpinfo->media_device, "r"))) { 1631 1609 paranoid_fclose(fin); 1632 1610 } else { 1633 1611 if (does_file_exist("/tmp/mondo-restore.cfg")) { 1634 read_cfg_var("/tmp/mondo-restore.cfg", "media-dev",1635 bkpinfo->media_device);1612 mr_free(bkpinfo->media_device); 1613 bkpinfo->media_device = read_cfg_var("/tmp/mondo-restore.cfg", "media-dev"); 1636 1614 } 1637 1615 } 1638 1616 } 1639 if (bkpinfo->media_device [0]) {1617 if (bkpinfo->media_device != NULL) { 1640 1618 mr_asprintf(tmp, "I think I've found your tape streamer at %s; am I right on the money?", bkpinfo->media_device); 1641 1619 if (!ask_me_yes_or_no(tmp)) { 1642 bkpinfo->media_device[0] = '\0';1620 mr_free(bkpinfo->media_device); 1643 1621 } 1644 1622 mr_free(tmp); 1645 1623 } 1646 if ( !bkpinfo->media_device[0]) {1624 if (bkpinfo->media_device == NULL) { 1647 1625 p = popup_and_get_string("Device name?", "What is the /dev entry of your tape streamer?", bkpinfo->media_device); 1648 1626 if (p == NULL) { … … 1650 1628 finish(1); 1651 1629 } 1652 strcpy(bkpinfo->media_device, p); 1653 mr_free(p); 1630 bkpinfo->media_device = p; 1654 1631 } 1655 1632 mr_asprintf(tmp, "ls -l %s", bkpinfo->media_device); … … 1686 1663 1687 1664 /* Initiate bkpinfo nfs_mount path from running environment if not already done */ 1688 if (!bkpinfo->nfs_mount[0]) { 1689 strcpy(bkpinfo->nfs_mount, 1690 call_program_and_get_last_line_of_output 1691 ("mount | grep \":\" | cut -d' ' -f1 | head -n1")); 1665 if (bkpinfo->nfs_mount == NULL) { 1666 mr_asprintf(bkpinfo->nfs_mount, "%s", call_program_and_get_last_line_of_output("mount | grep \":\" | cut -d' ' -f1 | head -n1")); 1692 1667 } 1693 1668 #ifdef __FreeBSD__ … … 1702 1677 finish(1); 1703 1678 } 1704 strcpy(bkpinfo->nfs_mount, p);1705 mr_free(p);1679 mr_free(bkpinfo->nfs_mount); 1680 bkpinfo->nfs_mount = p; 1706 1681 if (!bkpinfo->restore_data) { 1707 1682 if ((bkpinfo->compression_level = … … 1713 1688 // check whether already mounted - we better remove 1714 1689 // surrounding spaces and trailing '/' for this 1715 strip_spaces(bkpinfo->nfs_mount);1690 mr_strip_spaces(bkpinfo->nfs_mount); 1716 1691 if (bkpinfo->nfs_mount[strlen(bkpinfo->nfs_mount) - 1] == '/') 1717 1692 bkpinfo->nfs_mount[strlen(bkpinfo->nfs_mount) - 1] = '\0'; … … 1752 1727 finish(1); 1753 1728 } 1754 strcpy(bkpinfo->nfs_mount, p);1755 mr_free(p);1729 mr_free(bkpinfo->nfs_mount); 1730 bkpinfo->nfs_mount = p; 1756 1731 } 1757 1732 /* Initiate bkpinfo isodir path from running environment if mount already done */ … … 1782 1757 finish(1); 1783 1758 } 1784 strcpy(bkpinfo->nfs_remote_dir, p);1785 mr_free(p);1759 mr_free(bkpinfo->nfs_remote_dir); 1760 bkpinfo->nfs_remote_dir = p; 1786 1761 1787 1762 // check whether writable - we better remove surrounding spaces for this 1788 strip_spaces(bkpinfo->nfs_remote_dir);1763 mr_strip_spaces(bkpinfo->nfs_remote_dir); 1789 1764 1790 1765 p = popup_and_get_string("Prefix.", "Please enter the prefix that will be prepended to your ISO filename. Example: machine1 to obtain machine1-[1-9]*.iso files", bkpinfo->prefix); … … 1998 1973 } 1999 1974 log_it("isodir = %s", bkpinfo->isodir); 2000 log_it("nfs_mount = '%s'", bkpinfo->nfs_mount); 1975 if (bkpinfo->nfs_mount) { 1976 log_it("nfs_mount = '%s'", bkpinfo->nfs_mount); 1977 } 2001 1978 if (bkpinfo->nfs_user) { 2002 1979 log_it("nfs_user = '%s'", bkpinfo->nfs_user); … … 2135 2112 fatal_error("I couldn't figure out the scratchdir!"); 2136 2113 } 2114 2115 /* Cleaning a potential previous scratchdir */ 2116 if (bkpinfo->scratchdir) { 2117 mr_asprintf(command, "rm -Rf %s", bkpinfo->scratchdir); 2118 paranoid_system(command); 2119 mr_free(command); 2120 } 2137 2121 mr_free(bkpinfo->scratchdir); 2122 2138 2123 mr_asprintf(bkpinfo->scratchdir , "%s/mondo.scratch.%d", tmp, (int) (random() % 32768)); 2139 2124 log_it("bkpinfo->scratchdir is being set to %s", bkpinfo->scratchdir); 2140 2125 2126 /* Cleaning potential previous scratchdir */ 2141 2127 mr_asprintf(command, "rm -Rf %s/mondo.scratch.*", tmp); 2142 2128 mr_free(tmp); … … 2156 2142 */ 2157 2143 /** 2158 * If we can read @p dev, set @ poutput to it.2159 * If @p dev cannot be read, set @p output to "".2144 * If we can read @p dev, set @return output to it. 2145 * If @p dev cannot be read, set @p output to NULL. 2160 2146 * @param dev The device to check for. 2161 * @param output Set to @p dev if @p dev exists, "" otherwise. 2162 * @return TRUE if @p dev exists, FALSE if it doesn't. 2163 */ 2164 bool set_dev_to_this_if_rx_OK(char *output, char *dev) 2147 * @return output Set to @p dev if @p dev exists, NULL otherwise. 2148 */ 2149 char *set_dev_to_this_if_rx_OK(char *dev) 2165 2150 { 2166 2151 char *command = NULL; 2167 bool res;2152 char *output = NULL; 2168 2153 2169 2154 if (!dev || dev[0] == '\0') { 2170 output[0] = '\0'; 2171 return (FALSE); 2155 return(NULL); 2172 2156 } 2173 2157 log_msg(10, "Injecting %s", dev); … … 2175 2159 if (!does_file_exist(dev)) { 2176 2160 log_msg(10, "%s doesn't exist. Returning FALSE.", dev); 2177 return (FALSE);2161 return(NULL); 2178 2162 } 2179 2163 mr_asprintf(command, "dd bs=%ld count=1 if=%s of=/dev/null &> /dev/null", 512L, dev); 2180 2164 if (!run_program_and_log_output(command, FALSE) 2181 2165 && !run_program_and_log_output(command, FALSE)) { 2182 strcpy(output, dev);2166 mr_asprintf(output, "%s", dev); 2183 2167 log_msg(4, "Found it - %s", dev); 2184 res = TRUE;2185 2168 } else { 2186 output[0] = '\0';2187 2169 log_msg(4, "It's not %s", dev); 2188 res = FALSE;2189 2170 } 2190 2171 mr_free(command); 2191 return( res);2172 return(output); 2192 2173 } 2193 2174 … … 2221 2202 } 2222 2203 2223 mr_asprintf(mountdev, "%s", bkpinfo->media_device); 2224 if (!mountdev[0]) { 2204 if (bkpinfo->media_device) { 2205 mr_asprintf(mountdev, "%s", bkpinfo->media_device); 2206 } 2207 if (!mountdev) { 2225 2208 log_it("(what_number_cd_is_this) Warning - media_device unknown. Finding out..."); 2226 find_cdrom_device(bkpinfo->media_device, FALSE); 2209 mr_free(bkpinfo->media_device); 2210 bkpinfo->media_device = find_cdrom_device(FALSE); 2211 mr_asprintf(mountdev, "%s", bkpinfo->media_device); 2227 2212 } 2228 2213 if (!is_this_device_mounted(MNT_CDROM)) {
Note:
See TracChangeset
for help on using the changeset viewer.