/* * * (c) 2004-2007 Laurent Vivier * */ #include #include #include #include #include #include #include "libmap.h" map_t* map_open(device_io_t *device) { map_t *map; int ret; int blocksize = device->get_blocksize(device->data); ASSERT_DD(printf("INTERNAL ERROR: Bad Block 0 size structure\n"); return NULL;) ASSERT_P(printf("INTERNAL ERROR: Bad Partition size structure\n"); return NULL;) if (blocksize > MAP_BLOCKSIZE) { printf("device block size too big (%d)\n", blocksize); return NULL; } map = (map_t*)malloc(sizeof(map_t)); if (map == NULL) return NULL; map->device = malloc(sizeof(device_io_t)); if (map->device == NULL) { free(map); return NULL; } memcpy(map->device, device, sizeof(device_io_t)); ret = map->device->read_sector(map->device->data, 0, &map->drivers, blocksize); if (ret == -1) { printf("Cannot read block 0\n"); free(map); return NULL; } ret = map->device->read_sector(map->device->data, 1, &map->partition, blocksize); if (ret == -1) { printf("Cannot read first partition descriptor\n"); free(map); return NULL; } map->current = 0; return map; }