ソースを参照

Use image_index=-1 to mark "restart from beginning".

Previously IMAGE_INDEX_MAX was used, but the later checks for
image_index > 0 would mistakenly believe there were multiple images.

Mainly resulted in confusing log messages for drives with only a single image.
Petteri Aimonen 2 年 前
コミット
44f40af8c6
3 ファイル変更9 行追加6 行削除
  1. 3 2
      src/BlueSCSI_cdrom.cpp
  2. 3 3
      src/BlueSCSI_disk.cpp
  3. 3 1
      src/BlueSCSI_disk.h

+ 3 - 2
src/BlueSCSI_cdrom.cpp

@@ -1180,8 +1180,9 @@ void cdromReinsertFirstImage(image_config_t &img)
     if (img.image_index > 0)
     {
         // Multiple images for this drive, force restart from first one
-        debuglog("---- Restarting from first CD-ROM image");
-        img.image_index = IMAGE_INDEX_MAX;
+        uint8_t target = img.scsiId & 7;
+        debuglog("---- Restarting from first CD-ROM image for ID ", (int)target);
+        img.image_index = -1;
         img.current_image[0] = '\0';
         cdromSwitchNextImage(img);
     }

+ 3 - 3
src/BlueSCSI_disk.cpp

@@ -676,7 +676,7 @@ int scsiDiskGetNextImageName(image_config_t &img, char *buf, size_t buflen)
     else
     {
         img.image_index++;
-        if (img.image_index > IMAGE_INDEX_MAX)
+        if (img.image_index > IMAGE_INDEX_MAX || img.image_index < 0)
         {
             img.image_index = 0;
         }
@@ -693,13 +693,13 @@ int scsiDiskGetNextImageName(image_config_t &img, char *buf, size_t buflen)
         {
             // there may be more than one image but we've ran out of new ones
             // wrap back to the first image
-            img.image_index = IMAGE_INDEX_MAX;
+            img.image_index = -1;
             return scsiDiskGetNextImageName(img, buf, buflen);
         }
         else
         {
             // images are not defined in config
-            img.image_index = IMAGE_INDEX_MAX;
+            img.image_index = -1;
             return 0;
         }
     }

+ 3 - 1
src/BlueSCSI_disk.h

@@ -64,9 +64,11 @@ struct image_config_t: public S2S_TargetCfg
     bool image_directory;
     // the name of the currently mounted image in a dynamic image directory
     char current_image[MAX_FILE_PATH];
+
     // Index of image, for when image on-the-fly switching is used for CD drives
     // This is also used for dynamic directories to track how many images have been seen
-    uint8_t image_index;
+    // Negative value forces restart from first image.
+    int image_index;
 
     // Cue sheet file for CD-ROM images
     FsFile cuesheetfile;