From 38a2c24e6e576edb089ae74e48529015260e4dd8 Mon Sep 17 00:00:00 2001 From: Olivier Blin Date: Wed, 9 Mar 2005 14:49:35 +0000 Subject: move partition stuff in partition.c and common disk stuff in tools.c --- mdk-stage1/disk.c | 167 +----------------------------------------------------- 1 file changed, 2 insertions(+), 165 deletions(-) (limited to 'mdk-stage1/disk.c') diff --git a/mdk-stage1/disk.c b/mdk-stage1/disk.c index ca3e02526..678484c5e 100644 --- a/mdk-stage1/disk.c +++ b/mdk-stage1/disk.c @@ -36,155 +36,10 @@ #include "mount.h" #include "lomount.h" #include "automatic.h" - -#include "disk.h" #include "directory.h" +#include "partition.h" -struct partition_detection_anchor { - off_t offset; - const char * anchor; -}; - -static int seek_and_compare(int fd, struct partition_detection_anchor anch) -{ - char buf[500]; - size_t count; - if (lseek(fd, anch.offset, SEEK_SET) == (off_t)-1) { - log_perror("seek failed"); - return -1; - } - count = read(fd, buf, strlen(anch.anchor)); - if (count != strlen(anch.anchor)) { - log_perror("read failed"); - return -1; - } - buf[count] = '\0'; - if (strcmp(anch.anchor, buf)) - return 1; - return 0; -} - -static const char * detect_partition_type(char * dev) -{ - struct partition_detection_info { - const char * name; - struct partition_detection_anchor anchor0; - struct partition_detection_anchor anchor1; - struct partition_detection_anchor anchor2; - }; - struct partition_detection_info partitions_signatures[] = { - { "Linux Swap", { 4086, "SWAP-SPACE" }, { 0, NULL }, { 0, NULL } }, - { "Linux Swap", { 4086, "SWAPSPACE2" }, { 0, NULL }, { 0, NULL } }, - { "Ext2", { 0x438, "\x53\xEF" }, { 0, NULL }, { 0, NULL } }, - { "ReiserFS", { 0x10034, "ReIsErFs" }, { 0, NULL }, { 0, NULL } }, - { "ReiserFS", { 0x10034, "ReIsEr2Fs" }, { 0, NULL }, { 0, NULL } }, - { "XFS", { 0, "XFSB" }, { 0x200, "XAGF" }, { 0x400, "XAGI" } }, - { "JFS", { 0x8000, "JFS1" }, { 0, NULL }, { 0, NULL } }, - { "NTFS", { 0x1FE, "\x55\xAA" }, { 0x3, "NTFS" }, { 0, NULL } }, - { "FAT32", { 0x1FE, "\x55\xAA" }, { 0x52, "FAT32" }, { 0, NULL } }, - { "FAT", { 0x1FE, "\x55\xAA" }, { 0x36, "FAT" }, { 0, NULL } }, - { "Linux LVM", { 0, "HM\1\0" }, { 0, NULL }, { 0, NULL } } - }; - int partitions_signatures_nb = sizeof(partitions_signatures) / sizeof(struct partition_detection_info); - int i; - int fd; - const char *part_type = NULL; - - char device_fullname[50]; - strcpy(device_fullname, "/dev/"); - strcat(device_fullname, dev); - - if (ensure_dev_exists(device_fullname)) - return NULL; - log_message("guessing type of %s", device_fullname); - - if ((fd = open(device_fullname, O_RDONLY, 0)) < 0) { - log_perror("open"); - return NULL; - } - - for (i=0; i 1) && (name[strlen(dev_name)] != '\0')) { - const char * partition_type = detect_partition_type(name); - parts[i] = strdup(name); - comments[i] = (char *) malloc(sizeof(char) * 100); - sprintf(comments[i], "size: %d Mbytes", blocks >> 10); - if (partition_type) { - strcat(comments[i], ", type: "); - strcat(comments[i], partition_type); - } - i++; - } - } - parts[i] = NULL; - fclose(f); - - return 0; -} - -static int try_mount(char * dev, char * location) -{ - char device_fullname[50]; - strcpy(device_fullname, "/dev/"); - strcat(device_fullname, dev); - - if (my_mount(device_fullname, location, "ext2", 0) == -1 && - my_mount(device_fullname, location, "vfat", 0) == -1 && - my_mount(device_fullname, location, "ntfs", 0) == -1 && - my_mount(device_fullname, location, "reiserfs", 0) == -1) { - return 1; - } - - return 0; -} +#include "disk.h" static enum return_type try_with_device(char *dev_name) { @@ -255,24 +110,6 @@ static enum return_type try_with_device(char *dev_name) return RETURN_OK; } -static int get_disks(char *** names, char *** models) -{ - char ** ptr; - int count = 0; - - my_insmod("sd_mod", ANY_DRIVER_TYPE, NULL, 0); - - get_medias(DISK, names, models, BUS_ANY); - - ptr = *names; - while (ptr && *ptr) { - count++; - ptr++; - } - - return count; -} - enum return_type disk_prepare(void) { char ** medias, ** medias_models; -- cgit v1.2.1