2016-03-26 01:08:43 +01:00
|
|
|
package org.thoughtcrime.securesms.util;
|
|
|
|
|
2019-12-28 16:08:11 +01:00
|
|
|
import androidx.annotation.Nullable;
|
|
|
|
|
2018-04-13 02:17:48 +02:00
|
|
|
import java.io.File;
|
2016-03-26 01:08:43 +01:00
|
|
|
import java.io.FileDescriptor;
|
2017-02-26 23:36:43 +01:00
|
|
|
import java.io.FileInputStream;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.security.MessageDigest;
|
|
|
|
import java.security.NoSuchAlgorithmException;
|
2016-03-26 01:08:43 +01:00
|
|
|
|
2019-07-25 21:29:31 +02:00
|
|
|
public final class FileUtils {
|
2016-03-26 01:08:43 +01:00
|
|
|
|
|
|
|
static {
|
|
|
|
System.loadLibrary("native-utils");
|
|
|
|
}
|
|
|
|
|
|
|
|
public static native int getFileDescriptorOwner(FileDescriptor fileDescriptor);
|
|
|
|
|
2019-07-25 21:29:31 +02:00
|
|
|
static native int createMemoryFileDescriptor(String name);
|
|
|
|
|
2017-02-26 23:36:43 +01:00
|
|
|
public static byte[] getFileDigest(FileInputStream fin) throws IOException {
|
|
|
|
try {
|
|
|
|
MessageDigest digest = MessageDigest.getInstance("SHA256");
|
|
|
|
|
|
|
|
byte[] buffer = new byte[4096];
|
|
|
|
int read = 0;
|
|
|
|
|
|
|
|
while ((read = fin.read(buffer, 0, buffer.length)) != -1) {
|
|
|
|
digest.update(buffer, 0, read);
|
|
|
|
}
|
|
|
|
|
|
|
|
return digest.digest();
|
|
|
|
} catch (NoSuchAlgorithmException e) {
|
|
|
|
throw new AssertionError(e);
|
|
|
|
}
|
|
|
|
}
|
2018-04-13 02:17:48 +02:00
|
|
|
|
2019-12-28 16:08:11 +01:00
|
|
|
public static void deleteDirectoryContents(@Nullable File directory) {
|
2018-04-13 02:17:48 +02:00
|
|
|
if (directory == null || !directory.exists() || !directory.isDirectory()) return;
|
|
|
|
|
|
|
|
File[] files = directory.listFiles();
|
|
|
|
|
|
|
|
if (files != null) {
|
|
|
|
for (File file : files) {
|
|
|
|
if (file.isDirectory()) deleteDirectory(file);
|
|
|
|
else file.delete();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-26 20:38:27 +01:00
|
|
|
public static boolean deleteDirectory(@Nullable File directory) {
|
2018-04-13 02:17:48 +02:00
|
|
|
if (directory == null || !directory.exists() || !directory.isDirectory()) {
|
2020-03-26 20:38:27 +01:00
|
|
|
return false;
|
2018-04-13 02:17:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
deleteDirectoryContents(directory);
|
|
|
|
|
2020-03-26 20:38:27 +01:00
|
|
|
return directory.delete();
|
2018-04-13 02:17:48 +02:00
|
|
|
}
|
2016-03-26 01:08:43 +01:00
|
|
|
}
|