From 0065f053366c2d75476632e0cd3dfb2f470de0ca Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Sat, 11 Jun 2022 21:43:55 -0700 Subject: [PATCH] DISK: Allow Control-C to cancel ZAP command --- sim_disk.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/sim_disk.c b/sim_disk.c index 12865c5a..4a3981c3 100644 --- a/sim_disk.c +++ b/sim_disk.c @@ -6903,7 +6903,9 @@ if (info->flag) { /* zap type */ sector_data = (uint8 *)malloc (sector_size * sizeof (*sector_data)); zero_sector = (uint8 *)calloc (sector_size, sizeof (*sector_data)); container_size -= sizeof (*f); - while (container_size > highwater) { + stop_cpu = FALSE; + while ((container_size > highwater) && + (!stop_cpu)) { if ((sim_fseeko (container, container_size - sector_size, SEEK_SET) != 0) || (sector_size != sim_fread (sector_data, 1, sector_size, container)) || (0 != memcmp (sector_data, zero_sector, sector_size))) @@ -6913,14 +6915,21 @@ if (info->flag) { /* zap type */ sim_messagef (SCPE_OK, "Trimming trailing zero containing blocks at lbn: %u \r", (uint32)(container_size / sector_size)); container_size -= sector_size; } - if (sim_switches & SWMASK ('Z')) - sim_messagef (SCPE_OK, "Last zero containing block found at lbn: %u \n", (uint32)(container_size / sector_size)); free (sector_data); free (zero_sector); - (void)sim_set_fsize (container, (t_addr)container_size); - fclose (container); - sim_set_file_times (FullPath, statb.st_atime, statb.st_mtime); - info->stat = sim_messagef (SCPE_OK, "Disk Type Removed from container '%s'\n", FullPath); + if (!stop_cpu) { + if (sim_switches & SWMASK ('Z')) + sim_messagef (SCPE_OK, "Last zero containing block found at lbn: %u \n", (uint32)(container_size / sector_size)); + (void)sim_set_fsize (container, (t_addr)container_size); + fclose (container); + sim_set_file_times (FullPath, statb.st_atime, statb.st_mtime); + info->stat = sim_messagef (SCPE_OK, "Disk Type Removed from container '%s'\n", FullPath); + } + else { + stop_cpu = FALSE; + fclose (container); + info->stat = sim_messagef (SCPE_ARG, "Canceled Disk Type Removal from container '%s'\n", FullPath); + } return; } }