Esempio n. 1
0
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);
}
Esempio n. 2
0
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;
}