mirror of
https://github.com/trapexit/mergerfs.git
synced 2025-03-15 02:35:12 +08:00
Merge pull request #1225 from trapexit/new-funcs
Add callbacks for newer functions
This commit is contained in:
commit
8b769dff7f
@ -539,6 +539,16 @@ struct fuse_operations
|
|||||||
off_t offset_out,
|
off_t offset_out,
|
||||||
size_t size,
|
size_t size,
|
||||||
int flags);
|
int flags);
|
||||||
|
|
||||||
|
ssize_t (*setupmapping)(uint64_t *fh_,
|
||||||
|
uint64_t foffset_,
|
||||||
|
uint64_t len_,
|
||||||
|
uint64_t flags_,
|
||||||
|
uint64_t moffset_);
|
||||||
|
|
||||||
|
int (*removemapping)();
|
||||||
|
int (*syncfs)();
|
||||||
|
int (*tmpfile)(const char *, mode_t, fuse_file_info_t *);
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Extra context that may be needed by some filesystems
|
/** Extra context that may be needed by some filesystems
|
||||||
|
@ -1007,6 +1007,15 @@ struct fuse_lowlevel_ops
|
|||||||
*/
|
*/
|
||||||
void (*copy_file_range)(fuse_req_t req,
|
void (*copy_file_range)(fuse_req_t req,
|
||||||
const struct fuse_in_header *hdr);
|
const struct fuse_in_header *hdr);
|
||||||
|
|
||||||
|
void (*setupmapping)(fuse_req_t req,
|
||||||
|
const struct fuse_in_header *hdr);
|
||||||
|
void (*removemapping)(fuse_req_t req,
|
||||||
|
const struct fuse_in_header *hdr);
|
||||||
|
void (*syncfs)(fuse_req_t req,
|
||||||
|
const struct fuse_in_header *hdr);
|
||||||
|
void (*tmpfile)(fuse_req_t req,
|
||||||
|
const struct fuse_in_header *hdr);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -753,6 +753,7 @@ find_node(struct fuse *f,
|
|||||||
if(f->conf.remember)
|
if(f->conf.remember)
|
||||||
inc_nlookup(node);
|
inc_nlookup(node);
|
||||||
|
|
||||||
|
printf("hash_name = %s\n",name);
|
||||||
if(hash_name(f,node,parent,name) == -1)
|
if(hash_name(f,node,parent,name) == -1)
|
||||||
{
|
{
|
||||||
free_node(f,node);
|
free_node(f,node);
|
||||||
@ -2877,6 +2878,101 @@ fuse_lib_copy_file_range(fuse_req_t req_,
|
|||||||
fuse_reply_err(req_,rv);
|
fuse_reply_err(req_,rv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
void
|
||||||
|
fuse_lib_setupmapping(fuse_req_t req_,
|
||||||
|
const struct fuse_in_header *hdr_)
|
||||||
|
{
|
||||||
|
fuse_reply_err(req_,ENOSYS);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
void
|
||||||
|
fuse_lib_removemapping(fuse_req_t req_,
|
||||||
|
const struct fuse_in_header *hdr_)
|
||||||
|
{
|
||||||
|
fuse_reply_err(req_,ENOSYS);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
void
|
||||||
|
fuse_lib_syncfs(fuse_req_t req_,
|
||||||
|
const struct fuse_in_header *hdr_)
|
||||||
|
{
|
||||||
|
fuse_reply_err(req_,ENOSYS);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: This is just a copy of fuse_lib_create. Needs to be rewritten
|
||||||
|
// so a nameless node can be setup.
|
||||||
|
// name is always '/'
|
||||||
|
// nodeid is the base directory
|
||||||
|
static
|
||||||
|
void
|
||||||
|
fuse_lib_tmpfile(fuse_req_t req_,
|
||||||
|
const struct fuse_in_header *hdr_)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
char *path;
|
||||||
|
struct fuse *f;
|
||||||
|
const char *name;
|
||||||
|
fuse_file_info_t ffi = {0};
|
||||||
|
struct fuse_entry_param e;
|
||||||
|
struct fuse_create_in *arg;
|
||||||
|
|
||||||
|
arg = fuse_hdr_arg(hdr_);
|
||||||
|
name = PARAM(arg);
|
||||||
|
|
||||||
|
ffi.flags = arg->flags;
|
||||||
|
|
||||||
|
if(req_->f->conn.proto_minor >= 12)
|
||||||
|
req_->ctx.umask = arg->umask;
|
||||||
|
else
|
||||||
|
name = (char*)arg + sizeof(struct fuse_open_in);
|
||||||
|
|
||||||
|
f = req_fuse_prepare(req_);
|
||||||
|
|
||||||
|
err = get_path_name(f,hdr_->nodeid,name,&path);
|
||||||
|
if(!err)
|
||||||
|
{
|
||||||
|
err = f->fs->op.tmpfile(path,arg->mode,&ffi);
|
||||||
|
if(!err)
|
||||||
|
{
|
||||||
|
err = lookup_path(f,hdr_->nodeid,name,path,&e,&ffi);
|
||||||
|
if(err)
|
||||||
|
{
|
||||||
|
f->fs->op.release(&ffi);
|
||||||
|
}
|
||||||
|
else if(!S_ISREG(e.attr.st_mode))
|
||||||
|
{
|
||||||
|
err = -EIO;
|
||||||
|
f->fs->op.release(&ffi);
|
||||||
|
forget_node(f,e.ino,1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!err)
|
||||||
|
{
|
||||||
|
pthread_mutex_lock(&f->lock);
|
||||||
|
get_node(f,e.ino)->open_count++;
|
||||||
|
pthread_mutex_unlock(&f->lock);
|
||||||
|
|
||||||
|
if(fuse_reply_create(req_,&e,&ffi) == -ENOENT)
|
||||||
|
{
|
||||||
|
/* The open syscall was interrupted,so it
|
||||||
|
must be cancelled */
|
||||||
|
fuse_do_release(f,e.ino,&ffi);
|
||||||
|
forget_node(f,e.ino,1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fuse_reply_err(req_,err);
|
||||||
|
}
|
||||||
|
|
||||||
|
free_path(f,hdr_->nodeid,path);
|
||||||
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
lock_t*
|
lock_t*
|
||||||
locks_conflict(node_t *node,
|
locks_conflict(node_t *node,
|
||||||
@ -3531,15 +3627,19 @@ static struct fuse_lowlevel_ops fuse_path_ops =
|
|||||||
.readlink = fuse_lib_readlink,
|
.readlink = fuse_lib_readlink,
|
||||||
.release = fuse_lib_release,
|
.release = fuse_lib_release,
|
||||||
.releasedir = fuse_lib_releasedir,
|
.releasedir = fuse_lib_releasedir,
|
||||||
|
.removemapping = fuse_lib_removemapping,
|
||||||
.removexattr = fuse_lib_removexattr,
|
.removexattr = fuse_lib_removexattr,
|
||||||
.rename = fuse_lib_rename,
|
.rename = fuse_lib_rename,
|
||||||
.retrieve_reply = NULL,
|
.retrieve_reply = NULL,
|
||||||
.rmdir = fuse_lib_rmdir,
|
.rmdir = fuse_lib_rmdir,
|
||||||
.setattr = fuse_lib_setattr,
|
.setattr = fuse_lib_setattr,
|
||||||
.setlk = fuse_lib_setlk,
|
.setlk = fuse_lib_setlk,
|
||||||
|
.setupmapping = fuse_lib_setupmapping,
|
||||||
.setxattr = fuse_lib_setxattr,
|
.setxattr = fuse_lib_setxattr,
|
||||||
.statfs = fuse_lib_statfs,
|
.statfs = fuse_lib_statfs,
|
||||||
.symlink = fuse_lib_symlink,
|
.symlink = fuse_lib_symlink,
|
||||||
|
.syncfs = fuse_lib_syncfs,
|
||||||
|
.tmpfile = fuse_lib_tmpfile,
|
||||||
.unlink = fuse_lib_unlink,
|
.unlink = fuse_lib_unlink,
|
||||||
.write = fuse_lib_write,
|
.write = fuse_lib_write,
|
||||||
};
|
};
|
||||||
|
@ -1330,6 +1330,42 @@ do_copy_file_range(fuse_req_t req_,
|
|||||||
req_->f->op.copy_file_range(req_,hdr_);
|
req_->f->op.copy_file_range(req_,hdr_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
void
|
||||||
|
do_setupmapping(fuse_req_t req_,
|
||||||
|
struct fuse_in_header *hdr_)
|
||||||
|
{
|
||||||
|
printf("setupmapping\n");
|
||||||
|
req_->f->op.setupmapping(req_,hdr_);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
void
|
||||||
|
do_removemapping(fuse_req_t req_,
|
||||||
|
struct fuse_in_header *hdr_)
|
||||||
|
{
|
||||||
|
printf("removemapping\n");
|
||||||
|
req_->f->op.removemapping(req_,hdr_);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
void
|
||||||
|
do_syncfs(fuse_req_t req_,
|
||||||
|
struct fuse_in_header *hdr_)
|
||||||
|
{
|
||||||
|
printf("syncfs\n");
|
||||||
|
req_->f->op.syncfs(req_,hdr_);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
void
|
||||||
|
do_tmpfile(fuse_req_t req_,
|
||||||
|
struct fuse_in_header *hdr_)
|
||||||
|
{
|
||||||
|
printf("tmpfile\n");
|
||||||
|
req_->f->op.tmpfile(req_,hdr_);
|
||||||
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
int
|
int
|
||||||
send_notify_iov(struct fuse_ll *f,
|
send_notify_iov(struct fuse_ll *f,
|
||||||
@ -1643,6 +1679,10 @@ static struct {
|
|||||||
[FUSE_NOTIFY_REPLY] = { do_notify_reply, "NOTIFY_REPLY" },
|
[FUSE_NOTIFY_REPLY] = { do_notify_reply, "NOTIFY_REPLY" },
|
||||||
[FUSE_BATCH_FORGET] = { do_batch_forget, "BATCH_FORGET" },
|
[FUSE_BATCH_FORGET] = { do_batch_forget, "BATCH_FORGET" },
|
||||||
[FUSE_COPY_FILE_RANGE] = { do_copy_file_range, "COPY_FILE_RANGE" },
|
[FUSE_COPY_FILE_RANGE] = { do_copy_file_range, "COPY_FILE_RANGE" },
|
||||||
|
[FUSE_SETUPMAPPING] = { do_setupmapping, "SETUPMAPPING" },
|
||||||
|
[FUSE_REMOVEMAPPING] = { do_removemapping, "REMOVEMAPPING" },
|
||||||
|
[FUSE_SYNCFS] = { do_syncfs, "SYNCFS" },
|
||||||
|
[FUSE_TMPFILE] = { do_tmpfile, "TMPFILE" }
|
||||||
};
|
};
|
||||||
|
|
||||||
#define FUSE_MAXOP (sizeof(fuse_ll_ops) / sizeof(fuse_ll_ops[0]))
|
#define FUSE_MAXOP (sizeof(fuse_ll_ops) / sizeof(fuse_ll_ops[0]))
|
||||||
@ -1815,6 +1855,8 @@ fuse_ll_buf_process_read(struct fuse_session *se_,
|
|||||||
|
|
||||||
in = (struct fuse_in_header*)msgbuf_->mem;
|
in = (struct fuse_in_header*)msgbuf_->mem;
|
||||||
|
|
||||||
|
// printf("%d\n",in->opcode);
|
||||||
|
|
||||||
req = fuse_ll_alloc_req(se_->f);
|
req = fuse_ll_alloc_req(se_->f);
|
||||||
if(req == NULL)
|
if(req == NULL)
|
||||||
return fuse_send_enomem(se_->f,se_->ch,in->unique);
|
return fuse_send_enomem(se_->f,se_->ch,in->unique);
|
||||||
|
28
src/fuse_removemapping.cpp
Normal file
28
src/fuse_removemapping.cpp
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
ISC License
|
||||||
|
|
||||||
|
Copyright (c) 2023, Antonio SJ Musumeci <trapexit@spawn.link>
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "fuse_removemapping.hpp"
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
FUSE::removemapping()
|
||||||
|
{
|
||||||
|
return -ENOSYS;
|
||||||
|
}
|
27
src/fuse_removemapping.hpp
Normal file
27
src/fuse_removemapping.hpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
ISC License
|
||||||
|
|
||||||
|
Copyright (c) 2023, Antonio SJ Musumeci <trapexit@spawn.link>
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "fuse.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace FUSE
|
||||||
|
{
|
||||||
|
int removemapping();
|
||||||
|
}
|
35
src/fuse_setupmapping.cpp
Normal file
35
src/fuse_setupmapping.cpp
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
ISC License
|
||||||
|
|
||||||
|
Copyright (c) 2023, Antonio SJ Musumeci <trapexit@spawn.link>
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "fuse_setupmapping.hpp"
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
|
||||||
|
ssize_t
|
||||||
|
FUSE::setupmapping(uint64_t *fh_,
|
||||||
|
uint64_t foffset_,
|
||||||
|
uint64_t len_,
|
||||||
|
uint64_t flags_,
|
||||||
|
uint64_t moffset_)
|
||||||
|
{
|
||||||
|
return -ENOSYS;
|
||||||
|
}
|
31
src/fuse_setupmapping.hpp
Normal file
31
src/fuse_setupmapping.hpp
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
ISC License
|
||||||
|
|
||||||
|
Copyright (c) 2023, Antonio SJ Musumeci <trapexit@spawn.link>
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "fuse.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace FUSE
|
||||||
|
{
|
||||||
|
ssize_t setupmapping(uint64_t *fh_,
|
||||||
|
uint64_t foffset_,
|
||||||
|
uint64_t len_,
|
||||||
|
uint64_t flags_,
|
||||||
|
uint64_t moffset_);
|
||||||
|
}
|
28
src/fuse_syncfs.cpp
Normal file
28
src/fuse_syncfs.cpp
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
ISC License
|
||||||
|
|
||||||
|
Copyright (c) 2023, Antonio SJ Musumeci <trapexit@spawn.link>
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "fuse_syncfs.hpp"
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
FUSE::syncfs()
|
||||||
|
{
|
||||||
|
return -ENOSYS;
|
||||||
|
}
|
27
src/fuse_syncfs.hpp
Normal file
27
src/fuse_syncfs.hpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
ISC License
|
||||||
|
|
||||||
|
Copyright (c) 2023, Antonio SJ Musumeci <trapexit@spawn.link>
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "fuse.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace FUSE
|
||||||
|
{
|
||||||
|
int syncfs();
|
||||||
|
}
|
32
src/fuse_tmpfile.cpp
Normal file
32
src/fuse_tmpfile.cpp
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
ISC License
|
||||||
|
|
||||||
|
Copyright (c) 2023, Antonio SJ Musumeci <trapexit@spawn.link>
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "fuse_tmpfile.hpp"
|
||||||
|
#include "fuse_create.hpp"
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
FUSE::tmpfile(const char *fusepath_,
|
||||||
|
mode_t mode_,
|
||||||
|
fuse_file_info_t *ffi_)
|
||||||
|
{
|
||||||
|
return -ENOSYS;
|
||||||
|
}
|
32
src/fuse_tmpfile.hpp
Normal file
32
src/fuse_tmpfile.hpp
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
ISC License
|
||||||
|
|
||||||
|
Copyright (c) 2023, Antonio SJ Musumeci <trapexit@spawn.link>
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "fuse.h"
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace FUSE
|
||||||
|
{
|
||||||
|
int
|
||||||
|
tmpfile(const char *fusepath,
|
||||||
|
mode_t mode,
|
||||||
|
fuse_file_info_t *ffi);
|
||||||
|
}
|
@ -63,12 +63,16 @@
|
|||||||
#include "fuse_readlink.hpp"
|
#include "fuse_readlink.hpp"
|
||||||
#include "fuse_release.hpp"
|
#include "fuse_release.hpp"
|
||||||
#include "fuse_releasedir.hpp"
|
#include "fuse_releasedir.hpp"
|
||||||
|
#include "fuse_removemapping.hpp"
|
||||||
#include "fuse_removexattr.hpp"
|
#include "fuse_removexattr.hpp"
|
||||||
#include "fuse_rename.hpp"
|
#include "fuse_rename.hpp"
|
||||||
#include "fuse_rmdir.hpp"
|
#include "fuse_rmdir.hpp"
|
||||||
|
#include "fuse_setupmapping.hpp"
|
||||||
#include "fuse_setxattr.hpp"
|
#include "fuse_setxattr.hpp"
|
||||||
#include "fuse_statfs.hpp"
|
#include "fuse_statfs.hpp"
|
||||||
#include "fuse_symlink.hpp"
|
#include "fuse_symlink.hpp"
|
||||||
|
#include "fuse_syncfs.hpp"
|
||||||
|
#include "fuse_tmpfile.hpp"
|
||||||
#include "fuse_truncate.hpp"
|
#include "fuse_truncate.hpp"
|
||||||
#include "fuse_unlink.hpp"
|
#include "fuse_unlink.hpp"
|
||||||
#include "fuse_utimens.hpp"
|
#include "fuse_utimens.hpp"
|
||||||
@ -127,12 +131,16 @@ namespace l
|
|||||||
ops_.readlink = FUSE::readlink;
|
ops_.readlink = FUSE::readlink;
|
||||||
ops_.release = FUSE::release;
|
ops_.release = FUSE::release;
|
||||||
ops_.releasedir = FUSE::releasedir;
|
ops_.releasedir = FUSE::releasedir;
|
||||||
|
ops_.removemapping = FUSE::removemapping;
|
||||||
ops_.removexattr = FUSE::removexattr;
|
ops_.removexattr = FUSE::removexattr;
|
||||||
ops_.rename = FUSE::rename;
|
ops_.rename = FUSE::rename;
|
||||||
ops_.rmdir = FUSE::rmdir;
|
ops_.rmdir = FUSE::rmdir;
|
||||||
|
ops_.setupmapping = FUSE::setupmapping;
|
||||||
ops_.setxattr = FUSE::setxattr;
|
ops_.setxattr = FUSE::setxattr;
|
||||||
ops_.statfs = FUSE::statfs;
|
ops_.statfs = FUSE::statfs;
|
||||||
ops_.symlink = FUSE::symlink;
|
ops_.symlink = FUSE::symlink;
|
||||||
|
ops_.syncfs = FUSE::syncfs;
|
||||||
|
ops_.tmpfile = FUSE::tmpfile;
|
||||||
ops_.truncate = FUSE::truncate;
|
ops_.truncate = FUSE::truncate;
|
||||||
ops_.unlink = FUSE::unlink;
|
ops_.unlink = FUSE::unlink;
|
||||||
ops_.utimens = FUSE::utimens;
|
ops_.utimens = FUSE::utimens;
|
||||||
|
@ -28,7 +28,7 @@ namespace ugid
|
|||||||
initgroups(const uid_t uid_,
|
initgroups(const uid_t uid_,
|
||||||
const gid_t gid_)
|
const gid_t gid_)
|
||||||
{
|
{
|
||||||
static __thread gid_t_cache cache = {0};
|
static thread_local gid_t_cache cache = {0};
|
||||||
|
|
||||||
cache.initgroups(uid_,gid_);
|
cache.initgroups(uid_,gid_);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user