"Fossies" - the Fresh Open Source Software Archive

Member "fuse-3.2.1/lib/fuse_i.h" (14 Nov 2017, 3237 Bytes) of package /linux/misc/fuse-3.2.1.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "fuse_i.h" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 3.2.0_vs_3.2.1.

    1 /*
    2   FUSE: Filesystem in Userspace
    3   Copyright (C) 2001-2007  Miklos Szeredi <miklos@szeredi.hu>
    4 
    5   This program can be distributed under the terms of the GNU LGPLv2.
    6   See the file COPYING.LIB
    7 */
    8 
    9 #include "fuse.h"
   10 #include "fuse_lowlevel.h"
   11 
   12 struct mount_opts;
   13 
   14 struct fuse_req {
   15     struct fuse_session *se;
   16     uint64_t unique;
   17     int ctr;
   18     pthread_mutex_t lock;
   19     struct fuse_ctx ctx;
   20     struct fuse_chan *ch;
   21     int interrupted;
   22     unsigned int ioctl_64bit : 1;
   23     union {
   24         struct {
   25             uint64_t unique;
   26         } i;
   27         struct {
   28             fuse_interrupt_func_t func;
   29             void *data;
   30         } ni;
   31     } u;
   32     struct fuse_req *next;
   33     struct fuse_req *prev;
   34 };
   35 
   36 struct fuse_notify_req {
   37     uint64_t unique;
   38     void (*reply)(struct fuse_notify_req *, fuse_req_t, fuse_ino_t,
   39               const void *, const struct fuse_buf *);
   40     struct fuse_notify_req *next;
   41     struct fuse_notify_req *prev;
   42 };
   43 
   44 struct fuse_session {
   45     char *mountpoint;
   46     volatile int exited;
   47     int fd;
   48     struct mount_opts *mo;
   49     int debug;
   50     int deny_others;
   51     struct fuse_lowlevel_ops op;
   52     int got_init;
   53     struct cuse_data *cuse_data;
   54     void *userdata;
   55     uid_t owner;
   56     struct fuse_conn_info conn;
   57     struct fuse_req list;
   58     struct fuse_req interrupts;
   59     pthread_mutex_t lock;
   60     int got_destroy;
   61     pthread_key_t pipe_key;
   62     int broken_splice_nonblock;
   63     uint64_t notify_ctr;
   64     struct fuse_notify_req notify_list;
   65     size_t bufsize;
   66     int error;
   67 };
   68 
   69 struct fuse_chan {
   70     pthread_mutex_t lock;
   71     int ctr;
   72     int fd;
   73 };
   74 
   75 /**
   76  * Filesystem module
   77  *
   78  * Filesystem modules are registered with the FUSE_REGISTER_MODULE()
   79  * macro.
   80  *
   81  */
   82 struct fuse_module {
   83     char *name;
   84     fuse_module_factory_t factory;
   85     struct fuse_module *next;
   86     struct fusemod_so *so;
   87     int ctr;
   88 };
   89 
   90 /* ----------------------------------------------------------- *
   91  * Channel interface (when using -o clone_fd)              *
   92  * ----------------------------------------------------------- */
   93 
   94 /**
   95  * Obtain counted reference to the channel
   96  *
   97  * @param ch the channel
   98  * @return the channel
   99  */
  100 struct fuse_chan *fuse_chan_get(struct fuse_chan *ch);
  101 
  102 /**
  103  * Drop counted reference to a channel
  104  *
  105  * @param ch the channel
  106  */
  107 void fuse_chan_put(struct fuse_chan *ch);
  108 
  109 struct mount_opts *parse_mount_opts(struct fuse_args *args);
  110 void destroy_mount_opts(struct mount_opts *mo);
  111 void fuse_mount_version(void);
  112 unsigned get_max_read(struct mount_opts *o);
  113 void fuse_kern_unmount(const char *mountpoint, int fd);
  114 int fuse_kern_mount(const char *mountpoint, struct mount_opts *mo);
  115 
  116 int fuse_send_reply_iov_nofree(fuse_req_t req, int error, struct iovec *iov,
  117                    int count);
  118 void fuse_free_req(fuse_req_t req);
  119 
  120 void cuse_lowlevel_init(fuse_req_t req, fuse_ino_t nodeide, const void *inarg);
  121 
  122 int fuse_start_thread(pthread_t *thread_id, void *(*func)(void *), void *arg);
  123 
  124 int fuse_session_receive_buf_int(struct fuse_session *se, struct fuse_buf *buf,
  125                  struct fuse_chan *ch);
  126 void fuse_session_process_buf_int(struct fuse_session *se,
  127                   const struct fuse_buf *buf, struct fuse_chan *ch);
  128 
  129 struct fuse *fuse_new_31(struct fuse_args *args, const struct fuse_operations *op,
  130               size_t op_size, void *private_data);
  131 int fuse_loop_mt_32(struct fuse *f, struct fuse_loop_config *config);
  132 int fuse_session_loop_mt_32(struct fuse_session *se, struct fuse_loop_config *config);
  133