Compare commits

..
Author SHA1 Message Date
Ludovic MarieandClaude Opus 5.5 266c4576a5 Launcher: java_launch's Windows paths, one part at a time
The log config and old versions' asset folder were joined from
"a/b" strings; on Windows their tests compared those mixed
separators with paths joined part by part. Join them part by part.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 01:21:50 +01:00
2 changed files with 22 additions and 6 deletions

No files matched your search

+8 -2
View File
@@ -91,7 +91,12 @@ pub fn classpath(version: &Value, minecraft: &Path, os: &str) -> Result<Vec<Path
}
}
}
paths.push(minecraft.join(format!("versions/{id}/{id}.jar")));
paths.push(
minecraft
.join("versions")
.join(mojang::relative(id)?)
.join(format!("{id}.jar")),
);
Ok(paths)
}
@@ -280,7 +285,8 @@ pub fn command(version: &Value, launch: &Launch) -> Result<Command, String> {
{
let config = launch
.minecraft
.join("assets/log_configs")
.join("assets")
.join("log_configs")
.join(mojang::relative(file)?);
jvm.push(arg.replace("${path}", &path(&config)));
}
+14 -4
View File
@@ -11,6 +11,12 @@ fn scratch(name: &str) -> PathBuf {
dir
}
/// `rel` (`a/b/c`) under `base`, one part at a time as the code joins them (Windows paths).
fn under(base: &Path, rel: &str) -> PathBuf {
rel.split('/')
.fold(base.to_path_buf(), |path, part| path.join(part))
}
fn player() -> Player {
Player {
name: "Notch".into(),
@@ -83,7 +89,7 @@ fn a_modern_version_gets_its_rules_placeholders_and_classpath() {
};
assert_eq!(a[0], "-Xmx6144M");
assert!(a.contains(&"-Dlog4j2.formatMsgNoLookups=true".into()));
let config = mc.join("assets/log_configs/client-1.21.2.xml");
let config = under(&mc, "assets/log_configs/client-1.21.2.xml");
assert!(a.contains(&format!("-Dlog4j.configurationFile={}", config.display())));
assert!(at("-XstartOnFirstThread") < at("net.minecraft.client.main.Main"));
assert!(at("-XX:+UseZGC") < at("net.minecraft.client.main.Main"));
@@ -97,13 +103,17 @@ fn a_modern_version_gets_its_rules_placeholders_and_classpath() {
assert!(!a.iter().any(|x| x == "--demo" || x == "--width"));
let sep = if cfg!(windows) { ";" } else { ":" };
let cp: Vec<String> = a[at("-cp") + 1].split(sep).map(String::from).collect();
let lib = |p: &str| mc.join("libraries").join(p).to_string_lossy().into_owned();
let lib = |p: &str| {
under(&mc.join("libraries"), p)
.to_string_lossy()
.into_owned()
};
assert_eq!(
cp,
[
lib("a/common/1/common-1.jar"),
lib("a/mac/1/mac-1.jar"),
mc.join("versions/1.21.4/1.21.4.jar")
under(&mc, "versions/1.21.4/1.21.4.jar")
.to_string_lossy()
.into_owned()
]
@@ -176,7 +186,7 @@ fn an_old_version_gets_its_natives_and_assets_by_name() {
let a = args(&command(&version, &launch).unwrap());
assert_eq!(fs::read(natives.join("liblwjgl.dylib")).unwrap(), b"lib");
assert!(!natives.join("META-INF").exists());
let virtual_dir = mc.join("assets/virtual/1.8");
let virtual_dir = under(&mc, "assets/virtual/1.8");
assert_eq!(
fs::read(virtual_dir.join("sounds/step/grass1.ogg")).unwrap(),
b"ogg"