From 1ce4925be6073aaeff224c6be5c96c9dd80177c8 Mon Sep 17 00:00:00 2001 From: Laurent Vivier Date: Tue, 1 Feb 2005 19:48:33 +0000 Subject: [PATCH] Correct drivers info when block size is not 512 (i.e. CDROM) --- tools/emile_scanbus.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/tools/emile_scanbus.c b/tools/emile_scanbus.c index df3b2f3..db59d4a 100644 --- a/tools/emile_scanbus.c +++ b/tools/emile_scanbus.c @@ -55,19 +55,33 @@ static int emile_scanbus(device_name_t devices[EMILE_MAX_DISK]) device_name_t dev; j = 0; - for(i = 0; i < EMILE_MAX_DISK; i++) + + /* scan SCSI disks */ + + for(i = 0; (i < EMILE_MAX_DISK) && (j < EMILE_MAX_DISK); i++) { sprintf(dev, "/dev/sd%c", 'a' + i); fd = open(dev, O_RDONLY); if (fd == -1) - { - if (errno == ENXIO) - continue; - return j; - } + break; close(fd); strncpy(devices[j++], dev, EMILE_MAX_DEVNAME); } + + /* scan ATA disks: EMILE doesn't manage them, but this + * allows to have all information on all disks + */ + + for(i = 0; (i < EMILE_MAX_DISK) && (j < EMILE_MAX_DISK); i++) + { + sprintf(dev, "/dev/hd%c", 'a' + i); + fd = open(dev, O_RDONLY); + if (fd == -1) + break; + close(fd); + strncpy(devices[j++], dev, EMILE_MAX_DEVNAME); + } + return j; } @@ -126,8 +140,10 @@ void scanbus(void) emile_map_get_driver_info(map, j, &block, &size, &type); printf(" %d: base: %d size: %d type: %d", - j, block, size, type); - part = emile_map_seek_driver_partition(map, block); + j, block * block_size / 512, + size * block_size / 512 , type); + part = emile_map_seek_driver_partition(map, + block * block_size / 512 ); if (part == -1) printf(" \n"); else