diff --git a/DroidFish/jni/nativeutil.cpp b/DroidFish/jni/nativeutil.cpp index 00752cf..83520d0 100644 --- a/DroidFish/jni/nativeutil.cpp +++ b/DroidFish/jni/nativeutil.cpp @@ -19,6 +19,7 @@ #include #include #include +#include /* * Class: org_petero_droidfish_engine_EngineUtil @@ -30,3 +31,19 @@ extern "C" JNIEXPORT jint JNICALL Java_org_petero_droidfish_engine_EngineUtil_ge { return sysconf(_SC_NPROCESSORS_ONLN); } + +/* + * Class: org_petero_droidfish_engine_EngineUtil + * Method: chmod + * Signature: (Ljava/lang/String;)Z + */ +extern "C" JNIEXPORT jboolean JNICALL Java_org_petero_droidfish_engine_EngineUtil_chmod + (JNIEnv *env, jclass, jstring jExePath) +{ + const char* exePath = (*env).GetStringUTFChars(jExePath, NULL); + if (!exePath) + return false; + bool ret = chmod(exePath, 0744) == 0; + (*env).ReleaseStringUTFChars(jExePath, exePath); + return ret; +} diff --git a/DroidFish/src/org/petero/droidfish/engine/EngineUtil.java b/DroidFish/src/org/petero/droidfish/engine/EngineUtil.java index 913c009..5fb0216 100644 --- a/DroidFish/src/org/petero/droidfish/engine/EngineUtil.java +++ b/DroidFish/src/org/petero/droidfish/engine/EngineUtil.java @@ -43,4 +43,7 @@ public class EngineUtil { abi = "armeabi"; // Unknown ABI, assume original ARM return "stockfish-" + abi; } + + /** Executes chmod 744 exePath. */ + final static native boolean chmod(String exePath); } diff --git a/DroidFish/src/org/petero/droidfish/engine/ExternalEngine.java b/DroidFish/src/org/petero/droidfish/engine/ExternalEngine.java index 1a91da8..ac49bca 100644 --- a/DroidFish/src/org/petero/droidfish/engine/ExternalEngine.java +++ b/DroidFish/src/org/petero/droidfish/engine/ExternalEngine.java @@ -240,12 +240,7 @@ public class ExternalEngine extends UCIEngineBase { } private final void chmod(String exePath) throws IOException { - Process proc = Runtime.getRuntime().exec(new String[]{"chmod", "744", exePath}); - try { - proc.waitFor(); - } catch (InterruptedException e) { - proc.destroy(); + if (!EngineUtil.chmod(exePath)) throw new IOException("chmod failed"); - } } }