Changeset 1770 in MondoRescue for branches/stable/mondo/src/common/libmondo-devices.c
- Timestamp:
- Nov 6, 2007, 11:01:53 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/stable/mondo/src/common/libmondo-devices.c
r1769 r1770 45 45 46 46 extern bool g_ISO_restore_mode; 47 extern char *g_erase_tmpdir_and_scratchdir;48 47 extern char *g_selfmounted_isodir; 49 48 extern char *MONDO_LOGFILE; … … 555 554 } 556 555 557 558 /**559 * Locate a CD-R/W writer's SCSI node.560 * @param cdrw_device SCSI node will be placed here.561 * @return 0 for success, nonzero for failure.562 */563 556 564 557 … … 1315 1308 1316 1309 /** 1310 * Mount the CD-ROM at @p mountpoint. 1311 * @param device The device (or file if g_ISO_restore_mode) to mount. 1312 * @param mountpoint The place to mount it. 1313 * @return 0 for success, nonzero for failure. 1314 */ 1315 int mount_USB_here(char *device, char *mountpoint) 1316 { 1317 /*@ buffer ****************************************************** */ 1318 char *command; 1319 char *dev; 1320 int retval; 1321 1322 malloc_string(command); 1323 malloc_string(dev); 1324 assert_string_is_neither_NULL_nor_zerolength(device); 1325 assert_string_is_neither_NULL_nor_zerolength(mountpoint); 1326 1327 make_hole_for_dir(mountpoint); 1328 if (isdigit(device[0])) { 1329 return(1); 1330 } else { 1331 strcpy(dev, device); 1332 } 1333 log_msg(4, "(mount_USB_here --- device=%s, mountpoint=%s", device, 1334 mountpoint); 1335 1336 #ifdef __FreeBSD__ 1337 sprintf(command, "mount_vfat %s %s 2>> %s", 1338 device, mountpoint, MONDO_LOGFILE); 1339 1340 #else 1341 sprintf(command, "mount %s -t vfat %s 2>> %s", 1342 device, mountpoint, MONDO_LOGFILE); 1343 #endif 1344 1345 log_msg(4, command); 1346 retval = system(command); 1347 log_msg(1, "system(%s) returned %d", command, retval); 1348 1349 paranoid_free(command); 1350 paranoid_free(dev); 1351 return (retval); 1352 } 1353 1354 /** 1355 * Mount the CD-ROM at @p mountpoint. 1356 * @param device The device (or file if g_ISO_restore_mode) to mount. 1357 * @param mountpoint The place to mount it. 1358 * @return 0 for success, nonzero for failure. 1359 */ 1360 int mount_CDROM_here(char *device, char *mountpoint) 1361 { 1362 /*@ buffer ****************************************************** */ 1363 char *command; 1364 char *dev; 1365 char *options; 1366 int retval; 1367 1368 malloc_string(command); 1369 malloc_string(dev); 1370 malloc_string(options); 1371 assert_string_is_neither_NULL_nor_zerolength(device); 1372 assert_string_is_neither_NULL_nor_zerolength(mountpoint); 1373 1374 make_hole_for_dir(mountpoint); 1375 strcpy(options, "ro"); 1376 if (isdigit(device[0])) { 1377 find_cdrom_device(device, FALSE); 1378 } else { 1379 strcpy(dev, device); 1380 } 1381 if (g_ISO_restore_mode) { 1382 1383 #ifdef __FreeBSD__ 1384 strcpy(dev, make_vn(device)); 1385 if (!dev) { 1386 sprintf(command, "Unable to mount ISO (make_vn(%s) failed)", 1387 device); 1388 fatal_error(command); 1389 } 1390 strcpy(device, dev); 1391 #else 1392 strcat(options, ",loop"); 1393 #endif 1394 1395 } 1396 log_msg(4, "(mount_CDROM_here --- device=%s, mountpoint=%s", device, 1397 mountpoint); 1398 /*@ end vars *************************************************** */ 1399 1400 #ifdef __FreeBSD__ 1401 sprintf(command, "mount_cd9660 -r %s %s 2>> %s", 1402 device, mountpoint, MONDO_LOGFILE); 1403 1404 #else 1405 sprintf(command, "mount %s -o %s -t iso9660 %s 2>> %s", 1406 device, options, mountpoint, MONDO_LOGFILE); 1407 #endif 1408 1409 log_msg(4, command); 1410 if (strncmp(device, "/dev/", 5) == 0) { 1411 retract_CD_tray_and_defeat_autorun(); 1412 } 1413 retval = system(command); 1414 log_msg(1, "system(%s) returned %d", command, retval); 1415 1416 paranoid_free(command); 1417 paranoid_free(dev); 1418 paranoid_free(options); 1419 return (retval); 1420 } 1421 1422 1423 1424 1425 1426 1427 /** 1317 1428 * Ask the user for CD number @p cd_number_i_want. 1318 1429 * Sets g_current_media_number once the correct CD is inserted. … … 1443 1554 { 1444 1555 char *tmp = NULL; 1556 char *tmp1 = NULL; 1445 1557 char *sz_size = NULL; 1446 1558 char *command = NULL; … … 1480 1592 case dvd: 1481 1593 case usb: 1594 /* Never try to eject a USB device */ 1595 if (bkpinfo->backup_media_type == usb) { 1596 bkpinfo->please_dont_eject = TRUE; 1597 } 1482 1598 if (archiving_to_media) { 1483 1599 if ((bkpinfo->backup_media_type != dvd) && (bkpinfo->backup_media_type != usb)) { … … 1556 1672 } 1557 1673 } 1558 1674 /* No break because we continue even for usb */ 1559 1675 case cdstream: 1560 if ( bkpinfo->disaster_recovery) {1676 if ((bkpinfo->disaster_recovery) && (bkpinfo->backup_media_type != usb)) { 1561 1677 mr_allocstr(bkpinfo->media_device, "/dev/cdrom"); 1562 1678 mr_msg(2, "CD-ROM device assumed to be at %s", bkpinfo->media_device); 1563 } else if (bkpinfo->restore_data || bkpinfo->backup_media_type == dvd) { 1679 } else if ((bkpinfo->restore_data && (bkpinfo->backup_media_type != usb)) 1680 || bkpinfo->backup_media_type == dvd) { 1564 1681 if (!bkpinfo->media_device) { 1565 1682 mr_allocstr(bkpinfo->media_device, "/dev/cdrom"); … … 1582 1699 bkpinfo->media_device); 1583 1700 } else { 1701 <<<<<<< .courant 1584 1702 mr_asprintf(&comment, _("What is your media device ?")); 1585 1703 mr_asprintf(&tmp, mr_conf->media_device); … … 1588 1706 log_to_screen(_("User has chosen not to backup the PC")); 1589 1707 finish(1); 1590 } 1708 ======= 1709 if ((find_cdrw_device(bkpinfo->media_device)) && (bkpinfo->backup_media_type != usb)) { 1710 bkpinfo->media_device[0] = '\0'; 1711 >>>>>>> .fusion-droit.r1769 1712 } 1713 <<<<<<< .courant 1591 1714 mr_free(comment); 1592 1715 … … 1602 1725 if (!popup_and_get_string("Device", comment, tmp, 5)) { 1603 1726 log_to_screen(_("User has chosen not to backup the PC")); 1727 ======= 1728 if (bkpinfo->media_device[0]) { 1729 if (bkpinfo->backup_media_type == usb) { 1730 sprintf(tmp, 1731 "I think your %s media corresponds to %s. Is this correct?", 1732 media_descriptor_string(bkpinfo->backup_media_type), 1733 bkpinfo->media_device); 1734 } else { 1735 sprintf(tmp, 1736 "I think I've found your %s burner at SCSI node %s. Is this correct? (Say no if you have an IDE burner and you are running a 2.6 kernel. You will then be prompted for further details.)", 1737 media_descriptor_string(bkpinfo->backup_media_type), 1738 bkpinfo->media_device); 1739 } 1740 if (!ask_me_yes_or_no(tmp)) { 1741 bkpinfo->media_device[0] = '\0'; 1742 } 1743 } 1744 if (!bkpinfo->media_device[0]) { 1745 if (bkpinfo->backup_media_type == usb) { 1746 i = popup_and_get_string("/dev entry?", 1747 "What is the /dev entry of your USB Disk/Key, please?", 1748 bkpinfo->media_device, 1749 MAX_STR_LEN / 4); 1750 } else { 1751 if (g_kernel_version < 2.6) { 1752 i = popup_and_get_string("Device node?", 1753 "What is the SCSI node of your CD (re)writer, please?", 1754 bkpinfo->media_device, 1755 MAX_STR_LEN / 4); 1756 } else { 1757 i = popup_and_get_string("/dev entry?", 1758 "What is the /dev entry of your CD (re)writer, please?", 1759 bkpinfo->media_device, 1760 MAX_STR_LEN / 4); 1761 } 1762 } 1763 if (!i) { 1764 log_to_screen("User has chosen not to backup the PC"); 1765 >>>>>>> .fusion-droit.r1769 1604 1766 finish(1); 1605 1767 } … … 1770 1932 // check whether writable - we better remove surrounding spaces for this 1771 1933 mr_strip_spaces(bkpinfo->nfs_remote_dir); 1772 mr_asprintf(& command, "echo hi > '%s/%s/.dummy.txt'", bkpinfo->isodir,1773 bkpinfo->nfs_remote_dir);1934 mr_asprintf(&tmp1,"%s/%s/.dummy.txt", bkpinfo->isodir,bkpinfo->nfs_remote_dir); 1935 mr_asprintf(&command, "echo hi > '%s'", tmp1); 1774 1936 while (run_program_and_log_output(command, FALSE)) { 1775 1937 mr_asprintf(&tmp, bkpinfo->nfs_remote_dir); … … 1788 1950 // check whether writable - we better remove surrounding space s for this 1789 1951 mr_strip_spaces(bkpinfo->nfs_remote_dir); 1952 paranoid_free(tmp1); 1953 mr_asprintf(&tmp1,"%s/%s/.dummy.txt", bkpinfo->isodir,bkpinfo->nfs_remote_dir); 1790 1954 1791 1955 mr_free(command); 1792 mr_asprintf(&command, "echo hi > '%s/%s/.dummy.txt'", bkpinfo->isodir, 1793 bkpinfo->nfs_remote_dir); 1956 mr_asprintf(&command, "echo hi > '%s'", tmp1); 1794 1957 } 1795 1958 mr_free(command); 1959 unlink(tmp1); 1960 paranoid_free(tmp1); 1796 1961 1797 1962 mr_asprintf(&tmp, mr_conf->prefix); … … 2183 2348 mr_asprintf(&mountdev, bkpinfo->media_device); 2184 2349 if (!is_this_device_mounted(MNT_CDROM)) { 2185 mount_CDROM_here(mountdev, MNT_CDROM); 2350 if (bkpinfo->backup_media_type == usb) { 2351 mount_USB_here(mountdev, MNT_CDROM); 2352 } else { 2353 mount_CDROM_here(mountdev, MNT_CDROM); 2354 } 2186 2355 } 2187 2356 cd_number =
Note:
See TracChangeset
for help on using the changeset viewer.