static int _can_create_primary (const PedDisk* disk) { int i; for (i = 1; i <= ped_disk_get_max_primary_partition_count (disk); i++) { if (!ped_disk_get_partition (disk, i)) return 1; } return 0; }
int PartitionTable::max_primary_partition_count() { return ped_disk_get_max_primary_partition_count( disk_ ); }
void MParted::MParted_Core::scan(MParted::Devices & devices) { QMutexLocker locker(&mutex); // Clean up first devices.clear(); // Initialise QStringList devicePaths; ped_device_probe_all(); pedDevice = NULL; while ((pedDevice = ped_device_get_next(pedDevice))) { // Only add this device if we can read the first sector (which means it's a real device) char * buf = static_cast<char *>(malloc(pedDevice->sector_size)); if (buf) { // Confirming device if (ped_device_open(pedDevice)) { //Devices with sector sizes of 512 bytes and higher are supported if (ped_device_read(pedDevice, buf, 0, 1)) devicePaths.append(Utils::charToString(pedDevice->path)); ped_device_close(pedDevice) ; } free(buf); } } closeDeviceAndDisk(); // Sort list, remove duplicates and empty entries devicePaths.removeDuplicates(); devicePaths.removeAll(""); devicePaths.sort(); for (int i = 0; i < devicePaths.size(); i++) { const QString devicePath = devicePaths.at(i); // Open device and disk if (!openDeviceAndDisk(devicePath, false)) continue; // Add to list and save pointer devices.append(MParted::Device()); MParted::Device &device = devices.last(); //device info.. device.path = devicePath; device.model = Utils::charToString(pedDevice->model); device.length = pedDevice->length; device.sector_size = pedDevice->sector_size; device.heads = pedDevice->bios_geom.heads; device.sectors = pedDevice->bios_geom.sectors; device.cylinders = pedDevice->bios_geom.cylinders; device.cylsize = device.heads * device.sectors; device.removable = isDeviceRemovable(device); //make sure cylsize is at least 1 MiB if (device.cylsize < (MEBIBYTE / device.sector_size)) device.cylsize = (MEBIBYTE / device.sector_size); //normal harddisk if (pedDisk) { device.unkownPartitionTable = false; device.diskType = Utils::charToString(pedDisk->type->name); device.maxPrimaryPartitions = ped_disk_get_max_primary_partition_count(pedDisk); // Scan partitions scanDevicePartitions(device); } //harddisk without disklabel else { device.unkownPartitionTable = true; device.diskType = QObject::tr("unrecognized"); device.maxPrimaryPartitions = -1; } // Clean up closeDeviceAndDisk(); } }