Esempio n. 1
0
// Called when a message has been received.
void app::MessageReceived(BMessage *msg) {
	bool failed;
	switch(msg->what) {
		case B_SIMPLE_DATA:
			RefsReceived(msg);
			break;
		case MOUNT_IMAGE: {
			failed=false;
			if (MountImage(imagepath.String(), "bfs")<0)
			if (MountImage(imagepath.String(), "hfs")<0)
			if (MountImage(imagepath.String(), "iso9660")<0)
			if (MountImage(imagepath.String(), "dos")<0) {
				failed=true;
			}
			if (quit) PostMessage(new BMessage(B_QUIT_REQUESTED)); else
					if (w->Lock()) {
						if (failed) sv->SetHighColor(150, 100, 100); else
							sv->SetHighColor(100, 150, 100);
						sv->SetText(failed ? "Not an image file!" : "Image mounted successfully.");
						w->Unlock();
					}
			break;
		}
	
		default:
			BApplication::MessageReceived(msg);
			break;
	}
}
Esempio n. 2
0
bool InitImgFS(const char* path) {
    // find drive # of the last image FAT drive
    u32 drv_i = NORM_FS - IMGN_FS;
    char fsname[8];
    for (; drv_i < NORM_FS; drv_i++) {
        snprintf(fsname, 7, "%lu:", drv_i);
        if (!(DriveType(fsname)&DRV_IMAGE)) break;
    }
    // deinit image filesystem
    DismountDriveType(DRV_IMAGE);
    // (re)mount image, done if path == NULL
    u64 type = MountImage(path);
    InitVirtualImageDrive();
    if ((type&IMG_NAND) && (drv_i < NORM_FS)) drv_i = NORM_FS;
    else if ((type&IMG_FAT) && (drv_i < NORM_FS - IMGN_FS + 1)) drv_i = NORM_FS - IMGN_FS + 1;
    // reinit image filesystem
    for (u32 i = NORM_FS - IMGN_FS; i < drv_i; i++) {
        snprintf(fsname, 7, "%lu:", i);
        fs_mounted[i] = (f_mount(fs + i, fsname, 1) == FR_OK);
    }
    return GetMountState();
}