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); } }