diff options
Diffstat (limited to 'libfusepp')
| -rw-r--r-- | libfusepp/fuseAppBase.cpp | 214 | ||||
| -rw-r--r-- | libfusepp/fuseAppBase.h | 170 | 
2 files changed, 0 insertions, 384 deletions
diff --git a/libfusepp/fuseAppBase.cpp b/libfusepp/fuseAppBase.cpp deleted file mode 100644 index b56b765..0000000 --- a/libfusepp/fuseAppBase.cpp +++ /dev/null @@ -1,214 +0,0 @@ -#include "fuseAppBase.h" -#include <errno.h> -#include <assert.h> -#include <stdio.h> -#include <unistd.h> -#include <stdlib.h> -#include <typeinfo> - -FuseAppBase * FuseAppBase::fuseApp; - -FuseAppBase::FuseAppBase() -{ -} -FuseAppBase::~FuseAppBase() -{ -} -void * FuseAppBase::init(fuse_conn_info*) -{ -	return NULL; -} -int FuseAppBase::opt_parse(void*, const char *, int, fuse_args*) -{ -	return 1; -} -int FuseAppBase::access(const char *, int) -{ -	return -ENOSYS; -} -int FuseAppBase::chmod(const char *, mode_t) -{ -	return -ENOSYS; -} -int FuseAppBase::chown(const char *, uid_t, gid_t) -{ -	return -ENOSYS; -} -int FuseAppBase::create(const char *, mode_t, struct fuse_file_info *) -{ -	return -ENOSYS; -} -int FuseAppBase::fgetattr(const char *, struct stat *, struct fuse_file_info *) -{ -	return -ENOSYS; -} -int FuseAppBase::flush(const char *, struct fuse_file_info *) -{ -	return -ENOSYS; -} -int FuseAppBase::fsync(const char *, int, struct fuse_file_info *) -{ -	return -ENOSYS; -} -int FuseAppBase::fsyncdir(const char *, int, struct fuse_file_info *) -{ -	return -ENOSYS; -} -int FuseAppBase::ftruncate(const char *, off_t, struct fuse_file_info *) -{ -	return -ENOSYS; -} -int FuseAppBase::getattr(const char *, struct stat *) -{ -	return -ENOSYS; -} -int FuseAppBase::getxattr(const char *, const char *, char *, size_t) -{ -	return -ENOSYS; -} -int FuseAppBase::link(const char *, const char *) -{ -	return -ENOSYS; -} -int FuseAppBase::listxattr(const char *, char *, size_t) -{ -	return -ENOSYS; -} -int FuseAppBase::mkdir(const char *, mode_t) -{ -	return -ENOSYS; -} -int FuseAppBase::mknod(const char *, mode_t, dev_t) -{ -	return -ENOSYS; -} -int FuseAppBase::open(const char *, struct fuse_file_info *) -{ -	return -ENOSYS; -} -int FuseAppBase::opendir(const char *, struct fuse_file_info *) -{ -	return -ENOSYS; -} -int FuseAppBase::read(const char *, char *, size_t, off_t, struct fuse_file_info *) -{ -	return -ENOSYS; -} -int FuseAppBase::readdir(const char *, void *, fuse_fill_dir_t, off_t, struct fuse_file_info *) -{ -	return -ENOSYS; -} -int FuseAppBase::readlink(const char *, char *, size_t) -{ -	return -ENOSYS; -} -int FuseAppBase::release(const char *, struct fuse_file_info *) -{ -	return -ENOSYS; -} -int FuseAppBase::releasedir(const char *, struct fuse_file_info *) -{ -	return -ENOSYS; -} -int FuseAppBase::removexattr(const char *, const char *) -{ -	return -ENOSYS; -} -int FuseAppBase::rename(const char *, const char *) -{ -	return -ENOSYS; -} -int FuseAppBase::rmdir(const char *) -{ -	return -ENOSYS; -} -int FuseAppBase::setxattr(const char *, const char *, const char *, size_t, int) -{ -	return -ENOSYS; -} -int FuseAppBase::statfs(const char *, struct statvfs *) -{ -	return -ENOSYS; -} -int FuseAppBase::symlink(const char *, const char *) -{ -	return -ENOSYS; -} -int FuseAppBase::truncate(const char *, off_t) -{ -	return -ENOSYS; -} -int FuseAppBase::unlink(const char *) -{ -	return -ENOSYS; -} -int FuseAppBase::write(const char *, const char *, size_t, off_t, struct fuse_file_info *) -{ -	return -ENOSYS; -} -int FuseAppBase::lock(const char *, struct fuse_file_info *, int, struct flock *) -{ -	return -ENOSYS; -} -int FuseAppBase::utimens(const char *, const struct timespec[2]) -{ -	return -ENOSYS; -} -int FuseAppBase::bmap(const char *, size_t, uint64_t *) -{ -	return -ENOSYS; -} -int FuseAppBase::ioctl(const char *, int, void *, struct fuse_file_info *, unsigned int, void *) -{ -	return -ENOSYS; -} -int FuseAppBase::poll(const char *, struct fuse_file_info *, struct fuse_pollhandle *, unsigned *) -{ -	return -ENOSYS; -} -int FuseAppBase::write_buf(const char *, struct fuse_bufvec *, off_t, struct fuse_file_info *) -{ -	return -ENOSYS; -} -int FuseAppBase::read_buf(const char *, struct fuse_bufvec **, size_t, off_t, struct fuse_file_info *) -{ -	return -ENOSYS; -} -int FuseAppBase::flock(const char *, struct fuse_file_info *, int) -{ -	return -ENOSYS; -} -int FuseAppBase::fallocate(const char *, int, off_t, off_t, struct fuse_file_info *) -{ -	return -ENOSYS; -} -int FuseAppBase::onError(const std::exception & e) throw() -{ -	log(LOG_ERR, stringf("Unknown exception (what: %s)\n", e.what())); -	return -ENOSYS; -} - -void * FuseAppBase::fuseInit (struct fuse_conn_info *conn) -{ -	return fuseApp->init(conn); -} -void FuseAppBase::fuseDestroy(void *) -{ -	delete fuseApp; -} - -struct fuse_args -FuseAppBase::runint(int argc, char ** argv) -{ -	struct fuse_opt fuse_opts[] = { -		{ NULL, 0, 0 } -	}; -	fuseApp = this; -	struct fuse_args args = FUSE_ARGS_INIT(argc, argv); -	if (fuse_opt_parse(&args, fuseApp, fuse_opts, -			fuseCall<void *, const char *, int, struct fuse_args *>::helper<&FuseAppBase::opt_parse>) == -1) { -		exit(1); -	} -	return args; -} - diff --git a/libfusepp/fuseAppBase.h b/libfusepp/fuseAppBase.h deleted file mode 100644 index 8efed83..0000000 --- a/libfusepp/fuseAppBase.h +++ /dev/null @@ -1,170 +0,0 @@ -#ifndef FUSEAPP_H -#define FUSEAPP_H - -#define FUSE_USE_VERSION 26 -#include <fuse.h> -#include <typeinfo> -#include <exception> -#include <stdio.h> -#include <errno.h> -#include <syslog.h> -#include <visibility.h> -#include <buffer.h> - -class DLL_PUBLIC FuseAppBase { -	public: -		FuseAppBase(); -		virtual ~FuseAppBase() = 0; -		virtual void * init (struct fuse_conn_info * info); -		virtual int opt_parse(void *, const char * arg, int key, struct fuse_args *); -		virtual int access(const char *, int); -		virtual int chmod(const char *, mode_t); -		virtual int chown(const char *, uid_t, gid_t); -		virtual int create(const char *, mode_t, struct fuse_file_info *); -		virtual int fgetattr(const char *, struct stat *, struct fuse_file_info *); -		virtual int flush(const char *, struct fuse_file_info *); -		virtual int fsync(const char *, int, struct fuse_file_info *); -		virtual int fsyncdir(const char *, int, struct fuse_file_info *); -		virtual int ftruncate(const char *, off_t, struct fuse_file_info *); -		virtual int getattr(const char *, struct stat *); -		virtual int getxattr(const char *, const char *, char *, size_t); -		virtual int link(const char *, const char *); -		virtual int listxattr(const char *, char *, size_t); -		virtual int mkdir(const char *, mode_t); -		virtual int mknod(const char *, mode_t, dev_t); -		virtual int open(const char *, struct fuse_file_info *); -		virtual int opendir(const char *, struct fuse_file_info *); -		virtual int read(const char *, char *, size_t, off_t, struct fuse_file_info *); -		virtual int readdir(const char *, void *, fuse_fill_dir_t, off_t, struct fuse_file_info *); -		virtual int readlink(const char *, char *, size_t); -		virtual int release(const char *, struct fuse_file_info *); -		virtual int releasedir(const char *, struct fuse_file_info *); -		virtual int removexattr(const char *, const char *); -		virtual int rename(const char *, const char *); -		virtual int rmdir(const char *); -		virtual int setxattr(const char *, const char *, const char *, size_t, int); -		virtual int statfs(const char *, struct statvfs *); -		virtual int symlink(const char *, const char *); -		virtual int truncate(const char *, off_t); -		virtual int unlink(const char *); -		virtual int write(const char *, const char *, size_t, off_t, struct fuse_file_info *); -		virtual int lock(const char *, struct fuse_file_info *, int cmd, struct flock *); -		virtual int utimens(const char *, const struct timespec tv[2]); -		virtual int bmap(const char *, size_t blocksize, uint64_t *idx); -		virtual int ioctl(const char *, int cmd, void *arg, struct fuse_file_info *, unsigned int flags, void * data); -		virtual int poll(const char *, struct fuse_file_info *, struct fuse_pollhandle *, unsigned *); -		virtual int write_buf(const char *, struct fuse_bufvec *buf, off_t off, struct fuse_file_info *); -		virtual int read_buf(const char *, struct fuse_bufvec **bufp, size_t size, off_t off, struct fuse_file_info *); -		virtual int flock(const char *, struct fuse_file_info *, int op); -		virtual int fallocate(const char *, int, off_t, off_t, struct fuse_file_info *); -		virtual int onError(const std::exception & err) throw(); -		virtual void log(int level, const std::string &) const throw() = 0; - -		virtual int fuse_opt_parse(struct fuse_args *args, void *data, const struct fuse_opt opts[], fuse_opt_proc_t proc) = 0; -		virtual int main(int, char **, const struct fuse_operations *) = 0; - -#define GetHelper(func) getHelper<&FuseAppBase::func>(typeid(&FuseAppBase::func) != typeid(&FuseApp::func)) -		template <typename FuseApp> -		static int run(int argc, char ** argv, FuseApp * fa) -		{ -			auto args = fa->runint(argc, argv); -			struct fuse_operations operations = { -				fuseCall<const char *, struct stat *>::GetHelper(getattr), -				fuseCall<const char *, char *, size_t>::GetHelper(readlink), -				NULL, // getdir deprecated -				fuseCall<const char *, mode_t, dev_t>::GetHelper(mknod), -				fuseCall<const char *, mode_t>::GetHelper(mkdir), -				fuseCall<const char *>::GetHelper(unlink), -				fuseCall<const char *>::GetHelper(rmdir), -				fuseCall<const char *, const char *>::GetHelper(symlink), -				fuseCall<const char *, const char *>::GetHelper(rename), -				fuseCall<const char *, const char *>::GetHelper(link), -				fuseCall<const char *, mode_t>::GetHelper(chmod), -				fuseCall<const char *, uid_t, gid_t>::GetHelper(chown), -				fuseCall<const char *, off_t>::GetHelper(truncate), -				NULL, // utime deprecated -				fuseCall<const char *, struct fuse_file_info *>::GetHelper(open), -				fuseCall<const char *, char *, size_t, off_t, struct fuse_file_info *>::GetHelper(read), -				fuseCall<const char *, const char *, size_t, off_t, struct fuse_file_info *>::GetHelper(write), -				fuseCall<const char *, struct statvfs *>::GetHelper(statfs), -				fuseCall<const char *, struct fuse_file_info *>::GetHelper(flush), -				fuseCall<const char *, struct fuse_file_info *>::GetHelper(release), -				fuseCall<const char *, int, struct fuse_file_info *>::GetHelper(fsync), -				fuseCall<const char *, const char *, const char *, size_t, int>::GetHelper(setxattr), -				fuseCall<const char *, const char *, char *, size_t>::GetHelper(getxattr), -				fuseCall<const char *, char *, size_t>::GetHelper(listxattr), -				fuseCall<const char *, const char *>::GetHelper(removexattr), -				fuseCall<const char *, struct fuse_file_info *>::GetHelper(opendir), -				fuseCall<const char *, void *, fuse_fill_dir_t, off_t, struct fuse_file_info *>::GetHelper(readdir), -				fuseCall<const char *, struct fuse_file_info *>::GetHelper(releasedir), -				fuseCall<const char *, int, struct fuse_file_info *>::GetHelper(fsyncdir), -				fuseInit, -				fuseDestroy, -				fuseCall<const char *, int>::GetHelper(access), -				fuseCall<const char *, mode_t, struct fuse_file_info *>::GetHelper(create), -				fuseCall<const char *, off_t, struct fuse_file_info *>::GetHelper(ftruncate), -				fuseCall<const char *, struct stat *, struct fuse_file_info *>::GetHelper(fgetattr), -#if (FUSE_MINOR_VERSION >= 6) -				fuseCall<const char *, struct fuse_file_info *, int, struct flock *>::GetHelper(lock), -				fuseCall<const char *, const struct timespec [2]>::GetHelper(utimens), -				fuseCall<const char *, size_t, uint64_t *>::GetHelper(bmap), -#if (FUSE_MINOR_VERSION >= 8) -				0, // flag_nullpath_ok -#if (FUSE_MINOR_VERSION >= 9) -				0, // flag_nopath -				0, // flag_utime_omit_ok -#endif -				0, // flag_reserved -				fuseCall<const char *, int, void *, struct fuse_file_info *, unsigned int, void *>::GetHelper(ioctl), -				fuseCall<const char *, struct fuse_file_info *, struct fuse_pollhandle *, unsigned *>::GetHelper(poll), -#if (FUSE_MINOR_VERSION >= 9) -				fuseCall<const char *, struct fuse_bufvec *, off_t, struct fuse_file_info *>::GetHelper(write_buf), -				fuseCall<const char *, struct fuse_bufvec **, size_t, off_t, struct fuse_file_info *>::GetHelper(read_buf), -				fuseCall<const char *, struct fuse_file_info *, int>::GetHelper(flock), -				fuseCall<const char *, int, off_t, off_t, struct fuse_file_info *>::GetHelper(fallocate), -#endif -#endif -#endif -			}; -			return fa->main(args.argc, args.argv, &operations); -		} -		struct fuse_args runint(int, char **); - -	private: -		static void * fuseInit(struct fuse_conn_info *conn); -		static void fuseDestroy(void *); - -		template <typename... Args> -		class DLL_PRIVATE fuseCall { -			public: -				typedef int (*WrapperFunc)(Args...); -				template <int (FuseAppBase::*b)(Args...)> -				static WrapperFunc getHelper(bool implemented) -				{ -					auto func = &helper<b>; -					return implemented ? func : NULL; -				} -				template <int (FuseAppBase::*f)(Args...)> -				static int helper(Args ... a) -				{ -					try { -						return (fuseApp->*f)(a...); -					} -					catch (const std::exception & ex) { -						if (int rtn = fuseApp->onError(ex)) { -							return rtn; -						} -						return helper<f>(a...); -					} -					catch (...) { -						fuseApp->log(LOG_ERR, stringf("Unknown exception calling %s\n", typeid(f).name())); -						return -ENOSYS; -					} -				} -		}; - -		static FuseAppBase * fuseApp; -}; - -#endif -  | 
