aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/Implementation/IOUtil.testDirExe/linux-noexec-file_attribs.log119
-rw-r--r--doc/Implementation/IOUtil.testDirExe/win32-noexec-SoftwareRestrictionPolicies.log118
-rw-r--r--doc/Implementation/IOUtil.testDirExe/win32-noexec-invalid_executable.log118
-rw-r--r--doc/Implementation/IOUtil.testDirExe/win32-noexec-ntfs_attribs_deny_execute_file.log118
-rwxr-xr-xmake/scripts/runtest.sh3
-rw-r--r--src/java/com/jogamp/common/util/IOUtil.java34
-rw-r--r--src/junit/com/jogamp/common/util/TestPlatform01.java2
-rwxr-xr-xsrc/native/tinype/make.sh7
-rw-r--r--src/native/tinype/tiny2.c8
9 files changed, 512 insertions, 15 deletions
diff --git a/doc/Implementation/IOUtil.testDirExe/linux-noexec-file_attribs.log b/doc/Implementation/IOUtil.testDirExe/linux-noexec-file_attribs.log
new file mode 100644
index 0000000..b7fc4e0
--- /dev/null
+++ b/doc/Implementation/IOUtil.testDirExe/linux-noexec-file_attribs.log
@@ -0,0 +1,119 @@
+LD_LIBRARY_PATH ../build-x86_64/test/build/natives:
+USE_CLASSPATH lib/junit.jar:/opt-share/apache-ant/lib/ant.jar:/opt-share/apache-ant/lib/ant-junit.jar:/opt-share/apache-ant/lib/ant-launcher.jar:lib/semantic-versioning/semver.jar:../build-x86_64/../make/lib/TestJarsInJar.jar:../build-x86_64/gluegen-rt.jar:../build-x86_64/gluegen.jar:../build-x86_64/gluegen-test-util.jar:../build-x86_64/test/build/gluegen-test.jar:../build-x86_64/gluegen-rt-natives.jar
+/opt-linux-x86_64/jre8/bin/java
+java -cp lib/junit.jar:/opt-share/apache-ant/lib/ant.jar:/opt-share/apache-ant/lib/ant-junit.jar:/opt-share/apache-ant/lib/ant-launcher.jar:lib/semantic-versioning/semver.jar:../build-x86_64/../make/lib/TestJarsInJar.jar:../build-x86_64/gluegen-rt.jar:../build-x86_64/gluegen.jar:../build-x86_64/gluegen-test-util.jar:../build-x86_64/test/build/gluegen-test.jar:../build-x86_64/gluegen-rt-natives.jar -Drootrel.build=build-x86_64 -Dgluegen.root=.. -Djogamp.debug.IOUtil -Djogamp.debug.IOUtil.Exe -Djogamp.debug.IOUtil.Exe.NoStream com.jogamp.common.util.TestPlatform01
+JUnit version 4.11
+++++ Test Singleton.ctor()
+++++ Test Singleton.lock()
+SLOCK [T SingletonServerSocket1-localhost/127.0.0.1:59999 @ 1442811548011 ms III - Start
+SLOCK [T main @ 1442811548012 ms +++ localhost/127.0.0.1:59999 - Locked within 5 ms, 1 attempts
+.++++ TestCase.setUp: com.jogamp.common.util.TestPlatform01 - testInfo00
+
+IOUtil.getTempRoot(): tempX1 </tmp>, used true
+IOUtil.getTempRoot(): tempX3 <null>, used false
+IOUtil.getTempRoot(): tempX4 </home/sven>, used true
+IOUtil.getTempRoot(): tempX2 </home/sven/.cache>, used true
+IOUtil.testDirExec: </tmp/jogamp_exe_tst.sh>: Caught IOException: Cannot run program "/tmp/jogamp_exe_tst.sh": error=13, Permission denied
+java.io.IOException: Cannot run program "/tmp/jogamp_exe_tst.sh": error=13, Permission denied
+ at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
+ at java.lang.Runtime.exec(Runtime.java:620)
+ at com.jogamp.common.util.IOUtil.testDirExec(IOUtil.java:948)
+ at com.jogamp.common.util.IOUtil.testDirImpl(IOUtil.java:986)
+ at com.jogamp.common.util.IOUtil.getSubTempDir(IOUtil.java:1046)
+ at com.jogamp.common.util.IOUtil.getTempDir(IOUtil.java:1161)
+ at com.jogamp.common.util.cache.TempFileCache.<clinit>(TempFileCache.java:81)
+ at com.jogamp.common.util.cache.TempJarCache.initSingleton(TempJarCache.java:88)
+ at com.jogamp.common.os.Platform$1.run(Platform.java:309)
+ at java.security.AccessController.doPrivileged(Native Method)
+ at com.jogamp.common.os.Platform.<clinit>(Platform.java:287)
+ at com.jogamp.common.util.TestPlatform01.testInfo00(TestPlatform01.java:47)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.lang.reflect.Method.invoke(Method.java:497)
+ at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
+ at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+ at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
+ at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
+ at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
+ at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+ at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
+ at org.junit.rules.RunRules.evaluate(RunRules.java:20)
+ at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
+ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
+ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
+ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
+ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
+ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
+ at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
+ at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+ at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
+ at org.junit.runners.Suite.runChild(Suite.java:127)
+ at org.junit.runners.Suite.runChild(Suite.java:26)
+ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
+ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
+ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
+ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
+ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
+ at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
+ at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
+ at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
+ at org.junit.runner.JUnitCore.run(JUnitCore.java:117)
+ at org.junit.runner.JUnitCore.runMain(JUnitCore.java:96)
+ at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:47)
+ at org.junit.runner.JUnitCore.main(JUnitCore.java:40)
+ at com.jogamp.common.util.TestPlatform01.main(TestPlatform01.java:93)
+Caused by: java.io.IOException: error=13, Permission denied
+ at java.lang.UNIXProcess.forkAndExec(Native Method)
+ at java.lang.UNIXProcess.<init>(UNIXProcess.java:248)
+ at java.lang.ProcessImpl.start(ProcessImpl.java:134)
+ at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
+ ... 49 more
+IOUtil.testDirExec(): test-exe </tmp/jogamp_exe_tst.sh>, existingFile true, returned -1
+IOUtil.testDirExec(): abs-path </tmp>: res -2 -> false
+IOUtil.testDirExec(): total 72ms, create 0ms, execute 72ms
+IOUtil.testDirImpl(tempX1): </tmp>, create true, exec true: false
+IOUtil.testDirExec(): test-exe </home/sven/.cache/jogamp_exe_tst1387386267639974492.sh>, existingFile false, returned 0
+IOUtil.testDirExec(): abs-path </home/sven/.cache>: res 0 -> true
+IOUtil.testDirExec(): total 17ms, create 13ms, execute 4ms
+IOUtil.testDirImpl(tempX2): </home/sven/.cache>, create true, exec true: true
+IOUtil.testDirExec(): test-exe </home/sven/.cache/jogamp_0000/jogamp_exe_tst906522503538352810.sh>, existingFile false, returned 0
+IOUtil.testDirExec(): abs-path </home/sven/.cache/jogamp_0000>: res 0 -> true
+IOUtil.testDirExec(): total 2ms, create 0ms, execute 2ms
+IOUtil.testDirImpl(tempX2): </home/sven/.cache/jogamp_0000>, create true, exec true: true
+IOUtil.getTempRoot(): temp dirs: exec: /home/sven/.cache/jogamp_0000, noexec: /home/sven/.cache/jogamp_0000
+IOUtil.testDirImpl(testDir): </home/sven/.cache/jogamp_0000/file_cache>, create true, exec false: true
+
+OS name/type: Linux, LINUX
+OS version: 4.1.6-x64-k10-nlb-jau01, 4.1.6
+
+Arch, CPU: amd64, X86_64/X86
+OS/Arch: linux-amd64
+
+Java runtime: Java(TM) SE Runtime Environment
+Java vendor[name/url]: Oracle Corporation/http://java.oracle.com/
+Java version, vm: 1.8.0_60, Java HotSpot(TM) 64-Bit Server VM
+
+MD: MachineDataInfo: runtimeValidated true, 32Bit false, primitive size / alignment:
+ int8 1 / 1, int16 2 / 2
+ int 4 / 4, long 8 / 8
+ int32 4 / 4, int64 8 / 8
+ float 4 / 4, double 8 / 8, ldouble 16 / 16
+ pointer 8 / 8, page 4096
+
+
+++++ TestCase.tearDown: com.jogamp.common.util.TestPlatform01 - testInfo00
+.++++ TestCase.setUp: com.jogamp.common.util.TestPlatform01 - testPageSize01
+PageSize: 4096
+++++ TestCase.tearDown: com.jogamp.common.util.TestPlatform01 - testPageSize01
+++++ Test Singleton.unlock()
+SLOCK [T SingletonServerSocket1-localhost/127.0.0.1:59999 @ 1442811548171 ms III - Stopping: alive true, shallQuit true, hasSocket true
+SLOCK [T main @ 1442811548171 ms --- localhost/127.0.0.1:59999 - Unlock ok within 1 ms
+
+Time: 0.693
+
+OK (2 tests)
+
+
diff --git a/doc/Implementation/IOUtil.testDirExe/win32-noexec-SoftwareRestrictionPolicies.log b/doc/Implementation/IOUtil.testDirExe/win32-noexec-SoftwareRestrictionPolicies.log
new file mode 100644
index 0000000..d5ab377
--- /dev/null
+++ b/doc/Implementation/IOUtil.testDirExe/win32-noexec-SoftwareRestrictionPolicies.log
@@ -0,0 +1,118 @@
+JUnit version 4.11
+++++ Test Singleton.ctor()
+++++ Test Singleton.lock()
+SLOCK [T SingletonServerSocket1-localhost/127.0.0.1:59999 @ 1442715964261 ms III - Start
+SLOCK [T main @ 1442715964261 ms +++ localhost/127.0.0.1:59999 - Locked within 1032 ms, 1 attempts
+.++++ TestCase.setUp: com.jogamp.common.util.TestPlatform01 - testInfo00
+
+IOUtil.getTempRoot(): tempX1 <C:\cygwin\tmp>, used true
+IOUtil.getTempRoot(): tempX3 <C:\cygwin\tmp>, used false
+IOUtil.getTempRoot(): tempX4 <C:\Users\sven>, used true
+IOUtil.getTempRoot(): tempX2 <null>, used false
+IOUtil: locating <com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz>, has cl: true
+AssetURLContext.resolve: <com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz>
+ERR(0): no protocol: com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz
+AssetURLContext.resolve: type 2: url <jar:file:/C:/projects/jogamp/gluegen/build-win64/gluegen-rt.jar!/com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz>, conn <sun.net.www.protocol.jar.JarURLConnection:jar:file:/C:/projects/jogamp/gluegen/build-win64/gluegen-rt.jar!/com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz>, connURL <jar:file:/C:/projects/jogamp/gluegen/build-win64/gluegen-rt.jar!/com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz>
+IOUtil: found <bin/exe-windows-i386-2048b.bin.316b.gz> within class package <com/jogamp/common/util/> of given class <com.jogamp.common.util.IOUtil>: true
+IOUtil.testDirExec: <C:\cygwin\tmp\jogamp_exe_tst2114409495120940481.exe>: Caught IOException: Cannot run program "C:\cygwin\tmp\jogamp_exe_tst2114409495120940481.exe": CreateProcess error=1260, This program is blocked by group policy. For more information, contact your system administrator
+java.io.IOException: Cannot run program "C:\cygwin\tmp\jogamp_exe_tst2114409495120940481.exe": CreateProcess error=1260, This program is blocked by group policy. For more information, contact your system administrator
+ at java.lang.ProcessBuilder.start(Unknown Source)
+ at java.lang.Runtime.exec(Unknown Source)
+ at com.jogamp.common.util.IOUtil.testDirExec(IOUtil.java:938)
+ at com.jogamp.common.util.IOUtil.testDirImpl(IOUtil.java:980)
+ at com.jogamp.common.util.IOUtil.getSubTempDir(IOUtil.java:1040)
+ at com.jogamp.common.util.IOUtil.getTempDir(IOUtil.java:1155)
+ at com.jogamp.common.util.cache.TempFileCache.<clinit>(TempFileCache.java:81)
+ at com.jogamp.common.util.cache.TempJarCache.initSingleton(TempJarCache.java:88)
+ at com.jogamp.common.os.Platform$1.run(Platform.java:309)
+ at java.security.AccessController.doPrivileged(Native Method)
+ at com.jogamp.common.os.Platform.<clinit>(Platform.java:287)
+ at com.jogamp.common.util.TestPlatform01.testInfo00(TestPlatform01.java:47)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
+ at java.lang.reflect.Method.invoke(Unknown Source)
+ at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
+ at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+ at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
+ at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
+ at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
+ at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+ at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
+ at org.junit.rules.RunRules.evaluate(RunRules.java:20)
+ at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
+ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
+ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
+ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
+ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
+ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
+ at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
+ at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+ at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
+ at org.junit.runners.Suite.runChild(Suite.java:127)
+ at org.junit.runners.Suite.runChild(Suite.java:26)
+ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
+ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
+ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
+ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
+ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
+ at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
+ at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
+ at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
+ at org.junit.runner.JUnitCore.run(JUnitCore.java:117)
+ at org.junit.runner.JUnitCore.runMain(JUnitCore.java:96)
+ at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:47)
+ at org.junit.runner.JUnitCore.main(JUnitCore.java:40)
+ at com.jogamp.common.util.TestPlatform01.main(TestPlatform01.java:93)
+Caused by: java.io.IOException: CreateProcess error=1260, This program is blocked by group policy. For more information, contact your system administrator
+ at java.lang.ProcessImpl.create(Native Method)
+ at java.lang.ProcessImpl.<init>(Unknown Source)
+ at java.lang.ProcessImpl.start(Unknown Source)
+ ... 50 more
+IOUtil.testDirExec(): test-exe <C:\cygwin\tmp\jogamp_exe_tst2114409495120940481.exe>
+IOUtil.testDirExec(): abs-path <C:\cygwin\tmp>: res -2 -> false
+IOUtil.testDirExec(): total 172ms, create 78ms, execute 94ms
+IOUtil.testDirImpl(tempX1): <C:\cygwin\tmp>, create true, exec true: false
+IOUtil.testDirExec(): test-exe <C:\Users\sven\jogamp_exe_tst3300634740132855682.exe>
+IOUtil.testDirExec(): abs-path <C:\Users\sven>: res 0 -> true
+IOUtil.testDirExec(): total 78ms, create 0ms, execute 78ms
+IOUtil.testDirImpl(tempX4): <C:\Users\sven>, create true, exec true: true
+IOUtil.testDirExec(): test-exe <C:\Users\sven\.jogamp_0000\jogamp_exe_tst3236854417674340992.exe>
+IOUtil.testDirExec(): abs-path <C:\Users\sven\.jogamp_0000>: res 0 -> true
+IOUtil.testDirExec(): total 16ms, create 0ms, execute 16ms
+IOUtil.testDirImpl(tempX4): <C:\Users\sven\.jogamp_0000>, create true, exec true: true
+IOUtil.getTempRoot(): temp dirs: exec: C:\Users\sven\.jogamp_0000, noexec: C:\Users\sven\.jogamp_0000
+IOUtil.testDirImpl(testDir): <C:\Users\sven\.jogamp_0000\file_cache>, create true, exec false: true
+
+OS name/type: Windows 7, WINDOWS
+OS version: 6.1, 6.1.0
+
+Arch, CPU: amd64, X86_64/X86
+OS/Arch: windows-amd64
+
+Java runtime: Java(TM) SE Runtime Environment
+Java vendor[name/url]: Oracle Corporation/http://java.oracle.com/
+Java version, vm: 1.8.0_60, Java HotSpot(TM) 64-Bit Server VM
+
+MD: MachineDataInfo: runtimeValidated true, 32Bit false, primitive size / alignment:
+ int8 1 / 1, int16 2 / 2
+ int 4 / 4, long 4 / 4
+ int32 4 / 4, int64 8 / 8
+ float 4 / 4, double 8 / 8, ldouble 16 / 16
+ pointer 8 / 8, page 4096
+
+
+++++ TestCase.tearDown: com.jogamp.common.util.TestPlatform01 - testInfo00
+.++++ TestCase.setUp: com.jogamp.common.util.TestPlatform01 - testPageSize01
+PageSize: 4096
+++++ TestCase.tearDown: com.jogamp.common.util.TestPlatform01 - testPageSize01
+++++ Test Singleton.unlock()
+SLOCK [T SingletonServerSocket1-localhost/127.0.0.1:59999 @ 1442715964729 ms III - Stopping: alive true, shallQuit true, hasSocket true
+SLOCK [T main @ 1442715964729 ms --- localhost/127.0.0.1:59999 - Unlock ok within 0 ms
+
+Time: 2.015
+
+OK (2 tests)
+
diff --git a/doc/Implementation/IOUtil.testDirExe/win32-noexec-invalid_executable.log b/doc/Implementation/IOUtil.testDirExe/win32-noexec-invalid_executable.log
new file mode 100644
index 0000000..3c0992b
--- /dev/null
+++ b/doc/Implementation/IOUtil.testDirExe/win32-noexec-invalid_executable.log
@@ -0,0 +1,118 @@
+JUnit version 4.11
+++++ Test Singleton.ctor()
+++++ Test Singleton.lock()
+SLOCK [T SingletonServerSocket1-localhost/127.0.0.1:59999 @ 1442717359736 ms III - Start
+SLOCK [T main @ 1442717359736 ms +++ localhost/127.0.0.1:59999 - Locked within 1047 ms, 1 attempts
+.++++ TestCase.setUp: com.jogamp.common.util.TestPlatform01 - testInfo00
+
+IOUtil.getTempRoot(): tempX1 <C:\cygwin\tmp>, used true
+IOUtil.getTempRoot(): tempX3 <C:\cygwin\tmp>, used false
+IOUtil.getTempRoot(): tempX4 <C:\Users\sven>, used true
+IOUtil.getTempRoot(): tempX2 <null>, used false
+IOUtil.testDirExec: <C:\cygwin\tmp\jogamp_exe_tst.exe>: Caught IOException: Cannot run program "C:\cygwin\tmp\jogamp_exe_tst.exe": CreateProcess error=216, This version of %1 is not compatible with the version of Windows you're running. Check your computer's system information to see whether you need a x86 (32-bit) or x64 (64-bit) version of the program, and then contact the software publisher
+java.io.IOException: Cannot run program "C:\cygwin\tmp\jogamp_exe_tst.exe": CreateProcess error=216, This version of %1 is not compatible with the version of Windows you're running. Check your computer's system information to see whether you need a x86 (32-bit) or x64 (64-bit) version of the program, and then contact the software publisher
+ at java.lang.ProcessBuilder.start(Unknown Source)
+ at java.lang.Runtime.exec(Unknown Source)
+ at com.jogamp.common.util.IOUtil.testDirExec(IOUtil.java:948)
+ at com.jogamp.common.util.IOUtil.testDirImpl(IOUtil.java:990)
+ at com.jogamp.common.util.IOUtil.getSubTempDir(IOUtil.java:1050)
+ at com.jogamp.common.util.IOUtil.getTempDir(IOUtil.java:1165)
+ at com.jogamp.common.util.cache.TempFileCache.<clinit>(TempFileCache.java:81)
+ at com.jogamp.common.util.cache.TempJarCache.initSingleton(TempJarCache.java:88)
+ at com.jogamp.common.os.Platform$1.run(Platform.java:309)
+ at java.security.AccessController.doPrivileged(Native Method)
+ at com.jogamp.common.os.Platform.<clinit>(Platform.java:287)
+ at com.jogamp.common.util.TestPlatform01.testInfo00(TestPlatform01.java:47)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
+ at java.lang.reflect.Method.invoke(Unknown Source)
+ at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
+ at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+ at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
+ at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
+ at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
+ at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+ at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
+ at org.junit.rules.RunRules.evaluate(RunRules.java:20)
+ at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
+ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
+ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
+ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
+ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
+ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
+ at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
+ at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+ at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
+ at org.junit.runners.Suite.runChild(Suite.java:127)
+ at org.junit.runners.Suite.runChild(Suite.java:26)
+ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
+ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
+ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
+ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
+ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
+ at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
+ at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
+ at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
+ at org.junit.runner.JUnitCore.run(JUnitCore.java:117)
+ at org.junit.runner.JUnitCore.runMain(JUnitCore.java:96)
+ at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:47)
+ at org.junit.runner.JUnitCore.main(JUnitCore.java:40)
+ at com.jogamp.common.util.TestPlatform01.main(TestPlatform01.java:93)
+Caused by: java.io.IOException: CreateProcess error=216, This version of %1 is not compatible with the version of Windows you're running. Check your computer's system information to see whether you need a x86 (32-bit) or x64 (64-bit) version of the program, and then contact the software publisher
+ at java.lang.ProcessImpl.create(Native Method)
+ at java.lang.ProcessImpl.<init>(Unknown Source)
+ at java.lang.ProcessImpl.start(Unknown Source)
+ ... 50 more
+IOUtil.testDirExec(): test-exe <C:\cygwin\tmp\jogamp_exe_tst.exe>, existingFile true
+IOUtil.testDirExec(): abs-path <C:\cygwin\tmp>: res -2 -> false
+IOUtil.testDirExec(): total 63ms, create 0ms, execute 63ms
+IOUtil.testDirImpl(tempX1): <C:\cygwin\tmp>, create true, exec true: false
+IOUtil: locating <com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz>, has cl: true
+AssetURLContext.resolve: <com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz>
+ERR(0): no protocol: com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz
+AssetURLContext.resolve: type 2: url <jar:file:/C:/projects/jogamp/gluegen/build-win64/gluegen-rt.jar!/com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz>, conn <sun.net.www.protocol.jar.JarURLConnection:jar:file:/C:/projects/jogamp/gluegen/build-win64/gluegen-rt.jar!/com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz>, connURL <jar:file:/C:/projects/jogamp/gluegen/build-win64/gluegen-rt.jar!/com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz>
+IOUtil: found <bin/exe-windows-i386-2048b.bin.316b.gz> within class package <com/jogamp/common/util/> of given class <com.jogamp.common.util.IOUtil>: true
+IOUtil.testDirExec(): test-exe <C:\Users\sven\jogamp_exe_tst568391728696376020.exe>, existingFile false
+IOUtil.testDirExec(): abs-path <C:\Users\sven>: res 0 -> true
+IOUtil.testDirExec(): total 578ms, create 94ms, execute 484ms
+IOUtil.testDirImpl(tempX4): <C:\Users\sven>, create true, exec true: true
+IOUtil.testDirExec(): test-exe <C:\Users\sven\.jogamp_0000\jogamp_exe_tst1623018008115501549.exe>, existingFile false
+IOUtil.testDirExec(): abs-path <C:\Users\sven\.jogamp_0000>: res 0 -> true
+IOUtil.testDirExec(): total 16ms, create 0ms, execute 16ms
+IOUtil.testDirImpl(tempX4): <C:\Users\sven\.jogamp_0000>, create true, exec true: true
+IOUtil.getTempRoot(): temp dirs: exec: C:\Users\sven\.jogamp_0000, noexec: C:\Users\sven\.jogamp_0000
+IOUtil.testDirImpl(testDir): <C:\Users\sven\.jogamp_0000\file_cache>, create true, exec false: true
+
+OS name/type: Windows 7, WINDOWS
+OS version: 6.1, 6.1.0
+
+Arch, CPU: amd64, X86_64/X86
+OS/Arch: windows-amd64
+
+Java runtime: Java(TM) SE Runtime Environment
+Java vendor[name/url]: Oracle Corporation/http://java.oracle.com/
+Java version, vm: 1.8.0_60, Java HotSpot(TM) 64-Bit Server VM
+
+MD: MachineDataInfo: runtimeValidated true, 32Bit false, primitive size / alignment:
+ int8 1 / 1, int16 2 / 2
+ int 4 / 4, long 4 / 4
+ int32 4 / 4, int64 8 / 8
+ float 4 / 4, double 8 / 8, ldouble 16 / 16
+ pointer 8 / 8, page 4096
+
+
+++++ TestCase.tearDown: com.jogamp.common.util.TestPlatform01 - testInfo00
+.++++ TestCase.setUp: com.jogamp.common.util.TestPlatform01 - testPageSize01
+PageSize: 4096
+++++ TestCase.tearDown: com.jogamp.common.util.TestPlatform01 - testPageSize01
+++++ Test Singleton.unlock()
+SLOCK [T SingletonServerSocket1-localhost/127.0.0.1:59999 @ 1442717360611 ms III - Stopping: alive true, shallQuit true, hasSocket true
+SLOCK [T main @ 1442717360611 ms --- localhost/127.0.0.1:59999 - Unlock ok within 0 ms
+
+Time: 2.437
+
+OK (2 tests)
+
diff --git a/doc/Implementation/IOUtil.testDirExe/win32-noexec-ntfs_attribs_deny_execute_file.log b/doc/Implementation/IOUtil.testDirExe/win32-noexec-ntfs_attribs_deny_execute_file.log
new file mode 100644
index 0000000..babe6fe
--- /dev/null
+++ b/doc/Implementation/IOUtil.testDirExe/win32-noexec-ntfs_attribs_deny_execute_file.log
@@ -0,0 +1,118 @@
+JUnit version 4.11
+++++ Test Singleton.ctor()
+++++ Test Singleton.lock()
+SLOCK [T SingletonServerSocket1-localhost/127.0.0.1:59999 @ 1442716830836 ms III - Start
+SLOCK [T main @ 1442716830836 ms +++ localhost/127.0.0.1:59999 - Locked within 1032 ms, 1 attempts
+.++++ TestCase.setUp: com.jogamp.common.util.TestPlatform01 - testInfo00
+
+IOUtil.getTempRoot(): tempX1 <C:\cygwin\tmp>, used true
+IOUtil.getTempRoot(): tempX3 <C:\cygwin\tmp>, used false
+IOUtil.getTempRoot(): tempX4 <C:\Users\sven>, used true
+IOUtil.getTempRoot(): tempX2 <null>, used false
+IOUtil: locating <com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz>, has cl: true
+AssetURLContext.resolve: <com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz>
+ERR(0): no protocol: com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz
+AssetURLContext.resolve: type 2: url <jar:file:/C:/projects/jogamp/gluegen/build-win64/gluegen-rt.jar!/com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz>, conn <sun.net.www.protocol.jar.JarURLConnection:jar:file:/C:/projects/jogamp/gluegen/build-win64/gluegen-rt.jar!/com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz>, connURL <jar:file:/C:/projects/jogamp/gluegen/build-win64/gluegen-rt.jar!/com/jogamp/common/util/bin/exe-windows-i386-2048b.bin.316b.gz>
+IOUtil: found <bin/exe-windows-i386-2048b.bin.316b.gz> within class package <com/jogamp/common/util/> of given class <com.jogamp.common.util.IOUtil>: true
+IOUtil.testDirExec: <C:\cygwin\tmp\jogamp_exe_tst.exe>: Caught IOException: Cannot run program "C:\cygwin\tmp\jogamp_exe_tst.exe": CreateProcess error=5, Access is denied
+java.io.IOException: Cannot run program "C:\cygwin\tmp\jogamp_exe_tst.exe": CreateProcess error=5, Access is denied
+ at java.lang.ProcessBuilder.start(Unknown Source)
+ at java.lang.Runtime.exec(Unknown Source)
+ at com.jogamp.common.util.IOUtil.testDirExec(IOUtil.java:943)
+ at com.jogamp.common.util.IOUtil.testDirImpl(IOUtil.java:985)
+ at com.jogamp.common.util.IOUtil.getSubTempDir(IOUtil.java:1045)
+ at com.jogamp.common.util.IOUtil.getTempDir(IOUtil.java:1160)
+ at com.jogamp.common.util.cache.TempFileCache.<clinit>(TempFileCache.java:81)
+ at com.jogamp.common.util.cache.TempJarCache.initSingleton(TempJarCache.java:88)
+ at com.jogamp.common.os.Platform$1.run(Platform.java:309)
+ at java.security.AccessController.doPrivileged(Native Method)
+ at com.jogamp.common.os.Platform.<clinit>(Platform.java:287)
+ at com.jogamp.common.util.TestPlatform01.testInfo00(TestPlatform01.java:47)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
+ at java.lang.reflect.Method.invoke(Unknown Source)
+ at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
+ at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
+ at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
+ at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
+ at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
+ at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+ at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
+ at org.junit.rules.RunRules.evaluate(RunRules.java:20)
+ at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
+ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
+ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
+ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
+ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
+ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
+ at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
+ at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
+ at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
+ at org.junit.runners.Suite.runChild(Suite.java:127)
+ at org.junit.runners.Suite.runChild(Suite.java:26)
+ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
+ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
+ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
+ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
+ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
+ at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
+ at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
+ at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
+ at org.junit.runner.JUnitCore.run(JUnitCore.java:117)
+ at org.junit.runner.JUnitCore.runMain(JUnitCore.java:96)
+ at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:47)
+ at org.junit.runner.JUnitCore.main(JUnitCore.java:40)
+ at com.jogamp.common.util.TestPlatform01.main(TestPlatform01.java:93)
+Caused by: java.io.IOException: CreateProcess error=5, Access is denied
+ at java.lang.ProcessImpl.create(Native Method)
+ at java.lang.ProcessImpl.<init>(Unknown Source)
+ at java.lang.ProcessImpl.start(Unknown Source)
+ ... 50 more
+IOUtil.testDirExec(): test-exe <C:\cygwin\tmp\jogamp_exe_tst.exe>
+IOUtil.testDirExec(): abs-path <C:\cygwin\tmp>: res -2 -> false
+IOUtil.testDirExec(): total 125ms, create 0ms, execute 125ms
+IOUtil.testDirImpl(tempX1): <C:\cygwin\tmp>, create true, exec true: false
+IOUtil.testDirExec(): test-exe <C:\Users\sven\jogamp_exe_tst7651594440543611975.exe>
+IOUtil.testDirExec(): abs-path <C:\Users\sven>: res 0 -> true
+IOUtil.testDirExec(): total 156ms, create 78ms, execute 78ms
+IOUtil.testDirImpl(tempX4): <C:\Users\sven>, create true, exec true: true
+IOUtil.testDirExec(): test-exe <C:\Users\sven\.jogamp_0000\jogamp_exe_tst3352045683524933560.exe>
+IOUtil.testDirExec(): abs-path <C:\Users\sven\.jogamp_0000>: res 0 -> true
+IOUtil.testDirExec(): total 47ms, create 0ms, execute 47ms
+IOUtil.testDirImpl(tempX4): <C:\Users\sven\.jogamp_0000>, create true, exec true: true
+IOUtil.getTempRoot(): temp dirs: exec: C:\Users\sven\.jogamp_0000, noexec: C:\Users\sven\.jogamp_0000
+IOUtil.testDirImpl(testDir): <C:\Users\sven\.jogamp_0000\file_cache>, create true, exec false: true
+
+OS name/type: Windows 7, WINDOWS
+OS version: 6.1, 6.1.0
+
+Arch, CPU: amd64, X86_64/X86
+OS/Arch: windows-amd64
+
+Java runtime: Java(TM) SE Runtime Environment
+Java vendor[name/url]: Oracle Corporation/http://java.oracle.com/
+Java version, vm: 1.8.0_60, Java HotSpot(TM) 64-Bit Server VM
+
+MD: MachineDataInfo: runtimeValidated true, 32Bit false, primitive size / alignment:
+ int8 1 / 1, int16 2 / 2
+ int 4 / 4, long 4 / 4
+ int32 4 / 4, int64 8 / 8
+ float 4 / 4, double 8 / 8, ldouble 16 / 16
+ pointer 8 / 8, page 4096
+
+
+++++ TestCase.tearDown: com.jogamp.common.util.TestPlatform01 - testInfo00
+.++++ TestCase.setUp: com.jogamp.common.util.TestPlatform01 - testPageSize01
+PageSize: 4096
+++++ TestCase.tearDown: com.jogamp.common.util.TestPlatform01 - testPageSize01
+++++ Test Singleton.unlock()
+SLOCK [T SingletonServerSocket1-localhost/127.0.0.1:59999 @ 1442716831367 ms III - Stopping: alive true, shallQuit true, hasSocket true
+SLOCK [T main @ 1442716831367 ms --- localhost/127.0.0.1:59999 - Unlock ok within 0 ms
+
+Time: 2.078
+
+OK (2 tests)
+
diff --git a/make/scripts/runtest.sh b/make/scripts/runtest.sh
index d66d8c5..ac56a9c 100755
--- a/make/scripts/runtest.sh
+++ b/make/scripts/runtest.sh
@@ -60,7 +60,8 @@ X_ARGS="-Drootrel.build=$ROOTREL_BUILD -Dgluegen.root=$GLUEGEN_ROOT"
#D_ARGS="-Djogamp.debug.Lock"
#D_ARGS="-Djogamp.debug.Lock -Djogamp.debug.Lock.TraceLock"
#D_ARGS="-Djogamp.debug.Lock.TraceLock"
-D_ARGS="-Djogamp.debug.IOUtil -Djogamp.debug.IOUtil.Exe"
+D_ARGS="-Djogamp.debug.IOUtil -Djogamp.debug.IOUtil.Exe -Djogamp.debug.IOUtil.Exe.NoStream"
+#D_ARGS="-Djogamp.debug.IOUtil -Djogamp.debug.IOUtil.Exe"
#D_ARGS="-Djogamp.debug.ByteBufferInputStream"
#D_ARGS="-Djogamp.debug.Bitstream"
#D_ARGS="-Djogamp.debug=all"
diff --git a/src/java/com/jogamp/common/util/IOUtil.java b/src/java/com/jogamp/common/util/IOUtil.java
index 3ed28db..9bbb09b 100644
--- a/src/java/com/jogamp/common/util/IOUtil.java
+++ b/src/java/com/jogamp/common/util/IOUtil.java
@@ -64,11 +64,13 @@ import com.jogamp.common.os.Platform;
public class IOUtil {
public static final boolean DEBUG;
private static final boolean DEBUG_EXE;
+ private static final boolean DEBUG_EXE_NOSTREAM;
static {
Debug.initSingleton();
DEBUG = Debug.debug("IOUtil");
DEBUG_EXE = PropertyAccess.isPropertyDefined("jogamp.debug.IOUtil.Exe", true);
+ DEBUG_EXE_NOSTREAM = PropertyAccess.isPropertyDefined("jogamp.debug.IOUtil.Exe.NoStream", true);
}
/** Std. temporary directory property key <code>java.io.tmpdir</code>. */
@@ -906,8 +908,16 @@ public class IOUtil {
final long t0 = debug ? System.currentTimeMillis() : 0;
final File exeTestFile;
+ final boolean existingExe;
try {
- exeTestFile = File.createTempFile("jogamp_exe_tst", getExeTestFileSuffix(), dir);
+ final File permExeTestFile = DEBUG_EXE ? new File(dir, "jogamp_exe_tst"+getExeTestFileSuffix()) : null;
+ if( null != permExeTestFile && permExeTestFile.exists() ) {
+ exeTestFile = permExeTestFile;
+ existingExe = true;
+ } else {
+ exeTestFile = File.createTempFile("jogamp_exe_tst", getExeTestFileSuffix(), dir);
+ existingExe = false;
+ }
} catch (final SecurityException se) {
throw se; // fwd Security exception
} catch (final IOException e) {
@@ -918,18 +928,22 @@ public class IOUtil {
}
final long t1 = debug ? System.currentTimeMillis() : 0;
int res = -1;
- if(exeTestFile.setExecutable(true /* exec */, true /* ownerOnly */)) {
+ int exitValue = -1;
+ if( existingExe || exeTestFile.setExecutable(true /* exec */, true /* ownerOnly */) ) {
try {
- fillExeTestFile(exeTestFile);
-
+ if( !existingExe ) {
+ fillExeTestFile(exeTestFile);
+ }
// Using 'Process.exec(String[])' avoids StringTokenizer of 'Process.exec(String)'
// and hence splitting up command by spaces!
- final Process pr = Runtime.getRuntime().exec( getExeTestCommandArgs( exeTestFile.getCanonicalPath() ) );
- if( DEBUG_EXE ) {
+ // Note: All no-exec cases throw an IOExceptions at ProcessBuilder.start(), i.e. below exec() call!
+ final Process pr = Runtime.getRuntime().exec( getExeTestCommandArgs( exeTestFile.getCanonicalPath() ), null, null );
+ if( DEBUG_EXE && !DEBUG_EXE_NOSTREAM ) {
new StreamMonitor(new InputStream[] { pr.getInputStream(), pr.getErrorStream() }, System.err, "Exe-Tst: ");
}
pr.waitFor() ;
- res = pr.exitValue();
+ exitValue = pr.exitValue(); // Note: Bug 1219 Comment 50: On reporter's machine exit value 1 is being returned
+ res = 0; // file has been executed
} catch (final SecurityException se) {
throw se; // fwd Security exception
} catch (final Throwable t) {
@@ -941,14 +955,12 @@ public class IOUtil {
}
}
final boolean ok = 0 == res;
- if( !DEBUG_EXE ) {
+ if( !DEBUG_EXE && !existingExe ) {
exeTestFile.delete();
}
if( debug ) {
final long t2 = System.currentTimeMillis();
- if( DEBUG_EXE ) {
- System.err.println("IOUtil.testDirExec(): test-exe <"+exeTestFile.getAbsolutePath()+">");
- }
+ System.err.println("IOUtil.testDirExec(): test-exe <"+exeTestFile.getAbsolutePath()+">, existingFile "+existingExe+", returned "+exitValue);
System.err.println("IOUtil.testDirExec(): abs-path <"+dir.getAbsolutePath()+">: res "+res+" -> "+ok);
System.err.println("IOUtil.testDirExec(): total "+(t2-t0)+"ms, create "+(t1-t0)+"ms, execute "+(t2-t1)+"ms");
}
diff --git a/src/junit/com/jogamp/common/util/TestPlatform01.java b/src/junit/com/jogamp/common/util/TestPlatform01.java
index 6f1fe0e..bf3e79d 100644
--- a/src/junit/com/jogamp/common/util/TestPlatform01.java
+++ b/src/junit/com/jogamp/common/util/TestPlatform01.java
@@ -44,7 +44,7 @@ public class TestPlatform01 extends SingletonJunitCase {
@Test
public void testInfo00() {
System.err.println();
- System.err.println();
+ System.err.print(Platform.getNewline());
System.err.println("OS name/type: "+Platform.getOSName()+", "+Platform.getOSType());
System.err.println("OS version: "+Platform.getOSVersion()+", "+Platform.getOSVersionNumber());
System.err.println();
diff --git a/src/native/tinype/make.sh b/src/native/tinype/make.sh
index 2a81c6b..9a68f0d 100755
--- a/src/native/tinype/make.sh
+++ b/src/native/tinype/make.sh
@@ -1,4 +1,7 @@
+/cygdrive/c/mingw/bin/gcc -nodefaultlibs -nostdlib -s -Os -mwindows -o tiny2-win32-i386.exe tiny2.c
+
/cygdrive/c/mingw/bin/gcc -nodefaultlibs -nostdlib -s -Os -mwindows -o tiny-win32-i386.exe tiny.c
gzip -9 -c tiny-win32-i386.exe > tiny-win32-i386.exe.gz
-/cygdrive/c/mingw64/bin/gcc -nodefaultlibs -nostdlib -s -Os -mwindows -o tiny-win32-x86_64.exe tiny.c
-gzip -9 -c tiny-win32-x86_64.exe > tiny-win32-x86_64.exe.gz
+
+#/cygdrive/c/mingw64/bin/gcc -nodefaultlibs -nostdlib -s -Os -mwindows -o tiny-win32-x86_64.exe tiny.c
+#gzip -9 -c tiny-win32-x86_64.exe > tiny-win32-x86_64.exe.gz
diff --git a/src/native/tinype/tiny2.c b/src/native/tinype/tiny2.c
new file mode 100644
index 0000000..d24c287
--- /dev/null
+++ b/src/native/tinype/tiny2.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+const char * id = "JogAmp Windows Universal Test PE Executable";
+
+int main()
+{
+ fprintf(stderr, "%s\n", id);
+ return 42;
+}