On Wed, Sep 04, 2002 at 01:05:51PM +0400, Wartan Hachaturow wrote: > On Tue, Sep 03, 2002 at 09:55:01PM -0700, Michael Cardenas wrote: > > > you ever get around to adding in my patch? I can update it to 1.6 for > > you if you like. > > Sorry, been a bit busy with the start of term ;) > If you'll update it, fine -- send the patch to me/to the list, and > someone/me would commit it :) >
My new patch, synced with 1.6 (just removing ped_init and ped_done) is attached. Please commit it. thanks michael -- michael cardenas | lead software engineer | lindows.com | hyperpoem.net "There is only one great adventure and that is inwards towards the self." - Henry Miller
--- partkit.c.orig Tue Aug 27 08:23:42 2002 +++ partkit.c Wed Sep 4 17:55:47 2002 @@ -26,6 +26,9 @@ #define PARTKIT_TABLE_SIZE 2048 #define PARTKIT_PART_LIST_SIZE 128 +/* I can't understand why they did removed it. */ +#define PED_PARTITION_PRIMARY 0 + #include <string.h> #include <parted/parted.h> #include <debconfclient.h> @@ -91,7 +94,7 @@ ptr = table; - disk = ped_disk_open (*dev); + disk = ped_disk_new (*dev); if (!disk) goto error; @@ -170,7 +173,7 @@ ptr += snprintf (ptr, PARTKIT_TABLE_SIZE - (ptr - table), "\n"); } - ped_disk_close (disk); + ped_disk_destroy (disk); if ((ptr - table) > PARTKIT_TABLE_SIZE) goto error; return table; @@ -199,7 +202,7 @@ ptr = part_list; - disk = ped_disk_open (dev); + disk = ped_disk_new (dev); if (!disk) goto error; @@ -217,7 +220,7 @@ "%-5d ", part->num); } - ped_disk_close (disk); + ped_disk_destroy (disk); if ((ptr - part_list) > PARTKIT_PART_LIST_SIZE) goto error; @@ -242,10 +245,10 @@ char *ptr, *endptr = NULL; char *table; - disk = ped_disk_open (dev); + disk = ped_disk_new (dev); if (!disk) goto error; - constraint = ped_constraint_any (disk); + constraint = ped_constraint_any (disk->dev); if (!constraint) goto error_close_disk; @@ -326,9 +329,9 @@ if (!ped_disk_add_partition (disk, part, constraint)) goto error_destroy_part; - ped_disk_write (disk); + ped_disk_commit (disk); ped_constraint_destroy (constraint); - ped_disk_close (disk); + ped_disk_destroy (disk); return 1; error_destroy_part: @@ -336,7 +339,7 @@ error_destroy_constraint: ped_constraint_destroy (constraint); error_close_disk: - ped_disk_close (disk); + ped_disk_destroy (disk); error: return 0; } @@ -349,7 +352,7 @@ PedPartition *part; char *ptr; - disk = ped_disk_open (dev); + disk = ped_disk_new (dev); if (!disk) goto error; @@ -394,40 +397,99 @@ } ped_disk_delete_partition (disk, part); - ped_disk_write (disk); - ped_disk_close (disk); + ped_disk_commit (disk); + ped_disk_destroy (disk); return 1; error_close_disk: - ped_disk_close (disk); + ped_disk_destroy (disk); error: partkit_error (0); return -1; } +char *partkit_get_devices(PedDevice *dev) +{ + char *ptr = 0; + int drivelistlen = 0; + + ped_device_probe_all(); + + //mbc - unfortunately, do two passes for now to do the malloc... + while((dev = ped_device_get_next(dev))) + { + drivelistlen += strlen(dev->path); + drivelistlen += 2; + } + + if(drivelistlen) + { + ptr = (char *)malloc(drivelistlen); + + if(ptr) + { + *ptr = 0; + dev = NULL; + + while((dev = ped_device_get_next(dev))) + { + if(*ptr == 0) + strcpy(ptr, dev->path); + else if (*ptr != 0) + { + strcat(ptr, ", "); + strcat(ptr, dev->path); + } + } + } + + } + + return ptr; + +} + +//mbc - for now, just use the first device +char *partkit_get_default_device(void) +{ + PedDevice *dev = NULL; + char *ptr = 0; + + dev = ped_device_get_next(dev); + + ptr = (char *)malloc(strlen(dev->path)); + + strcpy(ptr, dev->path); + + return ptr; +} int main (int argc, char *argv[]) { int finished = 0; PedDevice *dev = NULL; - char *ptr; + char *ptr = 0; client = debconfclient_new (); client->command (client, "title", "Partition Editor", NULL); + //mbc - should install an exception handler here + do { - /* FIXME: how to get a list of available devices ? */ - ptr = /* get_device_list() */ "/dev/hdb"; - + ptr = partkit_get_devices(dev); client->command (client, "subst", "partkit/select_device", "choices", ptr, NULL); - /*FIXME: how to get a default device? */ + free(ptr); + + ptr = partkit_get_default_device(); + client->command (client, "subst", "partkit/select_device", "default", ptr, NULL); + free(ptr); if ((dev = ped_device_get (argv[1])) == NULL) partkit_error (1);
msg21870/pgp00000.pgp
Description: PGP signature