diff options
Diffstat (limited to 'example-23/fusexmp.c')
-rw-r--r-- | example-23/fusexmp.c | 357 |
1 files changed, 0 insertions, 357 deletions
diff --git a/example-23/fusexmp.c b/example-23/fusexmp.c deleted file mode 100644 index f98c0a99c..000000000 --- a/example-23/fusexmp.c +++ /dev/null @@ -1,357 +0,0 @@ -/* - FUSE: Filesystem in Userspace - Copyright (C) 2001-2005 Miklos Szeredi <miklos@szeredi.hu> - - This program can be distributed under the terms of the GNU GPL. - See the file COPYING. -*/ - -#include <config.h> - -#ifdef linux -/* For pread()/pwrite() */ -#define _XOPEN_SOURCE 500 -#endif - -#include <fuse.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#include <fcntl.h> -#include <dirent.h> -#include <errno.h> -#include <sys/statfs.h> -#ifdef HAVE_SETXATTR -#include <sys/xattr.h> -#endif - -static int xmp_getattr(const char *path, struct stat *stbuf) -{ - int res; - - res = lstat(path, stbuf); - if(res == -1) - return -errno; - - return 0; -} - -static int xmp_readlink(const char *path, char *buf, size_t size) -{ - int res; - - res = readlink(path, buf, size - 1); - if(res == -1) - return -errno; - - buf[res] = '\0'; - return 0; -} - - -static int xmp_readdir(const char *path, void *buf, fuse_fill_dir_t filler, - off_t offset, struct fuse_file_info *fi) -{ - DIR *dp; - struct dirent *de; - - (void) offset; - (void) fi; - - dp = opendir(path); - if(dp == NULL) - return -errno; - - while((de = readdir(dp)) != NULL) { - struct stat st; - memset(&st, 0, sizeof(st)); - st.st_ino = de->d_ino; - st.st_mode = de->d_type << 12; - if (filler(buf, de->d_name, &st, 0)) - break; - } - - closedir(dp); - return 0; -} - -static int xmp_mknod(const char *path, mode_t mode, dev_t rdev) -{ - int res; - - /* On the Hurd we must not use mknod() to create files, but creat() */ - if(mode & S_IFREG) - res = creat(path, mode & ALLPERMS); - else - res = mknod(path, mode, rdev); - - if(res == -1) - return -errno; - - return 0; -} - -static int xmp_mkdir(const char *path, mode_t mode) -{ - int res; - - res = mkdir(path, mode); - if(res == -1) - return -errno; - - return 0; -} - -static int xmp_unlink(const char *path) -{ - int res; - - res = unlink(path); - if(res == -1) - return -errno; - - return 0; -} - -static int xmp_rmdir(const char *path) -{ - int res; - - res = rmdir(path); - if(res == -1) - return -errno; - - return 0; -} - -static int xmp_symlink(const char *from, const char *to) -{ - int res; - - res = symlink(from, to); - if(res == -1) - return -errno; - - return 0; -} - -static int xmp_rename(const char *from, const char *to) -{ - int res; - - res = rename(from, to); - if(res == -1) - return -errno; - - return 0; -} - -static int xmp_link(const char *from, const char *to) -{ - int res; - - res = link(from, to); - if(res == -1) - return -errno; - - return 0; -} - -static int xmp_chmod(const char *path, mode_t mode) -{ - int res; - - res = chmod(path, mode); - if(res == -1) - return -errno; - - return 0; -} - -static int xmp_chown(const char *path, uid_t uid, gid_t gid) -{ - int res; - - res = lchown(path, uid, gid); - if(res == -1) - return -errno; - - return 0; -} - -static int xmp_truncate(const char *path, off_t size) -{ - int res; - - res = truncate(path, size); - if(res == -1) - return -errno; - - return 0; -} - -static int xmp_utime(const char *path, struct utimbuf *buf) -{ - int res; - - res = utime(path, buf); - if(res == -1) - return -errno; - - return 0; -} - - -static int xmp_open(const char *path, struct fuse_file_info *fi) -{ - int res; - - res = open(path, fi->flags); - if(res == -1) - return -errno; - - close(res); - return 0; -} - -static int xmp_read(const char *path, char *buf, size_t size, off_t offset, - struct fuse_file_info *fi) -{ - int fd; - int res; - - (void) fi; - fd = open(path, O_RDONLY); - if(fd == -1) - return -errno; - - res = pread(fd, buf, size, offset); - if(res == -1) - res = -errno; - - close(fd); - return res; -} - -static int xmp_write(const char *path, const char *buf, size_t size, - off_t offset, struct fuse_file_info *fi) -{ - int fd; - int res; - - (void) fi; - fd = open(path, O_WRONLY); - if(fd == -1) - return -errno; - - res = pwrite(fd, buf, size, offset); - if(res == -1) - res = -errno; - - close(fd); - return res; -} - -static int xmp_statfs(const char *path, struct statfs *stbuf) -{ - int res; - - res = statfs(path, stbuf); - if(res == -1) - return -errno; - - return 0; -} - -static int xmp_release(const char *path, struct fuse_file_info *fi) -{ - /* Just a stub. This method is optional and can safely be left - unimplemented */ - - (void) path; - (void) fi; - return 0; -} - -static int xmp_fsync(const char *path, int isdatasync, - struct fuse_file_info *fi) -{ - /* Just a stub. This method is optional and can safely be left - unimplemented */ - - (void) path; - (void) isdatasync; - (void) fi; - return 0; -} - -#ifdef HAVE_SETXATTR -/* xattr operations are optional and can safely be left unimplemented */ -static int xmp_setxattr(const char *path, const char *name, const char *value, - size_t size, int flags) -{ - int res = lsetxattr(path, name, value, size, flags); - if(res == -1) - return -errno; - return 0; -} - -static int xmp_getxattr(const char *path, const char *name, char *value, - size_t size) -{ - int res = lgetxattr(path, name, value, size); - if(res == -1) - return -errno; - return res; -} - -static int xmp_listxattr(const char *path, char *list, size_t size) -{ - int res = llistxattr(path, list, size); - if(res == -1) - return -errno; - return res; -} - -static int xmp_removexattr(const char *path, const char *name) -{ - int res = lremovexattr(path, name); - if(res == -1) - return -errno; - return 0; -} -#endif /* HAVE_SETXATTR */ - -static struct fuse_operations xmp_oper = { - .getattr = xmp_getattr, - .readlink = xmp_readlink, - .readdir = xmp_readdir, - .mknod = xmp_mknod, - .mkdir = xmp_mkdir, - .symlink = xmp_symlink, - .unlink = xmp_unlink, - .rmdir = xmp_rmdir, - .rename = xmp_rename, - .link = xmp_link, - .chmod = xmp_chmod, - .chown = xmp_chown, - .truncate = xmp_truncate, - .utime = xmp_utime, - .open = xmp_open, - .read = xmp_read, - .write = xmp_write, - .statfs = xmp_statfs, - .release = xmp_release, - .fsync = xmp_fsync, -#ifdef HAVE_SETXATTR - .setxattr = xmp_setxattr, - .getxattr = xmp_getxattr, - .listxattr = xmp_listxattr, - .removexattr= xmp_removexattr, -#endif -}; - -int main(int argc, char *argv[]) -{ - return fuse_main(argc, argv, &xmp_oper); -} |