package co.paralleluniverse.fuse; import jnr.ffi.Pointer; import jnr.ffi.StructLayout; import jnr.ffi.Runtime; /** * Single data buffer * <p> * Generic data buffer for I/O, extended attributes, etc... Data may * be supplied as a memory pointer or as a file descriptor */ class StructFuseBuf { static final class Layout extends StructLayout { /** * Size of data in bytes */ public final size_t size = new size_t(); /** * Buffer flags */ public final Enum<FuseBufFlags> flags = new Enum<>(FuseBufFlags.class); /** * Memory pointer * <p> * Used unless FUSE_BUF_IS_FD flag is set. */ public final Pointer mem = new Pointer(); /** * File descriptor * <p> * Used if FUSE_BUF_IS_FD flag is set. */ public final Signed32 fd = new Signed32(); /** * File position * <p> * Used if FUSE_BUF_FD_SEEK flag is set. */ public final off_t pos = new off_t(); private Layout(Runtime runtime) { super(runtime); } } static final Layout layout = new Layout(Runtime.getSystemRuntime()); private final Pointer p; public StructFuseBuf(Pointer p) { this.p = p; } public final long size() { return layout.size.get(p); } public final FuseBufFlags flags() { return layout.flags.get(p); } public final int fd() { return layout.fd.get(p); } public final long pos() { return layout.pos.get(p); } }