package com.termux.shared.file.filesystem; import android.system.ErrnoException; import android.system.Os; import java.io.File; import java.io.FileDescriptor; import java.io.IOException; public class NativeDispatcher { public static void stat(String filePath, FileAttributes fileAttributes) throws IOException { validateFileExistence(filePath); try { fileAttributes.loadFromStructStat(Os.stat(filePath)); } catch (ErrnoException e) { throw new IOException("Failed to run Os.stat() on file at path \"" + filePath + "\": " + e.getMessage()); } } public static void lstat(String filePath, FileAttributes fileAttributes) throws IOException { validateFileExistence(filePath); try { fileAttributes.loadFromStructStat(Os.lstat(filePath)); } catch (ErrnoException e) { throw new IOException("Failed to run Os.lstat() on file at path \"" + filePath + "\": " + e.getMessage()); } } public static void fstat(FileDescriptor fileDescriptor, FileAttributes fileAttributes) throws IOException { validateFileDescriptor(fileDescriptor); try { fileAttributes.loadFromStructStat(Os.fstat(fileDescriptor)); } catch (ErrnoException e) { throw new IOException("Failed to run Os.fstat() on file descriptor \"" + fileDescriptor.toString() + "\": " + e.getMessage()); } } public static void validateFileExistence(String filePath) throws IOException { if (filePath == null || filePath.isEmpty()) throw new IOException("The path is null or empty"); File file = new File(filePath); //if (!file.exists()) // throw new IOException("No such file or directory: \"" + filePath + "\""); } public static void validateFileDescriptor(FileDescriptor fileDescriptor) throws IOException { if (fileDescriptor == null) throw new IOException("The file descriptor is null"); if (!fileDescriptor.valid()) throw new IOException("No such file descriptor: \"" + fileDescriptor.toString() + "\""); } }