summaryrefslogtreecommitdiff
path: root/lib/libfuse/fuse.h
diff options
context:
space:
mode:
authorTed Unangst <tedu@cvs.openbsd.org>2013-06-03 16:00:51 +0000
committerTed Unangst <tedu@cvs.openbsd.org>2013-06-03 16:00:51 +0000
commitc91bd628edd89b9e31a1f3e4c33a5661d6866206 (patch)
tree616f70e97790d1a6339f13208649c195ade8d4a3 /lib/libfuse/fuse.h
parentb4a8194468588718a4d3cab9eb823350ef367b47 (diff)
add userland fuse library. ok beck deraadt
from Sylvestre Gallon ccna.syl gmail.com
Diffstat (limited to 'lib/libfuse/fuse.h')
-rw-r--r--lib/libfuse/fuse.h152
1 files changed, 152 insertions, 0 deletions
diff --git a/lib/libfuse/fuse.h b/lib/libfuse/fuse.h
new file mode 100644
index 00000000000..1ac2133f193
--- /dev/null
+++ b/lib/libfuse/fuse.h
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2013 Sylvestre Gallon <ccna.syl@gmail.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _FUSE_H_
+#define _FUSE_H_
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/statvfs.h>
+
+#include <fcntl.h>
+#include <utime.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct fuse_chan;
+struct fuse_args;
+struct fuse_session;
+
+struct fuse_file_info {
+ int32_t flags; /* open(2) flags */
+ uint32_t fh_old; /* old file handle */
+ int32_t writepage;
+ uint32_t direct_io:1;
+ uint32_t keep_cache:1;
+ uint32_t flush:1;
+ uint32_t __padd:29;
+ uint64_t fh; /* file handle */
+ uint64_t lock_owner;
+};
+
+struct fuse_conn_info {
+ uint32_t proto_major;
+ uint32_t proto_minor;
+ uint32_t async_read;
+ uint32_t max_write;
+ uint32_t max_readahead;
+ uint32_t reserved[27];
+};
+
+typedef ino_t fuse_ino_t;
+typedef int (*fuse_fill_dir_t)(void *, const char *, const struct stat *,
+ off_t);
+
+typedef struct fuse_dirhandle {
+ fuse_fill_dir_t filler;
+ void *buf;
+ int filled;
+ int full;
+ int isgetdir;
+ uint32_t size;
+ uint32_t start;
+ uint32_t idx;
+} *fuse_dirh_t;
+
+typedef int (*fuse_dirfil_t)(fuse_dirh_t, const char *, int, ino_t);
+
+struct fuse_operations {
+ int (*getattr)(const char *, struct stat *);
+ int (*readlink)(const char *, char *, size_t);
+ int (*getdir)(const char *, fuse_dirh_t, fuse_dirfil_t);
+ int (*mknod)(const char *, mode_t, dev_t);
+ int (*mkdir)(const char *, mode_t);
+ int (*unlink)(const char *);
+ int (*rmdir)(const char *);
+ int (*symlink)(const char *, const char *);
+ int (*rename)(const char *, const char *);
+ int (*link)(const char *, const char *);
+ int (*chmod)(const char *, mode_t);
+ int (*chown)(const char *, uid_t, gid_t);
+ int (*truncate)(const char *, off_t);
+ int (*utime)(const char *, struct utimbuf *);
+ int (*open)(const char *, struct fuse_file_info *);
+ int (*read)(const char *, char *, size_t, off_t,
+ struct fuse_file_info *);
+ int (*write)(const char *, const char *, size_t, off_t,
+ struct fuse_file_info *);
+ int (*statfs)(const char *, struct statvfs *);
+ int (*flush)(const char *, struct fuse_file_info *);
+ int (*release)(const char *, struct fuse_file_info *);
+ int (*fsync)(const char *, int, struct fuse_file_info *);
+ int (*setxattr)(const char *, const char *, const char *, size_t,
+ int);
+ int (*getxattr)(const char *, const char *, char *, size_t);
+ int (*listxattr)(const char *, char *, size_t);
+ int (*removexattr)(const char *, const char *);
+ int (*opendir)(const char *, struct fuse_file_info *);
+ int (*readdir)(const char *, void *, fuse_fill_dir_t, off_t,
+ struct fuse_file_info *);
+ int (*releasedir)(const char *, struct fuse_file_info *);
+ int (*fsyncdir)(const char *, int, struct fuse_file_info *);
+ void *(*init)(struct fuse_conn_info *);
+ void (*destroy)(void *);
+ int (*access)(const char *, int);
+ int (*create)(const char *, mode_t, struct fuse_file_info *);
+ int (*ftruncate)(const char *, off_t, struct fuse_file_info *);
+ int (*fgetattr)(const char *, struct stat *, struct fuse_file_info *);
+ int (*lock)(const char *, struct fuse_file_info *, int, struct flock *);
+ int (*utimens)(const char *, const struct timespec *);
+ int (*bmap)(const char *, size_t , uint64_t *);
+};
+
+#ifndef FUSE_USE_VERSION
+#define FUSE_USE_VERSION 26
+#endif
+
+#if FUSE_USE_VERSION >= 26
+#define FUSE_VERSION 26
+#else
+#error "Fuse version < 26 not supported"
+#endif
+
+
+/*
+ * API prototypes
+ */
+int fuse_main(int, char **, const struct fuse_operations *, void *);
+struct fuse *fuse_new(struct fuse_chan *, struct fuse_args *,
+ const struct fuse_operations *, size_t, void *);
+int fuse_parse_cmdline(struct fuse_args *, char **, int *, int *);
+struct fuse_chan *fuse_mount(const char *, struct fuse_args *);
+void fuse_remove_signal_handlers(struct fuse_session *);
+int fuse_set_signal_handlers(struct fuse_session *);
+struct fuse_session *fuse_get_session(struct fuse *);
+int fuse_is_lib_option(const char *);
+int fuse_loop(struct fuse *);
+int fuse_loop_mt(struct fuse *);
+int fuse_chan_fd(struct fuse_chan *);
+void fuse_unmount(const char *, struct fuse_chan *);
+int fuse_daemonize(int);
+void fuse_destroy(struct fuse *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FUSE_H_ */