diff options
Diffstat (limited to 'src/VBox/ImageMounter/vboximg-mount/fuse.h')
-rw-r--r-- | src/VBox/ImageMounter/vboximg-mount/fuse.h | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/src/VBox/ImageMounter/vboximg-mount/fuse.h b/src/VBox/ImageMounter/vboximg-mount/fuse.h new file mode 100644 index 00000000..a9ffd37b --- /dev/null +++ b/src/VBox/ImageMounter/vboximg-mount/fuse.h @@ -0,0 +1,185 @@ +/** @file + * Module to dynamically load libfuse/libosxfuse and load all symbols which are needed by + * vboximg-mount. + */ + +/* + * Copyright (C) 2019-2023 Oracle and/or its affiliates. + * + * This file is part of VirtualBox base platform packages, as + * available from https://www.virtualbox.org. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, in version 3 of the + * License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <https://www.gnu.org/licenses>. + * + * SPDX-License-Identifier: GPL-3.0-only + * -------------------------------------------------------------------- + * + * This code is based on and contains parts of: + * + * libfuse + * + * FUSE: Filesystem in Userspace + * Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu> + * + * This program can be distributed under the terms of the GNU LGPLv2. + * See the file COPYING.LIB. + */ + +#ifndef VBOX_INCLUDED_SRC_vboximg_mount_fuse_h +#define VBOX_INCLUDED_SRC_vboximg_mount_fuse_h +#ifndef RT_WITHOUT_PRAGMA_ONCE +# pragma once +#endif + +#include <iprt/types.h> +#include <iprt/stdarg.h> + +RT_C_DECLS_BEGIN + +/* Forward declaration of stat buffer. */ +struct stat; + +/** + * Fuse option structure. + */ +typedef struct fuse_opt +{ + /** Argument template with optional parameter formatting. */ + const char *pszTempl; + /** Offset where the parameter is stored inside the data struct passed to fuse_opt_parse(). */ + unsigned long uOffset; + /** The value to set the variable to if the template has no argument format. */ + int uVal; +} fuse_opt; + +#define FUSE_OPT_KEY(templ, key) { templ, -1U, key } +#define FUSE_OPT_END { NULL, 0, 0 } +#define FUSE_OPT_KEY_NONOPT -2 + +/** + * Fuse argument vector. + */ +typedef struct fuse_args +{ + int argc; + char **argv; + int allocated; +} fuse_args; + +#define FUSE_ARGS_INIT(argc, argv) { argc, argv, 0 } + + +/** + * Fuse file info structure - for us only the fh member is of interest for now. + */ +typedef struct fuse_file_info +{ + int flags; + unsigned long fh_old; + int writepage; + unsigned int oth_flags; + uint64_t fh; + uint64_t lock_owner; +} fuse_file_info; + +/** Option processing function. */ +typedef int (*fuse_opt_proc_t)(void *data, const char *arg, int key, struct fuse_args *outargs); + +/** Directory entry filler function. */ +typedef int (*fuse_fill_dir_t) (void *buf, const char *name, const struct stat *stbuf, off_t off); + + +/** + * Fuse FS callback table implementing the filesystem functionality. + * + * Only required methods are filled out, others are stubbed (change as required). + */ +typedef struct fuse_operations +{ + int (*getattr) (const char *pszPath, struct stat *pStatBuf); + int (*readlink) (const char *pszPath, char *pbBuf, size_t cbBuf); + PFNRT getdir; + PFNRT mknod; + PFNRT mkdir; + PFNRT unlink; + PFNRT rmdir; + PFNRT symlink; + PFNRT rename; + PFNRT link; + PFNRT chmod; + PFNRT chown; + PFNRT truncate; + PFNRT utime; + int (*open) (const char *pszPath, struct fuse_file_info *pInfo); + int (*read) (const char *pszPath, char *pbBuf, size_t cbBuf, off_t off, struct fuse_file_info *pInfo); + int (*write) (const char *pszPath, const char *pbBuf, size_t cbBuf, off_t off, struct fuse_file_info *pInfo); + PFNRT statfs; + PFNRT flush; + int (*release) (const char *pszPath, struct fuse_file_info *pInfo); + PFNRT fsync; + PFNRT setxattr; /* OSXFuse has a different parameter layout. */ + PFNRT getxattr; /* OSXFuse has a different parameter layout. */ + PFNRT listxattr; + PFNRT removexattr; + int (*opendir) (const char *pszPath, struct fuse_file_info *pInfo); + int (*readdir) (const char *pszPath, void *pvBuf, fuse_fill_dir_t pfnFiller, off_t offset, struct fuse_file_info *pInfo); + PFNRT releasedir; + PFNRT fsyncdir; + PFNRT init; + PFNRT destroy; + PFNRT access; + PFNRT create; + PFNRT ftruncate; + PFNRT fgettatr; + PFNRT lock; + PFNRT utimens; + PFNRT bmap; + unsigned int flag_null_path_ok: 1; + unsigned int flag_nopath: 1; + unsigned int flag_utime_omit_ok: 1; + unsigned int flag_reserved: 20; + PFNRT ioctl; + PFNRT poll; + PFNRT write_buf; + PFNRT read_buf; + PFNRT flock; + PFNRT fallocate; +#ifdef RT_OS_DARWIN + PFNRT rsvd00; + PFNRT rsvd01; + PFNRT rsvd02; + PFNRT statfs_x; + PFNRT setvolname; + PFNRT exchange; + PFNRT getxtimes; + PFNRT setbkuptime; + PFNRT setchgtime; + PFNRT setcrtime; + PFNRT chflags; + PFNRT setattr_x; + PFNRT fsetattr_x; +#endif +} fuse_operations; + +/* Declarations of the functions that we need from libfuse */ +#define VBOX_FUSE_GENERATE_HEADER + +#include "fuse-calls.h" + +#undef VBOX_FUSE_GENERATE_HEADER + +RT_C_DECLS_END + +#endif /* !VBOX_INCLUDED_SRC_vboximg_mount_fuse_h */ + |