diff --git a/libemile/emile_map_has_apple_driver.c b/libemile/emile_map_has_apple_driver.c new file mode 100644 index 0000000..d4e0e51 --- /dev/null +++ b/libemile/emile_map_has_apple_driver.c @@ -0,0 +1,40 @@ +static __attribute__((used)) char* rcsid = "$CVSHeader$"; +/* + * + * (c) 2004 Laurent Vivier + * + */ + +/* + * See http://developer.apple.com/technotes/tn/tn1189.html + * + */ + +#include + +#include "partition.h" +#include "libemile.h" + +int emile_map_has_apple_driver(emile_map_t *map) +{ + int block, size, type, part; + int i; + int ret; + + for (i = 0; i < emile_map_get_driver_number(map); i++) + { + emile_map_get_driver_info(map, i, &block, &size, &type); + + part = emile_map_seek_driver_partition(map, block); + + ret = emile_map_read(map, part); + if (ret == -1) + return -1; + + if (strncmp(map->partition.PartType, + APPLE_DRIVER, strlen(APPLE_DRIVER)) == 0) + return 1; + } + + return 0; +} diff --git a/libemile/emile_map_seek_driver_partition.c b/libemile/emile_map_seek_driver_partition.c new file mode 100644 index 0000000..d34bfc6 --- /dev/null +++ b/libemile/emile_map_seek_driver_partition.c @@ -0,0 +1,29 @@ +static __attribute__((used)) char* rcsid = "$CVSHeader$"; +/* + * + * (c) 2004 Laurent Vivier + * + */ + +#include "libemile.h" + +int emile_map_seek_driver_partition(emile_map_t *map, int base) +{ + int start; + int count; + int i; + int ret; + + for (i = 0; i < emile_map_get_number(map); i++) + { + ret = emile_map_read(map, i); + if (ret == -1) + return -1; + + emile_map_get_partition_geometry(map, &start, &count); + if (base == start) + return i; + } + + return -1; +}