Hi, Otavio Salvador, le Fri 31 Aug 2007 09:16:02 -0300, a écrit : > Can you try to make it to fail properly?
I'm in the train so I couldn't download version 1.8 of parted with its test engine, but the attached program fails without the patch. Samuel
// cc -std=c99 test.c -lparted -o test //#include <config.h> #include <unistd.h> //#include <check.h> #include <parted/parted.h> //#include "common.h" #define fail_if(expr, fmt, ...) if (expr) fprintf(stderr,fmt,##__VA_ARGS__) static char* temporary_disk = "testpart"; #if 0 static void create_disk (void) { temporary_disk = _create_disk (20); fail_if (temporary_disk == NULL, "Failed to create temporary disk"); } static void destroy_disk (void) { unlink (temporary_disk); free (temporary_disk); } #endif /* TEST: Create a disklabel on a simple disk image */ void START_TEST (void) { PedDevice* dev = ped_device_get (temporary_disk); if (dev == NULL) return; PedDiskType* type; PedDisk* disk; PedDisk* disk_dup; PedPartition *part; PedPartition *part_dup; PedConstraint *constraint; //disk = _create_disk_label (dev, ped_disk_type_get ("msdos")); disk = ped_disk_new_fresh (dev, ped_disk_type_get ("msdos")); constraint = ped_constraint_any (dev); /* Primary partition from 16,4kB to 15MB */ part = ped_partition_new (disk, PED_PARTITION_EXTENDED, NULL, 32, 29311); ped_disk_add_partition (disk, part, constraint); /* Logical partition from 10MB to 15MB */ part = ped_partition_new (disk, PED_PARTITION_LOGICAL, ped_file_system_type_get ("ext2"), 19584, 29311); ped_disk_add_partition (disk, part, constraint); /* Logical partition from 16,4kB to 4981kB */ part = ped_partition_new (disk, PED_PARTITION_LOGICAL, ped_file_system_type_get ("ext2"), 32, 9727); ped_disk_add_partition (disk, part, constraint); ped_disk_commit (disk); ped_constraint_destroy (constraint); disk_dup = ped_disk_duplicate (disk); /* Checks if all partitions match */ #define compar(i) \ part = ped_disk_get_partition (disk, i); \ part_dup = ped_disk_get_partition (disk_dup, i); \ \ fail_if (part->num != part_dup->num || \ part->geom.start != part_dup->geom.start || \ part->geom.end != part_dup->geom.end, \ "Duplicated partition %d/%d/%d doesn't match. " \ "Details are start: %lld/%lld end: %lld/%lld\n", \ i, part->num, part_dup->num, part->geom.start, part_dup->geom.start, \ part->geom.end, part_dup->geom.end); compar(1); compar(5); compar(6); ped_disk_destroy (disk); ped_device_destroy (dev); } //END_TEST int main (void) { system("dd < /dev/zero > testpart bs=1024 seek=20000 count=1"); START_TEST(); #if 0 int number_failed; Suite* suite = suite_create ("Disk"); TCase* tcase_duplicate = tcase_create ("Duplicate"); /* Fail when an exception is raised */ ped_exception_set_handler (_test_exception_handler); //tcase_add_checked_fixture (tcase_duplicate, create_disk, destroy_disk); tcase_add_test (tcase_duplicate, test_duplicate); /* Disable timeout for this test */ tcase_set_timeout (tcase_duplicate, 0); suite_add_tcase (suite, tcase_duplicate); SRunner* srunner = srunner_create (suite); srunner_run_all (srunner, CK_VERBOSE); number_failed = srunner_ntests_failed (srunner); srunner_free (srunner); return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; #endif }