diff --git a/README.md b/README.md
index beefbe1d01..c3e3bb4289 100644
--- a/README.md
+++ b/README.md
@@ -59,10 +59,11 @@ you can also mount all formats using fuse.
### system properties
* `org.jnode.file.encoding` ... filename encoding for `Charset#forName(String)`, default is `MS932`
-* `org.jnode.fs.pc98.validator.fat` ... , validator for finding fat literal default is `false`
-* `org.jnode.fs.pc98.validator.ipl` ... , validator for finding ipl literal default is `true`
-* `org.jnode.fs.pc98.validator.nec` ... , validator for finding nec literal, default is `true`
-* `org.jnode.fs.pc98.PC98BootSector.validation` ... `true`: do default validation, `false`: no validation, *else*: validation function name `class#method`, the method must return `boolean`
+* `vavix.io.partition.validator.fat` ... , validator for finding fat literal default is `false`
+* `vavix.io.partition.validator.ipl` ... , validator for finding ipl literal default is `true`
+* `vavix.io.partition.validator.nec` ... , validator for finding nec literal, default is `true`
+* `vavix.io.fat.PC98BiosParameterBlock.validation` ... `true`: do default validation, `false`: no validation, *else*: validation function name `class#method`, the method must return `boolean`
+* `org.jnode.fs.jfat.ATBootSector.validation` ... `true`: do default validation, `false`: no validation, *else*: validation function name `class#method`, the method must return `boolean`
### for emulator user
diff --git a/core/pom.xml b/core/pom.xml
index c137a47c1c..b28d221374 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -4,7 +4,7 @@
vavi
vavi-nio-file-jnode
- 0.2.14
+ 0.2.15
jnode-core
diff --git a/fs/pom.xml b/fs/pom.xml
index 0db8ee1753..6f9a4408de 100644
--- a/fs/pom.xml
+++ b/fs/pom.xml
@@ -5,7 +5,7 @@
vavi
vavi-nio-file-jnode
- 0.2.14
+ 0.2.15
jnode-fs
@@ -46,13 +46,13 @@
vavi
jnode-core
- 0.2.14
+ 0.2.15
vavi
jnode-net
- 0.2.14
+ 0.2.15
@@ -63,7 +63,7 @@
vavi
vavi-nio-file-emu
- 2.0.6
+ 2.0.8
com.github.umjammer
diff --git a/fs/src/main/java/org/jnode/fs/jfat/ATBootSector.java b/fs/src/main/java/org/jnode/fs/jfat/ATBootSector.java
index 6fed1d8a5c..ea7798e2dc 100644
--- a/fs/src/main/java/org/jnode/fs/jfat/ATBootSector.java
+++ b/fs/src/main/java/org/jnode/fs/jfat/ATBootSector.java
@@ -34,6 +34,10 @@
/**
+ *
+ * system property
+ *
{@code org.jnode.fs.jfat.ATBootSector.validation} ... {@code class#method}, {@code true}, {@code false}, default {@code false}
+ *
* @author gvt
* @author Tango
*/
diff --git a/fs/src/main/java/org/jnode/fs/pc98/PC98BootSector.java b/fs/src/main/java/org/jnode/fs/pc98/PC98BootSector.java
index 87f7ad6c22..d13f17e8b5 100644
--- a/fs/src/main/java/org/jnode/fs/pc98/PC98BootSector.java
+++ b/fs/src/main/java/org/jnode/fs/pc98/PC98BootSector.java
@@ -10,11 +10,9 @@
import java.io.IOException;
import java.lang.System.Logger;
import java.lang.System.Logger.Level;
-import java.lang.reflect.Method;
import java.nio.ByteBuffer;
import org.jnode.driver.block.BlockDeviceAPI;
-import org.jnode.fs.FileSystemException;
import org.jnode.fs.jfat.BootSector;
import vavi.util.serdes.Serdes;
import vavix.io.fat.PC98BiosParameterBlock;
@@ -24,7 +22,10 @@
/**
* PC98BootSector.
- *
+ *
+ * system property
+ *
{@link PC98BiosParameterBlock#VALIDATION_KEY} ... default {@code true}
+ *
* @author Naohide Sano (umjammer)
* @version 0.00 2022/02/08 umjammer initial version
*/
@@ -43,46 +44,11 @@ public PC98BootSector() {
@Override
public boolean isaValidBootSector() {
logger.log(Level.DEBUG, "bpb.fileSystem: " + bpb.fileSystem);
- boolean r = validate(bpb);
+ boolean r = bpb.validate();
if (!r) { logger.log(Level.DEBUG, "validation failed: " + bpb); }
return r;
}
- /**
- * true: do default validation,
- * false: no validation,
- * else: validation function name "class#method", the method must return boolean and
- * w/ an argument PC98BiosParameterBlock and static.
- */
- public static final String VALIDATION_KEY = "org.jnode.fs.pc98.PC98BootSector.validation";
-
- /** @see #VALIDATION_KEY */
- private static boolean validate(PC98BiosParameterBlock bpb) {
- String validation = System.getProperty(VALIDATION_KEY, "true");
- if (Boolean.parseBoolean(validation)) {
- logger.log(Level.DEBUG, "default validation");
- return bpb.fileSystem.contains("FAT");
- } else if (validation.equalsIgnoreCase("false")) {
- logger.log(Level.DEBUG, "no validation, accepting anyway");
- return true;
- } else {
- try {
- String[] parts = validation.split("#");
- Class> clazz = Class.forName(parts[0]);
- Method method = clazz.getDeclaredMethod(parts[1], PC98BiosParameterBlock.class);
- if (method.getReturnType() != Boolean.TYPE) {
- throw new IllegalArgumentException("method %s return type is not boolean but %s".formatted(method.getName(), method.getReturnType().getName()));
- }
- boolean r = method.invoke(null, bpb).equals(Boolean.TRUE);
- logger.log(Level.DEBUG, "do user bpb validation %s#%s: %s".formatted(clazz.getSimpleName(), method.getName(), r));
- return r;
- } catch (Exception e) {
- logger.log(Level.WARNING, "validation function error, accepting anyway", e);
- return true;
- }
- }
- }
-
@Override
public void read(BlockDeviceAPI device) throws IOException {
byte[] sector = new byte[1024];
diff --git a/fs/src/main/java/org/jnode/fs/pc98/PC98FileSystemType.java b/fs/src/main/java/org/jnode/fs/pc98/PC98FileSystemType.java
index 7416ab508a..28f245ac82 100644
--- a/fs/src/main/java/org/jnode/fs/pc98/PC98FileSystemType.java
+++ b/fs/src/main/java/org/jnode/fs/pc98/PC98FileSystemType.java
@@ -13,7 +13,6 @@
import java.util.List;
import java.util.ServiceLoader;
import java.util.ServiceLoader.Provider;
-import java.util.StringJoiner;
import org.jnode.driver.Device;
import org.jnode.driver.block.FSBlockDeviceAPI;
@@ -23,6 +22,7 @@
import org.jnode.fs.jfat.FatFileSystem;
import org.jnode.partitions.PartitionTableEntry;
import vavi.util.StringUtil;
+import vavix.io.partition.Validator;
import static java.lang.System.getLogger;
@@ -35,9 +35,9 @@
*
* system property
*
{@code "org.jnode.file.encoding"} ... filename encoding for {@link Charset#forName(String)}, default is {@code "MS932"}
- * {@code "org.jnode.fs.pc98.validator.fat"} ... , validator for finding fat literal default is {@code false}
- * {@code "org.jnode.fs.pc98.validator.ipl"} ... , validator for finding ipl literal default is {@code true}
- * {@code "org.jnode.fs.pc98.validator.nec"} ... , validator for finding nec literal, default is {@code true}
+ * {@code "vavix.io.partition.validator.fat"} ... , validator for finding fat literal default is {@code false}
+ * {@code "vavix.io.partition.validator.ipl"} ... , validator for finding ipl literal default is {@code true}
+ * {@code "vavix.io.partition.validator.nec"} ... , validator for finding nec literal, default is {@code true}
*
*
* @author Naohide Sano (umjammer)
@@ -47,21 +47,6 @@ public class PC98FileSystemType implements BlockDeviceFileSystemType validators;
diff --git a/fs/src/main/java/org/jnode/fs/pc98/validator/FatValidator.java b/fs/src/main/java/org/jnode/fs/pc98/validator/FatValidator.java
deleted file mode 100644
index ffe0f4b441..0000000000
--- a/fs/src/main/java/org/jnode/fs/pc98/validator/FatValidator.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2025 by Naohide Sano, All rights reserved.
- *
- * Programmed by Naohide Sano
- */
-
-package org.jnode.fs.pc98.validator;
-
-import java.lang.System.Logger.Level;
-import java.nio.charset.StandardCharsets;
-
-import org.jnode.fs.pc98.PC98FileSystemType.Validator;
-
-
-/**
- * FatValidator.
- *
- * TODO fat12 doesn't work
- *
- * @author Naohide Sano (nsano)
- * @version 0.00 2025-11-30 nsano initial version
- */
-public class FatValidator implements Validator {
-
- @Override
- public int weight() {
- return 20;
- }
-
- @Override
- public boolean enabled() {
- return Boolean.parseBoolean(System.getProperty("org.jnode.fs.pc98.validator.fat", "false"));
- }
-
- @Override
- public boolean validate(byte[] firstSectors) {
- if (!new String(firstSectors, 0x36, 3, StandardCharsets.US_ASCII).equals("FAT")) {
-logger.log(Level.TRACE, "strings FAT is not found");
- return false;
- } else {
-logger.log(Level.TRACE, "validation (FAT) passed");
- return true;
- }
- }
-}
diff --git a/fs/src/main/java/org/jnode/fs/pc98/validator/IplValidator.java b/fs/src/main/java/org/jnode/fs/pc98/validator/IplValidator.java
deleted file mode 100644
index 9f8ef2fada..0000000000
--- a/fs/src/main/java/org/jnode/fs/pc98/validator/IplValidator.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2025 by Naohide Sano, All rights reserved.
- *
- * Programmed by Naohide Sano
- */
-
-package org.jnode.fs.pc98.validator;
-
-import java.lang.System.Logger.Level;
-
-import org.jnode.fs.pc98.PC98FileSystemType.Validator;
-
-
-/**
- * NecValidator.
- *
- * @author Naohide Sano (nsano)
- * @version 0.00 2025-11-30 nsano initial version
- */
-public class IplValidator implements Validator {
-
- @Override
- public int weight() {
- return 30;
- }
-
- @Override
- public boolean enabled() {
- return Boolean.parseBoolean(System.getProperty("org.jnode.fs.pc98.validator.ipl", "true"));
- }
-
- @Override
- public boolean validate(byte[] firstSectors) {
- if (firstSectors[0x4] != 'I' ||
- firstSectors[0x5] != 'P' ||
- firstSectors[0x6] != 'L' ||
- firstSectors[0x7] != '1') {
-logger.log(Level.TRACE, "Missing magic number 'IPL1': %c%c%c%c".formatted(firstSectors[0x4] & 0xff, firstSectors[0x5] & 0xff, firstSectors[0x6] & 0xff, firstSectors[0x7] & 0xff));
- return false;
- } else {
-logger.log(Level.TRACE, "validation (IPL1) passed");
- return true;
- }
- }
-}
diff --git a/fs/src/main/java/org/jnode/fs/pc98/validator/MagicValidator.java b/fs/src/main/java/org/jnode/fs/pc98/validator/MagicValidator.java
deleted file mode 100644
index 703f1a4b6e..0000000000
--- a/fs/src/main/java/org/jnode/fs/pc98/validator/MagicValidator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2025 by Naohide Sano, All rights reserved.
- *
- * Programmed by Naohide Sano
- */
-
-package org.jnode.fs.pc98.validator;
-
-import java.lang.System.Logger.Level;
-
-import org.jnode.fs.pc98.PC98FileSystemType.Validator;
-
-
-/**
- * MagicValidator.
- *
- * @author Naohide Sano (nsano)
- * @version 0.00 2025-11-30 nsano initial version
- */
-public class MagicValidator implements Validator {
-
- @Override
- public int weight() {
- return 0;
- }
-
- @Override
- public boolean enabled() {
- return true;
- }
-
- @Override
- public boolean validate(byte[] firstSectors) {
- if (firstSectors[0xfe] != 0x55 ||
- firstSectors[0xff] != (byte) 0xaa) {
- // Missing magic number
-logger.log(Level.TRACE, "Missing magic number 0x55, 0xaa");
- return false;
- } else {
-logger.log(Level.TRACE, "validation (55aa) passed");
- return true;
- }
- }
-}
diff --git a/fs/src/main/java/org/jnode/fs/pc98/validator/NecValidator.java b/fs/src/main/java/org/jnode/fs/pc98/validator/NecValidator.java
deleted file mode 100644
index e066d3c9cb..0000000000
--- a/fs/src/main/java/org/jnode/fs/pc98/validator/NecValidator.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2025 by Naohide Sano, All rights reserved.
- *
- * Programmed by Naohide Sano
- */
-
-package org.jnode.fs.pc98.validator;
-
-import java.lang.System.Logger.Level;
-
-import org.jnode.fs.pc98.PC98FileSystemType.Validator;
-
-
-/**
- * NecValidator.
- *
- * @author Naohide Sano (nsano)
- * @version 0.00 2025-11-30 nsano initial version
- */
-public class NecValidator implements Validator {
-
- @Override
- public int weight() {
- return 10;
- }
-
- @Override
- public boolean enabled() {
- return Boolean.parseBoolean(System.getProperty("org.jnode.fs.pc98.validator.nec", "true"));
- }
-
- @Override
- public boolean validate(byte[] firstSectors) {
- if (firstSectors[0x3] != 'N' ||
- firstSectors[0x4] != 'E' ||
- firstSectors[0x5] != 'C') {
- // Missing magic number
-logger.log(Level.TRACE, "Missing magic number 'NEC': %c%c%c".formatted(firstSectors[0x3] & 0xff, firstSectors[0x4] & 0xff, firstSectors[0x5] & 0xff));
- return false;
- } else {
-logger.log(Level.TRACE, "validation (NEC) passed");
- return true;
- }
- }
-}
diff --git a/fs/src/main/java/org/jnode/partitions/pc98/PC98PartitionTableEntry.java b/fs/src/main/java/org/jnode/partitions/pc98/PC98PartitionTableEntry.java
index 54915ee3dc..597486ccd1 100644
--- a/fs/src/main/java/org/jnode/partitions/pc98/PC98PartitionTableEntry.java
+++ b/fs/src/main/java/org/jnode/partitions/pc98/PC98PartitionTableEntry.java
@@ -15,6 +15,7 @@
import vavix.io.partition.PC98PartitionEntry;
import static java.lang.System.getLogger;
+import static vavix.io.fat.PC98BiosParameterBlock.toLBA;
/**
@@ -44,12 +45,6 @@ public PC98PartitionTableEntry(PC98PartitionEntry pe, Device device) {
logger.log(Level.DEBUG, "heads: %d, secs: %d, device: %s".formatted(heads, secs, device.getClass().getName()));
}
- // @see "https://github.com/aaru-dps/Aaru.Helpers/blob/4640bb88d3eb907d0f0617d5ee5159fbc13c5653/CHS.cs"
- private static int toLBA(int cyl, int head, int sector, int maxHead, int maxSector) {
- return maxHead == 0 || maxSector == 0 ? (((cyl * 16) + head) * 63) + sector - 1
- : (((cyl * maxHead) + head) * maxSector) + sector - 1;
- }
-
@Override
public boolean isValid() {
return pe.isValid();
diff --git a/fs/src/main/resources/META-INF/services/org.jnode.fs.pc98.PC98FileSystemType$Validator b/fs/src/main/resources/META-INF/services/org.jnode.fs.pc98.PC98FileSystemType$Validator
deleted file mode 100644
index 0ce0acc2f5..0000000000
--- a/fs/src/main/resources/META-INF/services/org.jnode.fs.pc98.PC98FileSystemType$Validator
+++ /dev/null
@@ -1,4 +0,0 @@
-org.jnode.fs.pc98.validator.MagicValidator
-org.jnode.fs.pc98.validator.NecValidator
-org.jnode.fs.pc98.validator.FatValidator
-org.jnode.fs.pc98.validator.IplValidator
diff --git a/fs/src/test/java/org/jnode/test/partitions/ibm/IBMPartitionTableEntryTest.java b/fs/src/test/java/org/jnode/test/partitions/ibm/IBMPartitionTableEntryTest.java
index dfaf4e388f..01a0ae5e30 100644
--- a/fs/src/test/java/org/jnode/test/partitions/ibm/IBMPartitionTableEntryTest.java
+++ b/fs/src/test/java/org/jnode/test/partitions/ibm/IBMPartitionTableEntryTest.java
@@ -72,5 +72,4 @@ private byte[] getBootSector() {
byte[] bs = new byte[500];
return bs;
}
-
}
diff --git a/fs/src/test/java/vavi/nio/file/jnode/SpiTest.java b/fs/src/test/java/vavi/nio/file/jnode/SpiTest.java
index c90f396c37..c619e47a08 100644
--- a/fs/src/test/java/vavi/nio/file/jnode/SpiTest.java
+++ b/fs/src/test/java/vavi/nio/file/jnode/SpiTest.java
@@ -28,7 +28,7 @@
import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
-import static org.jnode.fs.pc98.PC98BootSector.VALIDATION_KEY;
+import static vavix.io.fat.PC98BiosParameterBlock.VALIDATION_KEY;
/**
@@ -138,7 +138,7 @@ void test4() throws Exception {
fs.close();
}
- /** bpb validator specified by a system property {@link org.jnode.fs.pc98.PC98BootSector#VALIDATION_KEY} */
+ /** bpb validator specified by a system property {@link PC98BiosParameterBlock#VALIDATION_KEY} */
public static boolean validate(PC98BiosParameterBlock bpb) {
Debug.print(bpb);
return bpb.oemLabel.contains("NEC");
diff --git a/net/pom.xml b/net/pom.xml
index 4a036f716a..60d09fcc81 100644
--- a/net/pom.xml
+++ b/net/pom.xml
@@ -4,7 +4,7 @@
vavi
vavi-nio-file-jnode
- 0.2.14
+ 0.2.15
jnode-net
@@ -35,7 +35,7 @@
vavi
jnode-core
- 0.2.14
+ 0.2.15
diff --git a/pom.xml b/pom.xml
index aa1c8747cc..f97dcc6ab5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
vavi
vavi-nio-file-jnode
- 0.2.14
+ 0.2.15
pom
JNode Parent Module
@@ -47,7 +47,7 @@
org.junit
junit-bom
- 5.14.0
+ 5.14.1
pom
import