diff options
author | Keuin <[email protected]> | 2024-01-20 00:58:31 +0800 |
---|---|---|
committer | Keuin <[email protected]> | 2024-01-20 01:43:30 +0800 |
commit | 62ae677f748d90f8117bd063938a4b77f6ad0705 (patch) | |
tree | 8491bed3ad4d6d1a820068d85602ca734a67603f /src/main/java/com/keuin/kbackupfabric/util/cow/FileCowCopier.java | |
parent | 61aa66b558ae8f2987a238216ac01e375f195c1e (diff) |
feature: native copy-on-write support
Diffstat (limited to 'src/main/java/com/keuin/kbackupfabric/util/cow/FileCowCopier.java')
-rw-r--r-- | src/main/java/com/keuin/kbackupfabric/util/cow/FileCowCopier.java | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/main/java/com/keuin/kbackupfabric/util/cow/FileCowCopier.java b/src/main/java/com/keuin/kbackupfabric/util/cow/FileCowCopier.java new file mode 100644 index 0000000..e52a893 --- /dev/null +++ b/src/main/java/com/keuin/kbackupfabric/util/cow/FileCowCopier.java @@ -0,0 +1,41 @@ +package com.keuin.kbackupfabric.util.cow; + +import com.keuin.kbackupfabric.util.PrintUtil; + +import java.io.IOException; +import java.util.concurrent.atomic.AtomicBoolean; + +public final class FileCowCopier { + private static final AtomicBoolean initialized = new AtomicBoolean(false); + + static { + try { + System.loadLibrary("kbackup_cow"); + } catch (SecurityException | UnsatisfiedLinkError ignored) { + } + } + + public static native void init(); + + public static native void copy(String dst, String src) throws IOException; + + public static native String getVersion(); + + public static FileCopier getInstance() { + if (initialized.compareAndSet(false, true)) { + FileCowCopier.init(); + PrintUtil.info("kbackup-cow version: " + FileCowCopier.getVersion()); + } + return new FileCopier() { + @Override + public void copy(String dst, String src) throws IOException { + FileCowCopier.copy(dst, src); + } + + @Override + public boolean isCow() { + return true; + } + }; + } +} |