Ignore:
Timestamp:
Sep 10, 2010, 12:13:40 AM (14 years ago)
Author:
Bruno Cornec
Message:
  • mount-media function is now placed in libmondo-devices.c as used by more programs.
  • Avoids calling mount_media when it's not mandatory (change the way mondorestore was working up to now but could solve some bugs reported)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.9/mondo/src/mondorestore/mondo-rstr-tools.c

    r2449 r2682  
    7474extern void kill_anything_like_this(char *str);
    7575extern int skip_obdr(void);
     76extern int mount_media();
    7677extern int set_tape_block_size_with_mt(long internal_tape_block_size);
    7778
     
    579580**************************************************************************/
    580581
    581 
    582 /**
    583 * Mount the CD-ROM or USB device at /mnt/cdrom.
    584 * @param bkpinfo The backup information structure. Fields used:
    585 * - @c bkpinfo->backup_media_type
    586 * - @c bkpinfo->disaster_recovery
    587 * - @c bkpinfo->isodir
    588 * - @c bkpinfo->media_device
    589 * @return 0 for success, nonzero for failure.
    590 */
    591 int mount_media()
    592 {
    593 char *mount_cmd;
    594 int i, res;
    595 #ifdef __FreeBSD__
    596 char mdd[32];
    597 char *mddev = mdd;
    598 #endif
    599 
    600 malloc_string(mount_cmd);
    601 assert(bkpinfo != NULL);
    602 
    603     if (bkpinfo->backup_media_type == tape
    604         || bkpinfo->backup_media_type == udev) {
    605         log_msg(8, "Tape/udev. Therefore, no need to mount a media.");
    606         paranoid_free(mount_cmd);
    607         return 0;
    608     }
    609 
    610     if (!run_program_and_log_output("mount | grep -F " MNT_CDROM, FALSE)) {
    611         log_msg(2, "mount_media() - media already mounted. Fair enough.");
    612         paranoid_free(mount_cmd);
    613         return (0);
    614     }
    615 
    616     if (bkpinfo->backup_media_type == netfs) {
    617         log_msg(2, "Mounting for Network thingy");
    618         log_msg(2, "isodir = %s", bkpinfo->isodir);
    619         if ((!bkpinfo->isodir[0] || !strcmp(bkpinfo->isodir, "/"))
    620             && am_I_in_disaster_recovery_mode()) {
    621             strcpy(bkpinfo->isodir, "/tmp/isodir");
    622             log_msg(1, "isodir is being set to %s", bkpinfo->isodir);
    623         }
    624 #ifdef __FreeBSD__
    625         sprintf(mount_cmd, "/mnt/isodir/%s/%s/%s-%d.iso", bkpinfo->isodir,
    626             bkpinfo->netfs_remote_dir, bkpinfo->prefix, g_current_media_number);
    627         mddev = make_vn(mount_cmd);
    628         sprintf(mount_cmd, "mount_cd9660 -r %s " MNT_CDROM, mddev);
    629 #else
    630         sprintf(mount_cmd, "mount %s/%s/%s-%d.iso -t iso9660 -o loop,ro %s",
    631             bkpinfo->isodir, bkpinfo->netfs_remote_dir,
    632             bkpinfo->prefix, g_current_media_number, MNT_CDROM);
    633 #endif
    634 
    635     } else if (bkpinfo->backup_media_type == iso) {
    636 #ifdef __FreeBSD__
    637         sprintf(mount_cmd, "%s/%s-%d.iso", bkpinfo->isodir,
    638             bkpinfo->prefix, g_current_media_number);
    639         mddev = make_vn(mount_cmd);
    640         sprintf(mount_cmd, "mount_cd9660 -r %s %s", mddev, MNT_CDROM);
    641 #else
    642         sprintf(mount_cmd, "mount %s/%s-%d.iso -t iso9660 -o loop,ro %s",
    643             bkpinfo->isodir, bkpinfo->prefix, g_current_media_number, MNT_CDROM);
    644 #endif
    645     } else if (bkpinfo->backup_media_type == usb) {
    646         sprintf(mount_cmd, "mount -t vfat %s %s", bkpinfo->media_device, MNT_CDROM);
    647     } else if (strstr(bkpinfo->media_device, "/dev/")) {
    648 #ifdef __FreeBSD__
    649         sprintf(mount_cmd, "mount_cd9660 -r %s %s", bkpinfo->media_device,
    650         MNT_CDROM);
    651 #else
    652         sprintf(mount_cmd, "mount %s -t iso9660 -o ro %s",
    653         bkpinfo->media_device, MNT_CDROM);
    654 #endif
    655     } else {
    656         if (bkpinfo->disaster_recovery
    657             && does_file_exist("/tmp/CDROM-LIVES-HERE")) {
    658             strcpy(bkpinfo->media_device,
    659                 last_line_of_file("/tmp/CDROM-LIVES-HERE"));
    660         } else {
    661             find_cdrom_device(bkpinfo->media_device, TRUE);
    662         }
    663 
    664 #ifdef __FreeBSD__
    665     sprintf(mount_cmd, "mount_cd9660 -r %s %s", bkpinfo->media_device,
    666         MNT_CDROM);
    667 #else
    668     sprintf(mount_cmd, "mount %s -t iso9660 -o ro %s",
    669         bkpinfo->media_device, MNT_CDROM);
    670 #endif
    671     }
    672 
    673     log_msg(2, "(mount_media) --- command = %s", mount_cmd);
    674     for (i = 0; i < 2; i++) {
    675         res = run_program_and_log_output(mount_cmd, FALSE);
    676         if (!res) {
    677             break;
    678         } else {
    679             log_msg(2, "Failed to mount device.");
    680             sleep(5);
    681             run_program_and_log_output("sync", FALSE);
    682         }
    683     }
    684 
    685     if (res) {
    686         log_msg(2, "Failed, despite %d attempts", i);
    687     } else {
    688         log_msg(2, "Mounted media drive OK");
    689     }
    690     paranoid_free(mount_cmd);
    691     return (res);
    692 }
    693 /**************************************************************************
    694 *END_MOUNT_CDROM                                                         *
    695 **************************************************************************/
    696582
    697583
Note: See TracChangeset for help on using the changeset viewer.