コード例 #1
0
ファイル: ui.c プロジェクト: bcl/parted
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;
}
コード例 #2
0
int PartitionTable::max_primary_partition_count()
{
    return ped_disk_get_max_primary_partition_count( disk_ );
}
コード例 #3
0
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();
    }
}