diff options
Diffstat (limited to '')
-rw-r--r-- | libparted/tests/common.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/libparted/tests/common.c b/libparted/tests/common.c new file mode 100644 index 0000000..8c42ece --- /dev/null +++ b/libparted/tests/common.c @@ -0,0 +1,94 @@ +#include <config.h> +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> +#include <string.h> + +#include <check.h> + +#include "common.h" +#include "xstrtol.h" + +#define STREQ(a, b) (strcmp (a, b) == 0) + +size_t get_sector_size (void) +{ + char *p = getenv ("PARTED_SECTOR_SIZE"); + size_t ss = 512; + unsigned long val; + if (p + && xstrtoul (p, NULL, 10, &val, NULL) == LONGINT_OK + && val % 512 == 0) + ss = val; + + return ss; +} + +PedExceptionOption +_test_exception_handler (PedException* e) +{ + ck_abort_msg("Exception of type %s has been raised: %s", + ped_exception_get_type_string (e->type), + e->message); + + return PED_EXCEPTION_UNHANDLED; +} + +char* +_create_disk (const off_t n_bytes) +{ + char* filename = strdup ("parted-test-XXXXXX"); + + if (filename == NULL) + return NULL; + + int fd = mkstemp (filename); + if (fd < 0) { + free_filename: + free (filename); + return NULL; + } + + FILE* disk = fdopen (fd, "w"); + if (disk == NULL) + goto free_filename; + + int fail = (fseek (disk, n_bytes, SEEK_SET) != 0 + || fwrite ("", sizeof (char), 1, disk) != 1); + + if (fclose (disk) != 0 || fail) + goto free_filename; + + return filename; +} + +PedDisk* +_create_disk_label (PedDevice *dev, PedDiskType *type) +{ + PedDisk* disk = NULL; + + /* Create the label */ + disk = ped_disk_new_fresh (dev, type); + ck_assert_msg(disk != NULL, "Failed to create a label of type: %s", + type->name); + ck_assert_msg(ped_disk_commit(disk) != 0, + "Failed to commit label to device"); + + return disk; +} + +int +_implemented_disk_label (const char *label) +{ + /* FIXME: these have minor problems, so skip them, temporarily. */ + if (STREQ (label, "amiga")) return 0; + + if (STREQ (label, "atari") && get_sector_size() != 512) + return 0; + + /* Not implemented yet */ + if (STREQ (label, "aix")) return 0; + if (STREQ (label, "pc98")) return 0; + + return 1; +} |