Skip to content

Instantly share code, notes, and snippets.

@aont
Created February 26, 2012 11:15
Show Gist options
  • Select an option

  • Save aont/1916114 to your computer and use it in GitHub Desktop.

Select an option

Save aont/1916114 to your computer and use it in GitHub Desktop.
fuse temperate
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cstdarg>
#include <cstddef>
#include <cerrno>
#include <sys/time.h>
#define FUSE_USE_VERSION 26
#include <fuse.h>
#include <pthread.h>
#include <string>
#define SMBCFS_DEBUG
#define MUTEX_LOCK
class myfuse
{
private:
static pthread_mutex_t mutex_lock;
static int getattr(const char* const path, struct stat* const stbuf);
// static int readlink(const char *, char *, size_t);
// static int mknod(const char *, mode_t, dev_t);
static int mkdir(const char* const path, const mode_t mode);
static int unlink(const char* const path);
static int rmdir(const char* const path);
// static int symlink(const char *, const char *);
static int rename(const char* const ourl, const char* const nurl);
// static int link(const char *, const char *);
static int chmod(const char* const path, const mode_t mode);
// static int chown(const char *, uid_t, gid_t);
// static int truncate(const char* const path, const off_t size);
static int utime(const char* const path, struct utimbuf* const utbuf);
static int open(const char* const path, struct fuse_file_info* const fi);
static int read(const char* const path, char* const buf, const std::size_t size, const off_t offset, struct fuse_file_info* const fi);
static int write(const char* const path, const char* const buf, const std::size_t size, const off_t offset, struct fuse_file_info* const fi);
// static int statfs(const char *, struct statvfs *);
// static int flush(const char *, struct fuse_file_info *);
static int release(const char* const path, struct fuse_file_info* const fi);
// static int fsync(const char *, const int, struct fuse_file_info *);
#ifndef __APPLE__
static int setxattr(const char* const path, const char* const name, const char* const value, const size_t size, const int flags);
#else
static int setxattr(const char* const path, const char* const name, const char* const value, const size_t size, const int flags, const uint32_t);
#endif
#ifndef __APPLE__
static int getxattr(const char* const path, const char* const name, char* const value, const size_t size);
#else
static int getxattr(const char* const path, const char* const name, char* const value, const size_t size , const uint32_t);
#endif
static int listxattr(const char* const path, char* const list, const size_t size);
static int removexattr(const char* const path, const char* const name);
static int opendir(const char *path, struct fuse_file_info *fi);
static int readdir(const char* const path, void* const buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info* const fi);
static int releasedir(const char* const path, struct fuse_file_info* const fi);
// static int fsyncdir(const char *, int, struct fuse_file_info *);
static void* init(struct fuse_conn_info *conn);
static void destroy(void *);
// static int access(const char *, int);
static int create(const char* const path, const mode_t mode, struct fuse_file_info* const fi);
static int ftruncate(const char* const path, const off_t size, struct fuse_file_info* const fi);
static int fgetattr(const char* const path, struct stat* const stbuf, struct fuse_file_info* const fi);
//static int lock(const char *, struct fuse_file_info *, int cmd, struct flock *);
static int utimens(const char* const path, const struct timespec tv[2]);
// static int bmap(const char *, size_t blocksize, uint64_t *idx);
// static int ioctl(const char *, int cmd, void *arg, struct fuse_file_info *, unsigned int flags, void *data);
// int poll(const char *, struct fuse_file_info *, struct fuse_pollhandle *ph, unsigned *reventsp);
public:
static fuse_operations get_operations()
{
fuse_operations oprations;
oprations.getattr = myfuse::getattr;
oprations.mkdir = myfuse::mkdir;
oprations.unlink = myfuse::unlink;
oprations.rmdir = myfuse::rmdir;
oprations.rename = myfuse::rename;
oprations.chmod = myfuse::chmod;
//oprations.utime = myfuse::utime;
(void)myfuse::utime;
oprations.open = myfuse::open;
oprations.write = myfuse::write;
oprations.read = myfuse::read;
oprations.release = myfuse::release;
oprations.setxattr = myfuse::setxattr;
oprations.getxattr = myfuse::getxattr;
oprations.listxattr = myfuse::listxattr;
oprations.removexattr = myfuse::removexattr;
oprations.opendir = myfuse::opendir;
oprations.readdir = myfuse::readdir;
oprations.releasedir = myfuse::releasedir;
oprations.init = myfuse::init;
oprations.destroy = myfuse::destroy;
oprations.create = myfuse::create;
oprations.ftruncate = myfuse::ftruncate;
oprations.fgetattr = myfuse::fgetattr;
oprations.utimens = myfuse::utimens;
return oprations;
}
};
int main(const int argc, char* argv[])
{
fuse_operations op = myfuse::get_operations();
return fuse_main(argc, argv, &op, NULL);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment