Get the partition size and write all the content of the driver partition to the file

This commit is contained in:
Laurent Vivier 2006-09-24 22:24:02 +00:00
parent c3e57818e4
commit 51c32ac892

View File

@ -70,6 +70,7 @@ static int get_driver(emile_map_t *map, int partition, char* appledriver)
int block_size, block_count; int block_size, block_count;
int driver_number; int driver_number;
int block, size, type, part; int block, size, type, part;
int partition_base, partition_size;
int bootstart, bootsize, bootaddr, bootentry, checksum; int bootstart, bootsize, bootaddr, bootentry, checksum;
char processor[16]; char processor[16];
char *code; char *code;
@ -94,6 +95,9 @@ static int get_driver(emile_map_t *map, int partition, char* appledriver)
emile_map_geometry(map, &block_size, &block_count); emile_map_geometry(map, &block_size, &block_count);
printf("block size: %d\n", block_size); printf("block size: %d\n", block_size);
emile_map_get_partition_geometry(map, &partition_base, &partition_size);
printf("partition base: %d, size %d\n", partition_base, partition_size);
driver_number = emile_map_get_driver_number(map); driver_number = emile_map_get_driver_number(map);
if (driver_number == 0) if (driver_number == 0)
{ {
@ -131,7 +135,7 @@ static int get_driver(emile_map_t *map, int partition, char* appledriver)
return -1; return -1;
} }
code = (char*)malloc(128 * 512); code = (char*)malloc(partition_size * 512);
if (code == NULL) if (code == NULL)
{ {
fprintf(stderr, "ERROR: cannot malloc() to load driver in memory\n"); fprintf(stderr, "ERROR: cannot malloc() to load driver in memory\n");
@ -153,10 +157,10 @@ static int get_driver(emile_map_t *map, int partition, char* appledriver)
return -1; return -1;
} }
ret = read(fd, code, 128 * 512); ret = read(fd, code, partition_size * 512);
close(fd); close(fd);
if (ret != 128 * 512) if (ret != partition_size * 512)
{ {
fprintf(stderr, "ERROR: cannot read driver (read())\n"); fprintf(stderr, "ERROR: cannot read driver (read())\n");
free(code); free(code);
@ -179,11 +183,11 @@ static int get_driver(emile_map_t *map, int partition, char* appledriver)
return -1; return -1;
} }
ret = write(fd, code, 128 * 512); ret = write(fd, code, partition_size * 512);
close(fd); close(fd);
free(code); free(code);
if (ret != 128 * 512) if (ret != partition_size * 512)
{ {
fprintf(stderr, "ERROR: cannot save driver to %s\n", fprintf(stderr, "ERROR: cannot save driver to %s\n",
appledriver); appledriver);