Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>vavi</groupId>
<artifactId>vavi-nio-file-jnode</artifactId>
<version>0.2.14</version>
<version>0.2.15</version>
</parent>

<artifactId>jnode-core</artifactId>
Expand Down
8 changes: 4 additions & 4 deletions fs/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>vavi</groupId>
<artifactId>vavi-nio-file-jnode</artifactId>
<version>0.2.14</version>
<version>0.2.15</version>
</parent>

<artifactId>jnode-fs</artifactId>
Expand Down Expand Up @@ -46,13 +46,13 @@
<dependency>
<groupId>vavi</groupId>
<artifactId>jnode-core</artifactId>
<version>0.2.14</version>
<version>0.2.15</version>
</dependency>
<dependency>
<!--for nfs -->
<groupId>vavi</groupId>
<artifactId>jnode-net</artifactId>
<version>0.2.14</version>
<version>0.2.15</version>
</dependency>

<dependency>
Expand All @@ -63,7 +63,7 @@
<dependency>
<groupId>vavi</groupId>
<artifactId>vavi-nio-file-emu</artifactId>
<version>2.0.6</version>
<version>2.0.8</version>
<exclusions>
<exclusion>
<groupId>com.github.umjammer</groupId>
Expand Down
4 changes: 4 additions & 0 deletions fs/src/main/java/org/jnode/fs/jfat/ATBootSector.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@


/**
* <p>
* system property
* <li>{@code org.jnode.fs.jfat.ATBootSector.validation} ... {@code class#method}, {@code true}, {@code false}, default {@code false}</li>
* </p>
* @author gvt
* @author Tango
*/
Expand Down
44 changes: 5 additions & 39 deletions fs/src/main/java/org/jnode/fs/pc98/PC98BootSector.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -24,7 +22,10 @@

/**
* PC98BootSector.
*
* <p>
* system property
* <li>{@link PC98BiosParameterBlock#VALIDATION_KEY} ... default {@code true}</li>
* </p>
* @author <a href="mailto:umjammer@gmail.com">Naohide Sano</a> (umjammer)
* @version 0.00 2022/02/08 umjammer initial version <br>
*/
Expand All @@ -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];
Expand Down
23 changes: 4 additions & 19 deletions fs/src/main/java/org/jnode/fs/pc98/PC98FileSystemType.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand All @@ -35,9 +35,9 @@
* <p>
* system property
* <li>{@code "org.jnode.file.encoding"} ... filename encoding for {@link Charset#forName(String)}, default is {@code "MS932"}</li>
* <li>{@code "org.jnode.fs.pc98.validator.fat"} ... , validator for finding fat literal default is {@code false}</li>
* <li>{@code "org.jnode.fs.pc98.validator.ipl"} ... , validator for finding ipl literal default is {@code true}</li>
* <li>{@code "org.jnode.fs.pc98.validator.nec"} ... , validator for finding nec literal, default is {@code true}</li>
* <li>{@code "vavix.io.partition.validator.fat"} ... , validator for finding fat literal default is {@code false}</li>
* <li>{@code "vavix.io.partition.validator.ipl"} ... , validator for finding ipl literal default is {@code true}</li>
* <li>{@code "vavix.io.partition.validator.nec"} ... , validator for finding nec literal, default is {@code true}</li>
* </p>
*
* @author <a href="mailto:umjammer@gmail.com">Naohide Sano</a> (umjammer)
Expand All @@ -47,21 +47,6 @@ public class PC98FileSystemType implements BlockDeviceFileSystemType<FatFileSyst

private static final Logger logger = getLogger(PC98FileSystemType.class.getName());

/** boot sector value validator */
public interface Validator {

Logger logger = PC98FileSystemType.logger;

/** validation priority */
int weight();

/** use this validator nor not */
boolean enabled();

/** do validation */
boolean validate(byte[] firstSectors);
}

/** */
private static final List<Validator> validators;

Expand Down
45 changes: 0 additions & 45 deletions fs/src/main/java/org/jnode/fs/pc98/validator/FatValidator.java

This file was deleted.

45 changes: 0 additions & 45 deletions fs/src/main/java/org/jnode/fs/pc98/validator/IplValidator.java

This file was deleted.

44 changes: 0 additions & 44 deletions fs/src/main/java/org/jnode/fs/pc98/validator/MagicValidator.java

This file was deleted.

45 changes: 0 additions & 45 deletions fs/src/main/java/org/jnode/fs/pc98/validator/NecValidator.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import vavix.io.partition.PC98PartitionEntry;

import static java.lang.System.getLogger;
import static vavix.io.fat.PC98BiosParameterBlock.toLBA;


/**
Expand Down Expand Up @@ -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();
Expand Down
Loading
Loading