From 6f68e6c062e4d54703b325b2aa6508f7aa126f57 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Wed, 3 Jun 2026 12:27:15 +0200 Subject: [PATCH] fix: seenDirs.add() after descriptor check, not before The bug: seenDirs.add(parentDir) was called BEFORE the descriptor-skip check. When .ccd was processed first, it marked cd/ as seen even though it was skipped. Then .img was skipped because cd/ was already 'seen', leaving zero imgmount lines. Fix: use seenDirs.contains(parentDir) for the continue check, and call seenDirs.add(parentDir) only after passing all checks, right before the actual imgmount output. --- src/main/java/com/dostalgia/GameService.java | 3 ++- src/main/java/com/dostalgia/UploadResource.java | 14 ++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/dostalgia/GameService.java b/src/main/java/com/dostalgia/GameService.java index a24addb..e529b8b 100644 --- a/src/main/java/com/dostalgia/GameService.java +++ b/src/main/java/com/dostalgia/GameService.java @@ -243,7 +243,7 @@ public class GameService { for (String img : cdImages) { int slashIdx = img.lastIndexOf('/'); String parentDir = slashIdx >= 0 ? img.substring(0, slashIdx) : ""; - if (!seenDirs.add(parentDir)) continue; + if (seenDirs.contains(parentDir)) continue; String imgLower = img.toLowerCase(); // Skip descriptor formats if a data format exists in the same directory if (imgLower.endsWith(".cue") || imgLower.endsWith(".ccd")) { @@ -256,6 +256,7 @@ public class GameService { }); if (hasData) continue; } + seenDirs.add(parentDir); String flags = imgLower.endsWith(".bin") ? " -t cdrom -fs iso" : " -t cdrom"; sb.append("imgmount ").append(driveLetter).append(" \"").append(img).append("\"").append(flags).append("\n"); driveLetter++; diff --git a/src/main/java/com/dostalgia/UploadResource.java b/src/main/java/com/dostalgia/UploadResource.java index 4f90562..b91194b 100644 --- a/src/main/java/com/dostalgia/UploadResource.java +++ b/src/main/java/com/dostalgia/UploadResource.java @@ -579,7 +579,7 @@ public class UploadResource { for (String img : cdImages) { int slashIdx = img.lastIndexOf('/'); String parentDir = slashIdx >= 0 ? img.substring(0, slashIdx) : ""; - if (!seenDirs.add(parentDir)) continue; + if (seenDirs.contains(parentDir)) continue; String imgLower = img.toLowerCase(); // Skip descriptor formats if a data format exists in the same directory if (imgLower.endsWith(".cue") || imgLower.endsWith(".ccd")) { @@ -592,6 +592,8 @@ public class UploadResource { }); if (hasData) continue; } + seenDirs.add(parentDir); + String imgLower = img.toLowerCase(); String flags = imgLower.endsWith(".bin") ? " -t cdrom -fs iso" : " -t cdrom"; sb.append("imgmount ").append(driveLetter).append(" \"").append(img).append("\"").append(flags).append("\n"); driveLetter++; @@ -599,11 +601,6 @@ public class UploadResource { // Present a DOS prompt — the game runs from the CD sb.append("c:\n"); sb.append("echo.\n"); - sb.append("echo [debug] cdImages found: ").append(cdImages.size()).append("\n"); - for (String img : cdImages) { - sb.append("echo - ").append(img).append("\n"); - } - sb.append("echo.\n"); sb.append("echo This game runs from the CD-ROM.\n"); sb.append("echo Type D: and press Enter, then look for the game executable (e.g. DOTT.EXE).\n"); return sb.toString(); @@ -662,7 +659,7 @@ public class UploadResource { for (String img : cdImages) { int slashIdx = img.lastIndexOf('/'); String parentDir = slashIdx >= 0 ? img.substring(0, slashIdx) : ""; - if (!seenDirs.add(parentDir)) continue; // already mounted from this dir + if (seenDirs.contains(parentDir)) continue; String imgLower = img.toLowerCase(); // Skip descriptor formats if a data format exists in the same directory if (imgLower.endsWith(".cue") || imgLower.endsWith(".ccd")) { @@ -673,8 +670,9 @@ public class UploadResource { return ip.equals(parentDir) && (il.endsWith(".img") || il.endsWith(".iso") || il.endsWith(".bin")); }); - if (hasData) continue; // data file will be mounted instead (lower in list) + if (hasData) continue; } + seenDirs.add(parentDir); String flags = imgLower.endsWith(".bin") ? " -t cdrom -fs iso" : " -t cdrom"; sb.append("imgmount ").append(driveLetter).append(" \"").append(img).append("\"").append(flags).append("\n"); driveLetter++;