Esempio n. 1
0
int handle_volume_request(Volume* vol0, Volume* vol1, int num) {
    if(vol0!=NULL && vol1!=NULL) {
        Volume* v0;
        Volume* v1;
        if(num==DUALBOOT_ITEM_SYSTEM0) {
            v0=vol0;
            v1=vol0;
        }
        else if(num==DUALBOOT_ITEM_SYSTEM1) {
            v0=vol1;
            v1=vol1;
        }
        else if(num==DUALBOOT_ITEM_BOTH) {
            v0=vol0;
            v1=vol1;
        }
        else if(num==DUALBOOT_ITEM_INTERCHANGED) {
            v0=vol1;
            v1=vol0;
        }
        else {
            LOGE("set_active_system: invalid system number: %d!\n", num);
            return -1;
        }

        if(replace_device_node(vol0, &v0->stat)!=0)
            return -1;
        if(replace_device_node(vol1, &v1->stat)!=0)
            return -1;

        return 0;
    }
    else {
        LOGE("set_active_system: invalid volumes given!\n");
        return -1;
    }
}
void dualboot_setup_env(void) {
	if(ensure_path_unmounted("/data")!=0) {
		LOGE("Error unmounting /data!\n");
		return;
	}

	if(selected_system==SYSTEM1) {
		replace_device_node(PART_SYSTEM, &part_table[PART_SYSTEM].statbuf);
		replace_device_node(PART_SYSTEM1, &part_table[PART_SYSTEM].statbuf);
		replace_device_node(PART_BOOT, &part_table[PART_BOOT].statbuf);
		replace_device_node(PART_BOOT1, &part_table[PART_BOOT].statbuf);
		replace_device_node(PART_MODEM, &part_table[PART_MODEM].statbuf);
		replace_device_node(PART_MODEM1, &part_table[PART_MODEM].statbuf);
	}
	else if(selected_system==SYSTEM2) {
		replace_device_node(PART_SYSTEM, &part_table[PART_SYSTEM1].statbuf);
		replace_device_node(PART_SYSTEM1, &part_table[PART_SYSTEM1].statbuf);
		replace_device_node(PART_BOOT, &part_table[PART_BOOT1].statbuf);
		replace_device_node(PART_BOOT1, &part_table[PART_BOOT1].statbuf);
		replace_device_node(PART_MODEM, &part_table[PART_MODEM1].statbuf);
		replace_device_node(PART_MODEM1, &part_table[PART_MODEM1].statbuf);
	}
	else {
		LOGE("Invalid system '%d'\n", selected_system);
	}
}