From 55de4ccdc434c55611b28a161bc8adc2ced571b4 Mon Sep 17 00:00:00 2001 From: Peter Osterlund Date: Fri, 28 Mar 2014 23:00:41 +0000 Subject: [PATCH] DroidFish: Don't read the whole engine file just to determine if it is a network engine or not. --- .../src/org/petero/droidfish/DroidFish.java | 17 +++---------- .../petero/droidfish/engine/EngineUtil.java | 20 ++++++++++++++++ .../droidfish/engine/NetworkEngine.java | 22 ++++++++--------- .../droidfish/engine/UCIEngineBase.java | 24 ++++--------------- 4 files changed, 38 insertions(+), 45 deletions(-) diff --git a/DroidFish/src/org/petero/droidfish/DroidFish.java b/DroidFish/src/org/petero/droidfish/DroidFish.java index ec98c3e..b7e3283 100644 --- a/DroidFish/src/org/petero/droidfish/DroidFish.java +++ b/DroidFish/src/org/petero/droidfish/DroidFish.java @@ -21,11 +21,9 @@ package org.petero.droidfish; import java.io.File; import java.io.FileFilter; -import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -2694,16 +2692,7 @@ public class DroidFish extends Activity implements GUIInterface { public boolean accept(String filename) { if (internalEngine(filename)) return false; - try { - InputStream inStream = new FileInputStream(filename); - InputStreamReader inFile = new InputStreamReader(inStream); - char[] buf = new char[4]; - boolean ret = (inFile.read(buf) == 4) && "NETE".equals(new String(buf)); - inFile.close(); - return ret; - } catch (IOException e) { - return false; - } + return EngineUtil.isNetEngine(filename); } }); final int numFiles = fileNames.length; @@ -2835,8 +2824,8 @@ public class DroidFish extends Activity implements GUIInterface { String hostName = ""; String port = "0"; try { - String[] lines = Util.readFile(networkEngineToConfig); - if ((lines.length >= 1) && lines[0].equals("NETE")) { + if (EngineUtil.isNetEngine(networkEngineToConfig)) { + String[] lines = Util.readFile(networkEngineToConfig); if (lines.length > 1) hostName = lines[1]; if (lines.length > 2) diff --git a/DroidFish/src/org/petero/droidfish/engine/EngineUtil.java b/DroidFish/src/org/petero/droidfish/engine/EngineUtil.java index c172b1b..5574c90 100644 --- a/DroidFish/src/org/petero/droidfish/engine/EngineUtil.java +++ b/DroidFish/src/org/petero/droidfish/engine/EngineUtil.java @@ -18,6 +18,11 @@ package org.petero.droidfish.engine; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + import android.os.Build; public class EngineUtil { @@ -43,6 +48,21 @@ public class EngineUtil { return "stockfish-" + abi; } + /** Return true if file "engine" is a network engine. */ + public static boolean isNetEngine(String engine) { + boolean netEngine = false; + try { + InputStream inStream = new FileInputStream(engine); + InputStreamReader inFile = new InputStreamReader(inStream); + char[] buf = new char[4]; + if ((inFile.read(buf) == 4) && "NETE".equals(new String(buf))) + netEngine = true; + inFile.close(); + } catch (IOException e) { + } + return netEngine; + } + /** Executes chmod 744 exePath. */ final static native boolean chmod(String exePath); diff --git a/DroidFish/src/org/petero/droidfish/engine/NetworkEngine.java b/DroidFish/src/org/petero/droidfish/engine/NetworkEngine.java index 9e43640..8ef43a9 100644 --- a/DroidFish/src/org/petero/droidfish/engine/NetworkEngine.java +++ b/DroidFish/src/org/petero/droidfish/engine/NetworkEngine.java @@ -67,19 +67,19 @@ public class NetworkEngine extends UCIEngineBase { if (socket == null) { String host = null; String port = null; - boolean fail = false; - try { - String[] lines = Util.readFile(fileName); - if ((lines.length < 3) || !lines[0].equals("NETE")) { - fail = true; - } else { - host = lines[1]; - port = lines[2]; + boolean ok = false; + if (EngineUtil.isNetEngine(fileName)) { + try { + String[] lines = Util.readFile(fileName); + if (lines.length >= 3) { + host = lines[1]; + port = lines[2]; + ok = true; + } + } catch (IOException e1) { } - } catch (IOException e1) { - fail = true; } - if (fail) { + if (!ok) { isError = true; report.reportError(context.getString(R.string.network_engine_config_error)); } else { diff --git a/DroidFish/src/org/petero/droidfish/engine/UCIEngineBase.java b/DroidFish/src/org/petero/droidfish/engine/UCIEngineBase.java index 15f4253..dd103d0 100644 --- a/DroidFish/src/org/petero/droidfish/engine/UCIEngineBase.java +++ b/DroidFish/src/org/petero/droidfish/engine/UCIEngineBase.java @@ -18,10 +18,6 @@ package org.petero.droidfish.engine; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; import java.util.HashMap; import java.util.HashSet; import java.util.Locale; @@ -46,22 +42,10 @@ public abstract class UCIEngineBase implements UCIEngine { return new CuckooChessEngine(report); else if ("stockfish".equals(engine)) return new InternalStockFish(context, report); - else { - boolean netEngine = false; - try { - InputStream inStream = new FileInputStream(engine); - InputStreamReader inFile = new InputStreamReader(inStream); - char[] buf = new char[4]; - if ((inFile.read(buf) == 4) && "NETE".equals(new String(buf))) - netEngine = true; - inFile.close(); - } catch (IOException e) { - } - if (netEngine) - return new NetworkEngine(context, engine, engineOptions, report); - else - return new ExternalEngine(context, engine, report); - } + else if (EngineUtil.isNetEngine(engine)) + return new NetworkEngine(context, engine, engineOptions, report); + else + return new ExternalEngine(context, engine, report); } protected UCIEngineBase() {