25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: diskimage.c,v 1.6 2007/04/28 09:19:52 debug Exp $ |
* $Id: diskimage.c,v 1.7 2007/06/15 17:02:39 debug Exp $ |
29 |
* |
* |
30 |
* Disk image support. |
* Disk image support. |
31 |
* |
* |
128 |
{ |
{ |
129 |
struct diskimage_overlay overlay; |
struct diskimage_overlay overlay; |
130 |
size_t bitmap_name_len = strlen(overlay_basename) + 20; |
size_t bitmap_name_len = strlen(overlay_basename) + 20; |
131 |
char *bitmap_name = malloc(bitmap_name_len); |
char *bitmap_name; |
132 |
|
|
133 |
if (bitmap_name == NULL) { |
CHECK_ALLOCATION(bitmap_name = malloc(bitmap_name_len)); |
|
fprintf(stderr, "out of memory\n"); |
|
|
exit(1); |
|
|
} |
|
134 |
snprintf(bitmap_name, bitmap_name_len, "%s.map", overlay_basename); |
snprintf(bitmap_name, bitmap_name_len, "%s.map", overlay_basename); |
135 |
|
|
136 |
overlay.overlay_basename = strdup(overlay_basename); |
CHECK_ALLOCATION(overlay.overlay_basename = strdup(overlay_basename)); |
137 |
overlay.f_data = fopen(overlay_basename, d->writable? "r+" : "r"); |
overlay.f_data = fopen(overlay_basename, d->writable? "r+" : "r"); |
138 |
if (overlay.f_data == NULL) { |
if (overlay.f_data == NULL) { |
139 |
perror(overlay_basename); |
perror(overlay_basename); |
148 |
} |
} |
149 |
|
|
150 |
d->nr_of_overlays ++; |
d->nr_of_overlays ++; |
151 |
d->overlays = realloc(d->overlays, sizeof(struct diskimage_overlay) |
|
152 |
* d->nr_of_overlays); |
CHECK_ALLOCATION(d->overlays = realloc(d->overlays, |
153 |
if (d->overlays == NULL) { |
sizeof(struct diskimage_overlay) * d->nr_of_overlays)); |
|
fprintf(stderr, "out of memory\n"); |
|
|
exit(1); |
|
|
} |
|
154 |
|
|
155 |
d->overlays[d->nr_of_overlays - 1] = overlay; |
d->overlays[d->nr_of_overlays - 1] = overlay; |
156 |
|
|
736 |
} |
} |
737 |
|
|
738 |
/* Allocate a new diskimage struct: */ |
/* Allocate a new diskimage struct: */ |
739 |
d = malloc(sizeof(struct diskimage)); |
CHECK_ALLOCATION(d = malloc(sizeof(struct diskimage))); |
|
if (d == NULL) { |
|
|
fprintf(stderr, "out of memory in diskimage_add()\n"); |
|
|
exit(1); |
|
|
} |
|
740 |
memset(d, 0, sizeof(struct diskimage)); |
memset(d, 0, sizeof(struct diskimage)); |
741 |
|
|
742 |
/* Default to IDE disks... */ |
/* Default to IDE disks... */ |
803 |
if (prefix_o) |
if (prefix_o) |
804 |
d->override_base_offset = override_base_offset; |
d->override_base_offset = override_base_offset; |
805 |
|
|
806 |
d->fname = strdup(fname); |
CHECK_ALLOCATION(d->fname = strdup(fname)); |
|
if (d->fname == NULL) { |
|
|
fprintf(stderr, "out of memory\n"); |
|
|
exit(1); |
|
|
} |
|
807 |
|
|
808 |
d->logical_block_size = 512; |
d->logical_block_size = 512; |
809 |
|
|