winfsp/inc/fuse/fuse_opt.h
2016-05-31 10:53:22 -07:00

116 lines
3.1 KiB
C

/**
* @file fuse/fuse_opt.h
* WinFsp FUSE compatible API.
*
* This file is derived from libfuse/include/fuse_opt.h:
* FUSE: Filesystem in Userspace
* Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
*
* @copyright 2015-2016 Bill Zissimopoulos
*/
/*
* This file is part of WinFsp.
*
* You can redistribute it and/or modify it under the terms of the
* GNU Affero General Public License version 3 as published by the
* Free Software Foundation.
*
* Licensees holding a valid commercial license may use this file in
* accordance with the commercial license agreement provided with the
* software.
*/
#ifndef FUSE_OPT_H_
#define FUSE_OPT_H_
#include "winfsp_fuse.h"
#ifdef __cplusplus
extern "C" {
#endif
#define FUSE_OPT_KEY(templ, key) { templ, -1, key }
#define FUSE_OPT_END { NULL, 0, 0 }
#define FUSE_OPT_KEY_OPT -1
#define FUSE_OPT_KEY_NONOPT -2
#define FUSE_OPT_KEY_KEEP -3
#define FUSE_OPT_KEY_DISCARD -4
#define FUSE_ARGS_INIT(argc, argv) { argc, argv, 0 }
struct fuse_opt
{
const char *templ;
unsigned int offset;
int value;
};
struct fuse_args
{
int argc;
char **argv;
int allocated;
};
typedef int (*fuse_opt_proc_t)(void *data, const char *arg, int key,
struct fuse_args *outargs);
FSP_FUSE_API int fsp_fuse_opt_parse(struct fsp_fuse_env *env,
struct fuse_args *args, void *data,
const struct fuse_opt opts[], fuse_opt_proc_t proc);
FSP_FUSE_API int fsp_fuse_opt_add_arg(struct fsp_fuse_env *env,
struct fuse_args *args, const char *arg);
FSP_FUSE_API int fsp_fuse_opt_insert_arg(struct fsp_fuse_env *env,
struct fuse_args *args, int pos, const char *arg);
FSP_FUSE_API void fsp_fuse_opt_free_args(struct fsp_fuse_env *env,
struct fuse_args *args);
FSP_FUSE_API int fsp_fuse_opt_add_opt(struct fsp_fuse_env *env,
char **opts, const char *opt);
FSP_FUSE_API int fsp_fuse_opt_add_opt_escaped(struct fsp_fuse_env *env,
char **opts, const char *opt);
FSP_FUSE_API int fsp_fuse_opt_match(struct fsp_fuse_env *env,
const struct fuse_opt opts[], const char *opt);
static inline int fuse_opt_parse(struct fuse_args *args, void *data,
const struct fuse_opt opts[], fuse_opt_proc_t proc)
{
return fsp_fuse_opt_parse(fsp_fuse_env(), args, data, opts, proc);
}
static inline int fuse_opt_add_arg(struct fuse_args *args, const char *arg)
{
return fsp_fuse_opt_add_arg(fsp_fuse_env(), args, arg);
}
static inline int fuse_opt_insert_arg(struct fuse_args *args, int pos, const char *arg)
{
return fsp_fuse_opt_insert_arg(fsp_fuse_env(), args, pos, arg);
}
static inline void fuse_opt_free_args(struct fuse_args *args)
{
fsp_fuse_opt_free_args(fsp_fuse_env(), args);
}
static inline int fuse_opt_add_opt(char **opts, const char *opt)
{
return fsp_fuse_opt_add_opt(fsp_fuse_env(), opts, opt);
}
static inline int fuse_opt_add_opt_escaped(char **opts, const char *opt)
{
return fsp_fuse_opt_add_opt_escaped(fsp_fuse_env(), opts, opt);
}
static inline int fuse_opt_match(const struct fuse_opt opts[], const char *opt)
{
return fsp_fuse_opt_match(fsp_fuse_env(), opts, opt);
}
#ifdef __cplusplus
}
#endif
#endif