/**
* FUSE-J: Java bindings for FUSE (Filesystem in Userspace by Miklos Szeredi (mszeredi@inf.bme.hu))
*
* Copyright (C) 2003 Peter Levart (peter@select-tech.si)
*
* This program can be distributed under the terms of the GNU LGPL.
* See the file COPYING.LIB
*/
package fuse.compat;
import fuse.*;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
/**
* This is an adapter that adapts the semi-old filehandle enabled API (fuse.compat.Filesystem2) to
* the new errno-as-return-value-or-exception API (fuse.Filesystem3)
*/
@SuppressWarnings({"UnnecessaryUnboxing", "UnnecessaryBoxing"})
public class Filesystem2ToFilesystem3Adapter implements Filesystem3
{
private Filesystem2 fs2;
public Filesystem2ToFilesystem3Adapter(Filesystem2 fs2)
{
this.fs2 = fs2;
}
public int getattr(String path, FuseGetattrSetter getattrSetter) throws FuseException
{
FuseStat stat = fs2.getattr(path);
getattrSetter.set(
stat.inode,
stat.mode,
stat.nlink,
stat.uid,
stat.gid,
0,
stat.size,
stat.blocks,
stat.atime,
stat.mtime,
stat.ctime
);
return 0;
}
public int chmod(String path, int mode) throws FuseException
{
fs2.chmod(path, mode);
return 0;
}
public int chown(String path, int uid, int gid) throws FuseException
{
fs2.chown(path, uid, gid);
return 0;
}
// called on every filehandle close, fh is filehandle passed from open
public int flush(String path, Object fh) throws FuseException
{
fs2.flush(path, (fh == null)? 0L : ((Long) fh).longValue());
return 0;
}
// Synchronize file contents, fh is filehandle passed from open,
// isDatasync indicates that only the user data should be flushed, not the meta data
public int fsync(String path, Object fh, boolean isDatasync) throws FuseException
{
fs2.fsync(path, (fh == null)? 0L : ((Long) fh).longValue(), isDatasync);
return 0;
}
public int getdir(String path, FuseDirFiller filler) throws FuseException
{
for (FuseDirEnt entry : fs2.getdir(path))
filler.add(entry.name, entry.inode, entry.mode);
return 0;
}
public int link(String from, String to) throws FuseException
{
fs2.link(from, to);
return 0;
}
public int mkdir(String path, int mode) throws FuseException
{
fs2.mkdir(path, mode);
return 0;
}
public int mknod(String path, int mode, int rdev) throws FuseException
{
fs2.mknod(path, mode, rdev);
return 0;
}
// if open returns a filehandle by calling FuseOpenSetter.setFh() method, it will be passed to every method that supports 'fh' argument
public int open(String path, int flags, FuseOpenSetter openSetter) throws FuseException
{
openSetter.setFh(new Long(fs2.open(path, flags)));
return 0;
}
// fh is filehandle passed from open
public int read(String path, Object fh, ByteBuffer buf, long offset) throws FuseException
{
fs2.read(path, (fh == null)? 0L : ((Long) fh).longValue(), buf, offset);
return 0;
}
public int readlink(String path, CharBuffer link) throws FuseException
{
link.put(fs2.readlink(path));
return 0;
}
// called when last filehandle is closed, fh is filehandle passed from open
public int release(String path, Object fh, int flags) throws FuseException
{
fs2.release(path, (fh == null)? 0L : ((Long) fh).longValue(), flags);
return 0;
}
public int rename(String from, String to) throws FuseException
{
fs2.rename(from, to);
return 0;
}
public int rmdir(String path) throws FuseException
{
fs2.rmdir(path);
return 0;
}
public int statfs(FuseStatfsSetter statfsSetter) throws FuseException
{
FuseStatfs statfs = fs2.statfs();
statfsSetter.set(
statfs.blockSize,
statfs.blocks,
statfs.blocksFree,
statfs.blocksAvail,
statfs.files,
statfs.filesFree,
statfs.namelen
);
return 0;
}
public int symlink(String from, String to) throws FuseException
{
fs2.symlink(from, to);
return 0;
}
public int truncate(String path, long size) throws FuseException
{
fs2.truncate(path, size);
return 0;
}
public int unlink(String path) throws FuseException
{
fs2.unlink(path);
return 0;
}
public int utime(String path, int atime, int mtime) throws FuseException
{
fs2.utime(path, atime, mtime);
return 0;
}
// fh is filehandle passed from open,
// isWritepage indicates that write was caused by a writepage
public int write(String path, Object fh, boolean isWritepage, ByteBuffer buf, long offset) throws FuseException
{
fs2.write(path, (fh == null)? 0L : ((Long) fh).longValue(), isWritepage, buf, offset);
return 0;
}
}