DISK: Always open VHD containers as VHD without regard to the selected format
This commit is contained in:
parent
cabd3784bc
commit
d225629b9a
1 changed files with 24 additions and 4 deletions
28
sim_disk.c
28
sim_disk.c
|
@ -2461,6 +2461,16 @@ switch (DK_GET_FMT (uptr)) { /* case on format */
|
||||||
size_function = sim_fsize_ex;
|
size_function = sim_fsize_ex;
|
||||||
break;
|
break;
|
||||||
case DKUF_F_STD: /* SIMH format */
|
case DKUF_F_STD: /* SIMH format */
|
||||||
|
if (NULL != (uptr->fileref = sim_vhd_disk_open (cptr, "rb"))) { /* Try VHD first */
|
||||||
|
sim_disk_set_fmt (uptr, 0, "VHD", NULL); /* set file format to VHD */
|
||||||
|
sim_vhd_disk_close (uptr->fileref); /* close vhd file*/
|
||||||
|
uptr->fileref = NULL;
|
||||||
|
open_function = sim_vhd_disk_open;
|
||||||
|
size_function = sim_vhd_disk_size;
|
||||||
|
storage_function = sim_vhd_disk_info;
|
||||||
|
auto_format = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
open_function = sim_fopen;
|
open_function = sim_fopen;
|
||||||
size_function = sim_fsize_ex;
|
size_function = sim_fsize_ex;
|
||||||
break;
|
break;
|
||||||
|
@ -2471,6 +2481,16 @@ switch (DK_GET_FMT (uptr)) { /* case on format */
|
||||||
storage_function = sim_os_disk_info_raw;
|
storage_function = sim_os_disk_info_raw;
|
||||||
break;
|
break;
|
||||||
case DKUF_F_RAW: /* Raw Physical Disk Access */
|
case DKUF_F_RAW: /* Raw Physical Disk Access */
|
||||||
|
if (NULL != (uptr->fileref = sim_vhd_disk_open (cptr, "rb"))) { /* Try VHD first */
|
||||||
|
sim_disk_set_fmt (uptr, 0, "VHD", NULL); /* set file format to VHD */
|
||||||
|
sim_vhd_disk_close (uptr->fileref); /* close vhd file*/
|
||||||
|
uptr->fileref = NULL;
|
||||||
|
open_function = sim_vhd_disk_open;
|
||||||
|
size_function = sim_vhd_disk_size;
|
||||||
|
storage_function = sim_vhd_disk_info;
|
||||||
|
auto_format = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
open_function = sim_os_disk_open_raw;
|
open_function = sim_os_disk_open_raw;
|
||||||
size_function = sim_os_disk_size_raw;
|
size_function = sim_os_disk_size_raw;
|
||||||
storage_function = sim_os_disk_info_raw;
|
storage_function = sim_os_disk_info_raw;
|
||||||
|
@ -2513,18 +2533,18 @@ else { /* normal */
|
||||||
if (uptr->fileref == NULL) /* open fail? */
|
if (uptr->fileref == NULL) /* open fail? */
|
||||||
return _err_return (uptr, SCPE_OPENERR);/* yes, error */
|
return _err_return (uptr, SCPE_OPENERR);/* yes, error */
|
||||||
uptr->flags = uptr->flags | UNIT_RO; /* set rd only */
|
uptr->flags = uptr->flags | UNIT_RO; /* set rd only */
|
||||||
sim_messagef (SCPE_OK, "%s%d: unit is read only\n", sim_dname (dptr), (int)(uptr-dptr->units));
|
sim_messagef (SCPE_OK, "%s: unit is read only\n", sim_uname (uptr));
|
||||||
}
|
}
|
||||||
else { /* doesn't exist */
|
else { /* doesn't exist */
|
||||||
if (sim_switches & SWMASK ('E')) /* must exist? */
|
if (sim_switches & SWMASK ('E')) /* must exist? */
|
||||||
return _err_return (uptr, SCPE_OPENERR); /* yes, error */
|
return sim_messagef (_err_return (uptr, SCPE_OPENERR), "%s: File not found: %s\n", sim_uname (uptr), cptr);
|
||||||
if (create_function)
|
if (create_function)
|
||||||
uptr->fileref = create_function (cptr, ((t_offset)uptr->capac)*ctx->capac_factor*((dptr->flags & DEV_SECTORS) ? 512 : 1));/* create new file */
|
uptr->fileref = create_function (cptr, ((t_offset)uptr->capac)*ctx->capac_factor*((dptr->flags & DEV_SECTORS) ? 512 : 1));/* create new file */
|
||||||
else
|
else
|
||||||
uptr->fileref = open_function (cptr, "wb+");/* open new file */
|
uptr->fileref = open_function (cptr, "wb+");/* open new file */
|
||||||
if (uptr->fileref == NULL) /* open fail? */
|
if (uptr->fileref == NULL) /* open fail? */
|
||||||
return _err_return (uptr, SCPE_OPENERR);/* yes, error */
|
return sim_messagef (_err_return (uptr, SCPE_OPENERR), "%s: Can't create file: %s\n", sim_uname (uptr), cptr);
|
||||||
sim_messagef (SCPE_OK, "%s%d: creating new file\n", sim_dname (dptr), (int)(uptr-dptr->units));
|
sim_messagef (SCPE_OK, "%s: creating new file: %s\n", sim_uname (uptr), cptr);
|
||||||
created = TRUE;
|
created = TRUE;
|
||||||
}
|
}
|
||||||
} /* end if null */
|
} /* end if null */
|
||||||
|
|
Loading…
Add table
Reference in a new issue