From 0139be96091ae57ab7555c8fa72a7bd9727bf242 Mon Sep 17 00:00:00 2001 From: Laurent Vivier Date: Tue, 9 Oct 2007 19:02:42 +0000 Subject: [PATCH] move from stdio to device_io_t --- libmap/Makefile | 3 ++- libmap/libmap.h | 16 ++++++---------- libmap/map_block0_write.c | 7 ++----- libmap/map_bootblock_read.c | 10 ++-------- libmap/map_bootblock_write.c | 14 ++++---------- libmap/map_close.c | 1 - libmap/map_dev.c | 17 ----------------- libmap/map_open.c | 17 ++++++----------- libmap/map_read.c | 9 +++------ libmap/map_set_startup.c | 8 +------- libmap/map_write.c | 12 +++++------- 11 files changed, 31 insertions(+), 83 deletions(-) delete mode 100644 libmap/map_dev.c diff --git a/libmap/Makefile b/libmap/Makefile index fbdf422..915aa53 100644 --- a/libmap/Makefile +++ b/libmap/Makefile @@ -13,11 +13,12 @@ ifeq ($(TARGET), m68k-linux) 68000FLAGS = -m68000 -Wa,-m68000 CFLAGS += -fpic -O2 -Os endif +CPPFLAGS += -I$(TOP)/../libstream -I$(TOP)/../libemile LIBRARY = libmap.a SOURCES = map_bootblock_get_type.c map_bootblock_is_valid.c \ - map_bootblock_read.c map_bootblock_write.c map_close.c map_dev.c \ + map_bootblock_read.c map_bootblock_write.c map_close.c \ map_geometry.c map_get_bootinfo.c map_get_driver_info.c \ map_get_driver_number.c map_get_driver_signature.c map_get_number.c \ map_get_partition_geometry.c map_get_partition_name.c \ diff --git a/libmap/libmap.h b/libmap/libmap.h index fbe9de8..6c3566c 100644 --- a/libmap/libmap.h +++ b/libmap/libmap.h @@ -8,7 +8,9 @@ #define _LIBMAP_H #include -#include "../libemile/emile.h" + +#include "libstream.h" +#include "emile.h" enum { kPartitionAUXIsValid= 0x00000001, @@ -120,8 +122,7 @@ struct Partition { #define MAP_NAME_LEN 256 typedef struct { - int fd; - char name[MAP_NAME_LEN]; + device_io_t *device; int current; struct DriverDescriptor drivers; struct Partition partition; @@ -138,7 +139,7 @@ enum { #define FIRST_LEVEL_SIZE (FLOPPY_SECTOR_SIZE * 2) #define BOOTBLOCK_SIZE (FLOPPY_SECTOR_SIZE * 2) -extern map_t* map_open(char* dev, int flags); +extern map_t* map_open(device_io_t *device); extern void map_close(map_t *map); extern int map_get_number(map_t *map); extern int map_read(map_t *map, int part); @@ -165,16 +166,11 @@ extern int map_bootblock_read(map_t* map, char* bootblock); extern int map_bootblock_write(map_t* map, char* bootblock); extern int map_bootblock_get_type(char* bootblock); extern int map_bootblock_is_valid(char *bootblock); -extern int emile_scsi_get_dev(int fd, int* driver, int *disk, int *partition); -extern int emile_get_dev_name(char *s, int driver, int disk, int partition); -extern int map_set_startup(char* dev_name, int partition); -extern int emile_scsi_get_rdev(char* dev_name, int* driver, int *disk, int *partition); +extern int map_set_startup(map_t *map, int partition); extern int emile_is_apple_driver(map_t *map); extern int map_has_apple_driver(map_t *map); extern int map_seek_driver_partition(map_t *map, int start); -extern int emile_get_uncompressed_size(char *file); extern int map_get_bootinfo(map_t* map, int* bootstart, int *bootsize, int *bootaddr, int *bootentry, int* checksum, char* processor); -extern char* map_dev(map_t *map); extern int map_set_bootinfo(map_t *map, int bootstart, int bootsize, int bootaddr, int bootentry, int checksum, char* processor); extern int map_set_driver_info(map_t *map, int number, int block, int size, int type); extern int map_set_driver_number(map_t *map, int number); diff --git a/libmap/map_block0_write.c b/libmap/map_block0_write.c index 62e47f5..8c5b0bf 100644 --- a/libmap/map_block0_write.c +++ b/libmap/map_block0_write.c @@ -13,11 +13,8 @@ int map_block0_write(map_t *map) { int ret; - ret = lseek(map->fd, 0, SEEK_SET); - if (ret != 0) - return -1; - - ret = write(map->fd, &map->drivers, sizeof(map->drivers)); + ret = map->device->write_sector(map->device, 0, + &map->drivers, sizeof(map->drivers)); return ret; } diff --git a/libmap/map_bootblock_read.c b/libmap/map_bootblock_read.c index 782bfd4..edb531e 100644 --- a/libmap/map_bootblock_read.c +++ b/libmap/map_bootblock_read.c @@ -16,20 +16,14 @@ int map_bootblock_read(map_t* map, char* bootblock) { off_t offset; int ret; - int fd; if (!map_partition_is_valid(map)) return -1; - fd = open(map->name, O_RDONLY); - if (fd == -1) - return -1; offset = read_long((u_int32_t*)&map->partition.PyPartStart) * 512; - lseek(fd, offset, SEEK_SET); - ret = read(fd, bootblock, BOOTBLOCK_SIZE); - - close(fd); + ret = map->device->read_sector(map->device, + offset, bootblock, BOOTBLOCK_SIZE); return ret; } diff --git a/libmap/map_bootblock_write.c b/libmap/map_bootblock_write.c index d5400ae..6d2d179 100644 --- a/libmap/map_bootblock_write.c +++ b/libmap/map_bootblock_write.c @@ -14,22 +14,16 @@ int map_bootblock_write(map_t* map, char* bootblock) { - char name[MAP_NAME_LEN]; + off_t offset; int ret; - int fd; if (!map_partition_is_valid(map)) return -1; - sprintf(name, "%s%d", map->name, map->current + 1); + offset = read_long((u_int32_t*)&map->partition.PyPartStart) * 512; - fd = open(name, O_WRONLY); - if (fd == -1) - return -1; - - ret = write(fd, bootblock, BOOTBLOCK_SIZE); - - close(fd); + ret = map->device->write_sector(map->device, + offset, bootblock, BOOTBLOCK_SIZE); return ret; } diff --git a/libmap/map_close.c b/libmap/map_close.c index 53aa93b..719a55d 100644 --- a/libmap/map_close.c +++ b/libmap/map_close.c @@ -11,6 +11,5 @@ void map_close(map_t *map) { - close(map->fd); free(map); } diff --git a/libmap/map_dev.c b/libmap/map_dev.c deleted file mode 100644 index 55644ad..0000000 --- a/libmap/map_dev.c +++ /dev/null @@ -1,17 +0,0 @@ -/* - * - * (c) 2004-2007 Laurent Vivier - * - */ - -#include - -#include "libmap.h" - -char* map_dev(map_t *map) -{ - if (!map_partition_is_valid(map)) - return NULL; - - return map->name; -} diff --git a/libmap/map_open.c b/libmap/map_open.c index b8a5075..6a596e2 100644 --- a/libmap/map_open.c +++ b/libmap/map_open.c @@ -13,7 +13,7 @@ #include "libmap.h" -map_t* map_open(char *dev, int flags) +map_t* map_open(device_io_t *device) { map_t *map; int ret; @@ -27,23 +27,18 @@ map_t* map_open(char *dev, int flags) if (map == NULL) return NULL; - map->fd = open(dev, flags); - if (map->fd == -1) - { - free(map); - return NULL; - } - strncpy(map->name, dev, MAP_NAME_LEN); - map->name[MAP_NAME_LEN - 1] = 0; + map->device = device; - ret = read(map->fd, &map->drivers, sizeof(map->drivers)); + ret = device->read_sector(map->device, 0, + &map->drivers, sizeof(map->drivers)); if (ret == -1) { free(map); return NULL; } - ret = read(map->fd, &map->partition, sizeof(map->partition)); + ret = device->read_sector(map->device, sizeof(map->drivers), + &map->partition, sizeof(map->partition)); if (ret == -1) { free(map); diff --git a/libmap/map_read.c b/libmap/map_read.c index 1500b78..06125ab 100644 --- a/libmap/map_read.c +++ b/libmap/map_read.c @@ -22,12 +22,9 @@ int map_read(map_t *map, int part) offset = part * sizeof(struct Partition) + sizeof(struct DriverDescriptor); - ret = lseek(map->fd, offset, SEEK_SET); - if (ret != offset) - return -1; - - ret = read(map->fd, &map->partition, sizeof(struct Partition)); - if (ret != sizeof(struct Partition)) + ret = map->device->read_sector(map->device, offset, &map->partition, + sizeof(struct Partition)); + if (ret == -1) return -1; map->current = part; diff --git a/libmap/map_set_startup.c b/libmap/map_set_startup.c index 51281cb..713d137 100644 --- a/libmap/map_set_startup.c +++ b/libmap/map_set_startup.c @@ -12,17 +12,12 @@ #include "libmap.h" -int map_set_startup(char* dev_name, int partition) +int map_set_startup(map_t *map, int partition) { - map_t* map; char *part_type; int ret; int i; - map = map_open(dev_name, O_RDWR); - if (map == NULL) - return -1; - /* check partition type */ ret = map_read(map, partition); @@ -52,7 +47,6 @@ int map_set_startup(char* dev_name, int partition) return -1; } } - map_close(map); return 0; } diff --git a/libmap/map_write.c b/libmap/map_write.c index bf4c276..f7f505a 100644 --- a/libmap/map_write.c +++ b/libmap/map_write.c @@ -17,14 +17,12 @@ int map_write(map_t *map, int part) if (part > map->partition.MapBlkCnt) return -1; - offset = part * sizeof(struct Partition) + sizeof(struct DriverDescriptor); + offset = part * sizeof(struct Partition) + + sizeof(struct DriverDescriptor); - ret = lseek(map->fd, offset, SEEK_SET); - if (ret != offset) - return -1; - - ret = write(map->fd, &map->partition, sizeof(struct Partition)); - if (ret != sizeof(struct Partition)) + ret = map->device->write_sector(map->device, offset, &map->partition, + sizeof(struct Partition)); + if (ret != -1) return -1; map->current = part;