Store temporary platform binary into directory instead of root tmp
This commit is contained in:
parent
058a4dcc3a
commit
6634692ac9
2
NOTICE
2
NOTICE
|
@ -1,5 +1,5 @@
|
||||||
Fazecast jSerialComm
|
Fazecast jSerialComm
|
||||||
Copyright (C) 2012-2018 Fazecast, Inc.
|
Copyright (C) 2012-2019 Fazecast, Inc.
|
||||||
|
|
||||||
This product includes software developed at Fazecast, Inc: you can
|
This product includes software developed at Fazecast, Inc: you can
|
||||||
redistribute it and/or modify it under the terms of either the Apache
|
redistribute it and/or modify it under the terms of either the Apache
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* SerialPort.java
|
* SerialPort.java
|
||||||
*
|
*
|
||||||
* Created on: Feb 25, 2012
|
* Created on: Feb 25, 2012
|
||||||
* Last Updated on: Jul 23, 2019
|
* Last Updated on: Aug 28, 2019
|
||||||
* Author: Will Hedgecock
|
* Author: Will Hedgecock
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012-2019 Fazecast, Inc.
|
* Copyright (C) 2012-2019 Fazecast, Inc.
|
||||||
|
@ -30,7 +30,6 @@ import java.io.BufferedReader;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -57,23 +56,14 @@ public final class SerialPort
|
||||||
private static volatile boolean isWindows = false;
|
private static volatile boolean isWindows = false;
|
||||||
static
|
static
|
||||||
{
|
{
|
||||||
// Determine the temporary file directory for Java
|
// Determine the temporary file directory for Java and remove any previous versions of this library
|
||||||
String OS = System.getProperty("os.name").toLowerCase();
|
String OS = System.getProperty("os.name").toLowerCase();
|
||||||
String libraryPath = "", fileName = "";
|
String libraryPath = "", fileName = "";
|
||||||
String tempFileDirectory = System.getProperty("java.io.tmpdir");
|
String tempFileDirectory = System.getProperty("java.io.tmpdir");
|
||||||
if ((tempFileDirectory.charAt(tempFileDirectory.length()-1) != '\\') &&
|
if ((tempFileDirectory.charAt(tempFileDirectory.length()-1) != '\\') && (tempFileDirectory.charAt(tempFileDirectory.length()-1) != '/'))
|
||||||
(tempFileDirectory.charAt(tempFileDirectory.length()-1) != '/'))
|
|
||||||
tempFileDirectory += "/";
|
tempFileDirectory += "/";
|
||||||
|
tempFileDirectory += "jSerialComm/";
|
||||||
// Force remove any previous versions of this library
|
deleteDirectory(new File(tempFileDirectory));
|
||||||
File directory = new File(tempFileDirectory);
|
|
||||||
if (directory.exists())
|
|
||||||
{
|
|
||||||
File directoryListing[] = directory.listFiles();
|
|
||||||
for (File listing : directoryListing)
|
|
||||||
if (listing.isFile() && listing.toString().contains("jSerialComm"))
|
|
||||||
listing.delete();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine Operating System and architecture
|
// Determine Operating System and architecture
|
||||||
if (System.getProperty("java.vm.vendor").toLowerCase().contains("android"))
|
if (System.getProperty("java.vm.vendor").toLowerCase().contains("android"))
|
||||||
|
@ -210,12 +200,14 @@ public final class SerialPort
|
||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get path of native library and copy file to working directory
|
// Copy platform-specific binary to a temporary location
|
||||||
String tempFileName = tempFileDirectory + (new Date()).getTime() + "-" + fileName;
|
|
||||||
File tempNativeLibrary = new File(tempFileName);
|
|
||||||
tempNativeLibrary.deleteOnExit();
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// Get path of native library and copy file to working directory
|
||||||
|
File tempNativeLibrary = new File(tempFileDirectory + (new Date()).getTime() + "-" + fileName);
|
||||||
|
tempNativeLibrary.getParentFile().mkdirs();
|
||||||
|
tempNativeLibrary.deleteOnExit();
|
||||||
|
|
||||||
// Load the native jSerialComm library
|
// Load the native jSerialComm library
|
||||||
InputStream fileContents = SerialPort.class.getResourceAsStream("/" + libraryPath + "/" + fileName);
|
InputStream fileContents = SerialPort.class.getResourceAsStream("/" + libraryPath + "/" + fileName);
|
||||||
if ((fileContents == null) && isAndroid)
|
if ((fileContents == null) && isAndroid)
|
||||||
|
@ -231,17 +223,13 @@ public final class SerialPort
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Copy the native library to the system temp directory
|
// Copy the native library to the system temp directory
|
||||||
try
|
FileOutputStream destinationFileContents = new FileOutputStream(tempNativeLibrary);
|
||||||
{
|
byte transferBuffer[] = new byte[4096];
|
||||||
FileOutputStream destinationFileContents = new FileOutputStream(tempNativeLibrary);
|
int numBytesRead;
|
||||||
byte transferBuffer[] = new byte[4096];
|
|
||||||
int numBytesRead;
|
|
||||||
|
|
||||||
while ((numBytesRead = fileContents.read(transferBuffer)) > 0)
|
while ((numBytesRead = fileContents.read(transferBuffer)) > 0)
|
||||||
destinationFileContents.write(transferBuffer, 0, numBytesRead);
|
destinationFileContents.write(transferBuffer, 0, numBytesRead);
|
||||||
destinationFileContents.close();
|
destinationFileContents.close();
|
||||||
}
|
|
||||||
catch (FileNotFoundException e) {};
|
|
||||||
fileContents.close();
|
fileContents.close();
|
||||||
|
|
||||||
// Load and initialize native library
|
// Load and initialize native library
|
||||||
|
@ -259,6 +247,15 @@ public final class SerialPort
|
||||||
return !canonicalFile.getCanonicalFile().equals(canonicalFile.getAbsoluteFile());
|
return !canonicalFile.getCanonicalFile().equals(canonicalFile.getAbsoluteFile());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Static recursive directory deletion function
|
||||||
|
private static void deleteDirectory(File path)
|
||||||
|
{
|
||||||
|
if (path.isDirectory())
|
||||||
|
for (File file : path.listFiles())
|
||||||
|
deleteDirectory(file);
|
||||||
|
path.delete();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the same output as calling {@link #getPortDescription()}. This may be useful for display containers which call a Java Object's default toString() method.
|
* Returns the same output as calling {@link #getPortDescription()}. This may be useful for display containers which call a Java Object's default toString() method.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue