X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/95c518f36598dc79a3d0c6dbff9a015e31b8b84f..8afaba7009f374048dadcf486347966da5cc5412:/src/bindings/java/org/simgrid/NativeLib.java diff --git a/src/bindings/java/org/simgrid/NativeLib.java b/src/bindings/java/org/simgrid/NativeLib.java index 6739dba4b3..3db622c071 100644 --- a/src/bindings/java/org/simgrid/NativeLib.java +++ b/src/bindings/java/org/simgrid/NativeLib.java @@ -1,4 +1,4 @@ -/* Copyright (c) 2014-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2014-2018. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -13,9 +13,9 @@ import java.io.File; import java.nio.file.Files; import java.nio.file.Path; -/** Helper class loading the native functions of SimGrid that we use for downcalls - * - * Almost all org.simgrid.msg.* classes contain a static bloc (thus executed when the class is loaded) +/** Helper class loading the native functions of SimGrid that we use for downcalls + * + * Almost all org.simgrid.msg.* classes contain a static bloc (thus executed when the class is loaded) * containing a call to this. */ public final class NativeLib { @@ -27,8 +27,8 @@ public final class NativeLib { throw new IllegalAccessError("Utility class"); } - /** Hidden debug main() function - * + /** Hidden debug main() function + * * It is not the Main-Class defined in src/bindings/java/MANIFEST.in (org.simgrid.msg.Msg is), * so it won't get executed by default. But that's helpful to debug linkage errors, if you * know that it exists. It's used by cmake during the configure, to inform the user. @@ -96,13 +96,14 @@ public final class NativeLib { } /* For each possible filename of the given library on all possible OSes, try it */ - for (String filename : new String[] - { name, + for (String filename : new String[] + { name, "lib"+name+".so", /* linux */ name+".dll", "lib"+name+".dll", /* windows (pure and mingw) */ "lib"+name+".dylib" /* mac osx */}) { File fileOut = new File(tempDir.toFile().getAbsolutePath() + File.separator + filename); + boolean done = false; try ( // Try-with-resources. These stream will be autoclosed when needed. InputStream in = NativeLib.class.getClassLoader().getResourceAsStream(path+filename); OutputStream out = new FileOutputStream(fileOut); @@ -110,20 +111,20 @@ public final class NativeLib { if (in == null) continue; // Try the next name: no such file found - /* copy the library in position */ - byte[] buffer = new byte[4096]; - int bytesRead; + /* copy the library in position */ + byte[] buffer = new byte[4096]; + int bytesRead; while ((bytesRead = in.read(buffer)) != -1) // Read until EOF - out.write(buffer, 0, bytesRead); - - out.close(); // Windows cannot open it twice, so close it first. Shame. + out.write(buffer, 0, bytesRead); + done = true; + } + if (done) { /* load that shit */ System.load(fileOut.getAbsolutePath()); /* It loaded! we're good */ return true; - } } @@ -169,7 +170,7 @@ public final class NativeLib { if (! dir.delete() && !dir.getAbsolutePath().contains("appveyor") ) System.out.println("Unable to clean temporary file "+dir.getAbsolutePath()+" during shutdown."); } catch(Exception e) { - System.out.println("Unable to clean temporary file "+dir.getAbsolutePath()+" during shutdown: "+e.getCause()); + System.out.println("Error while cleaning temporary file "+dir.getAbsolutePath()+" during shutdown: "+e.getCause()); e.printStackTrace(); } }