diff --git a/source/frontends/common2/argparser.cpp b/source/frontends/common2/argparser.cpp index 2afcf54fc..82aee5008 100644 --- a/source/frontends/common2/argparser.cpp +++ b/source/frontends/common2/argparser.cpp @@ -143,6 +143,12 @@ namespace shortOptions.append(shorts.str()); } + std::string canonicalPath(const char *name) + { + // resolve all paths to avoid issues with chdir and relative paths + return std::filesystem::weakly_canonical(name).string(); + } + } // namespace namespace common2 @@ -277,7 +283,7 @@ namespace common2 } case 'c': { - options.configurationFile = optarg; + options.configurationFile = canonicalPath(optarg); break; } case 'l': @@ -287,12 +293,12 @@ namespace common2 } case '1': { - options.disk1 = optarg; + options.disk1 = canonicalPath(optarg); break; } case '2': { - options.disk2 = optarg; + options.disk2 = canonicalPath(optarg); break; } case 'r': @@ -337,12 +343,12 @@ namespace common2 } case DISK_H1: { - options.hardDisk1 = optarg; + options.hardDisk1 = canonicalPath(optarg); break; } case DISK_H2: { - options.hardDisk2 = optarg; + options.hardDisk2 = canonicalPath(optarg); break; } case MEM_CLEAR: @@ -356,17 +362,17 @@ namespace common2 } case ROM: { - options.customRom = optarg; + options.customRom = canonicalPath(optarg); break; } case F8ROM: { - options.customRomF8 = optarg; + options.customRomF8 = canonicalPath(optarg); break; } case VIDEOROM: { - options.customRomVideo = optarg; + options.customRomVideo = canonicalPath(optarg); break; } case NO_AUDIO: @@ -381,12 +387,12 @@ namespace common2 } case WAV_SPEAKER: { - options.wavFileSpeaker = optarg; + options.wavFileSpeaker = canonicalPath(optarg); break; } case WAV_MOCKINGBOARD: { - options.wavFileMockingboard = optarg; + options.wavFileMockingboard = canonicalPath(optarg); break; } case SDL_DRIVER: @@ -426,7 +432,7 @@ namespace common2 } case MAPPING_FILE: { - options.gameControllerMappingFile = optarg; + options.gameControllerMappingFile = canonicalPath(optarg); break; } case AUDIO_DEVICE: @@ -446,13 +452,13 @@ namespace common2 } case STATE_FILENAME: { - options.snapshotFilename = optarg; + options.snapshotFilename = canonicalPath(optarg); options.loadSnapshot = false; break; } case LOAD_STATE: { - options.snapshotFilename = optarg; + options.snapshotFilename = canonicalPath(optarg); options.loadSnapshot = true; break; }