This commit is contained in:
Mohanned Anwar 2023-07-17 21:39:12 -05:00 committed by GitHub
commit c208c6a2ae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -7,6 +7,7 @@ import java.io.InputStream;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.StandardCopyOption; import java.nio.file.StandardCopyOption;
import java.util.Locale; import java.util.Locale;
import java.util.Objects;
public final class NativeUtils { public final class NativeUtils {
@ -19,36 +20,33 @@ public final class NativeUtils {
} }
private static File unpackLibraryFromJarInternal(String path) throws IOException { private static File unpackLibraryFromJarInternal(String path) throws IOException {
if (null == path || !path.startsWith("/")) { Objects.requireNonNull(path, "The path cannot be null.");
throw new IllegalArgumentException("The path has to be absolute (start with '/')."); if (!path.startsWith("/")) {
throw new IllegalArgumentException("The path has to be absolute (start with '/').");
} }
String[] parts = path.split("/"); String[] parts = path.split("/");
String filename = (parts.length > 1) ? parts[parts.length - 1] : null; String filename = (parts.length > 1) ? parts[parts.length - 1] : null;
if (filename == null || filename.length() < MIN_PREFIX_LENGTH) { if (filename == null || filename.length() < MIN_PREFIX_LENGTH) {
throw new IllegalArgumentException("The filename has to be at least 3 characters long."); throw new IllegalArgumentException("The filename has to be at least 3 characters long.");
} }
if (temporaryDir == null) { File temp = Files.createTempFile(NATIVE_FOLDER_PATH_PREFIX, filename).toFile();
temporaryDir = createTempDirectory(NATIVE_FOLDER_PATH_PREFIX); temp.deleteOnExit();
temporaryDir.deleteOnExit();
}
File temp = new File(temporaryDir, filename);
try (InputStream is = NativeUtils.class.getResourceAsStream(path)) { try (InputStream is = NativeUtils.class.getResourceAsStream(path)) {
Files.copy(is, temp.toPath(), StandardCopyOption.REPLACE_EXISTING); Files.copy(is, temp.toPath(), StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) { } catch (IOException e) {
temp.delete(); temp.delete();
throw e; throw e;
} catch (NullPointerException e) { } catch (NullPointerException e) {
temp.delete(); temp.delete();
throw new FileNotFoundException("File " + path + " was not found inside JAR."); throw new FileNotFoundException("File " + path + " was not found inside JAR.");
} }
return temp; return temp;
} }
/** /**
* Unpack library from JAR into temporary path * Unpack library from JAR into temporary path