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);
Attachment:
pgpYSoM443fjh.pgp
Description: PGP signature