73 lines
2.4 KiB
C++
73 lines
2.4 KiB
C++
#ifndef FUSEBASE_H
|
|
#define FUSEBASE_H
|
|
|
|
#include <QFileDevice>
|
|
#include <QMap>
|
|
#include <QObject>
|
|
#include <QString>
|
|
|
|
class FuseInterface;
|
|
class FuseAccessorBase;
|
|
class FuseFHBase;
|
|
class FuseAccessorBase : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
typedef enum { FH_UNKNOWN=1, FH_ARCHIVE=2, FH_PROXY=3, FH_SANDBOX=4 } e_fh_type;
|
|
|
|
protected:
|
|
FuseInterface *m_parent;
|
|
bool m_stopping;
|
|
QString m_resource;
|
|
|
|
e_fh_type m_type;
|
|
Q_ENUM(e_fh_type)
|
|
|
|
public:
|
|
explicit FuseAccessorBase(FuseInterface *parent, const QString &resource, e_fh_type type=FH_UNKNOWN);
|
|
virtual ~FuseAccessorBase();
|
|
|
|
e_fh_type getType() { return m_type; }
|
|
const QString &getResource() { return m_resource; }
|
|
FuseInterface *getInterface() { return m_parent; }
|
|
|
|
virtual int getattr(const QString &path, struct stat *stbuf) = 0;
|
|
virtual QStringList readdir(const QString &path) = 0;
|
|
virtual FuseFHBase *open(const QString &path, QIODeviceBase::OpenMode mode) = 0;
|
|
|
|
virtual int truncate(const QString &path, off_t offset) { Q_UNUSED(path) Q_UNUSED(offset) return -1; }
|
|
virtual int rename(const QString &path, const QString &newname) { Q_UNUSED(path) Q_UNUSED(newname) return -1; }
|
|
virtual int rmdir(const QString &path) { Q_UNUSED(path) return -1; }
|
|
virtual int unlink(const QString &path) { Q_UNUSED(path) return -1; }
|
|
virtual int mkdir(const QString &path, QFileDevice::Permissions mode) { Q_UNUSED(path) Q_UNUSED(mode) return -1; }
|
|
virtual int create(const QString &path, QFileDevice::Permissions mode) { Q_UNUSED(path) Q_UNUSED(mode) return -1; }
|
|
};
|
|
|
|
class FuseFHBase : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
protected:
|
|
friend class FuseInterface;
|
|
|
|
FuseAccessorBase *m_parent;
|
|
QString m_path;
|
|
QIODeviceBase::OpenMode m_mode;
|
|
|
|
public:
|
|
explicit FuseFHBase(FuseAccessorBase *parent, const QString &path);
|
|
virtual ~FuseFHBase() {}
|
|
|
|
FuseAccessorBase *getAccessor() { return m_parent; }
|
|
const QString &getPath() { return m_path; }
|
|
|
|
virtual bool open(QIODeviceBase::OpenMode mode) = 0;
|
|
virtual QByteArray read(size_t size, off_t offset) = 0;
|
|
virtual off_t lseek(off_t off, int whence) = 0;
|
|
|
|
virtual int write(const QByteArray &data, off_t offset, struct fuse_file_info *fi) { Q_UNUSED(data) Q_UNUSED(offset) Q_UNUSED(fi) return -1; }
|
|
virtual void release() {}
|
|
};
|
|
|
|
#endif // FUSEBASE_H
|