diff --git a/libmap/map_open.c b/libmap/map_open.c index 954475f..97f5434 100644 --- a/libmap/map_open.c +++ b/libmap/map_open.c @@ -17,12 +17,18 @@ map_t* map_open(device_io_t *device) { map_t *map; int ret; - int blocksize = device->get_blocksize(device); + 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) @@ -36,18 +42,20 @@ map_t* map_open(device_io_t *device) } memcpy(map->device, device, sizeof(device_io_t)); - ret = device->read_sector(map->device->data, 0, - &map->drivers, sizeof(map->drivers)); + 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 = device->read_sector(map->device->data, sizeof(map->drivers) / blocksize, - &map->partition, sizeof(map->partition)); + 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; }