static zx_off_t mbr_get_size(void* ctx) { mbrpart_device_t* dev = ctx; //TODO: use query() results, *but* fvm returns different query and getsize // results, and the latter are dynamic... return device_get_size(dev->parent); }
static bool format_setup(void) { struct device **devices = 0; struct device **p = 0; int n = 0; int size = 128; int i = 0; int j = 0; if((devices = device_probe_all(true)) == 0) return false; targets = malloc0(size * sizeof(struct format *)); for( p = devices ; *p != 0 ; ++p ) { struct device *device = *p; struct disk *disk = disk_open(device); struct format *target = 0; char buf[PATH_MAX] = {0}; if(disk == 0) { target = malloc0(sizeof(struct format)); add_target(target,&n,&size); target->devicepath = strdup(device_get_path(device)); size_to_string(buf,PATH_MAX,device_get_size(device),true); target->size = strdup(buf); probe_filesystem(target); } else { for( i = 0, j = disk_partition_get_count(disk) ; i < j ; ++i ) { const char *purpose = disk_partition_get_purpose(disk,i); if( strcmp(purpose,"data") != 0 && strcmp(purpose,"swap") != 0 && strcmp(purpose,"efi") != 0 ) continue; target = malloc0(sizeof(struct format)); add_target(target,&n,&size); snprintf(buf,PATH_MAX,"%s%d",device_get_path(device),disk_partition_get_number(disk,i)); target->devicepath = strdup(buf); size_to_string(buf,PATH_MAX,disk_partition_get_size(disk,i),true); target->size = strdup(buf); probe_filesystem(target); } } device_close(device); } free(devices); targets = realloc(targets,(n + 1) * sizeof(struct format *)); return true; }