mirror of https://github.com/trapexit/mergerfs.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.0 KiB
47 lines
1.0 KiB
#include "func_getattr_combine.hpp"
|
|
|
|
#include "fs_lstat.hpp"
|
|
#include "fs_inode.hpp"
|
|
#include "timespec_utils.hpp"
|
|
|
|
int
|
|
Func2::GetattrCombine::process(const Branches &branches_,
|
|
const fs::Path &fusepath_,
|
|
struct stat *st_,
|
|
fuse_timeouts_t *timeout_)
|
|
{
|
|
int rv;
|
|
Branches::CPtr branches;
|
|
fs::Path fullpath;
|
|
|
|
branches = branches_;
|
|
|
|
for(const auto &branch : *branches)
|
|
{
|
|
struct stat st;
|
|
|
|
fullpath = branch.path;
|
|
fullpath += fusepath_;
|
|
rv = fs::lstat(fullpath.c_str(),&st);
|
|
if(rv == -1)
|
|
continue;
|
|
|
|
if(st_->st_ino == 0)
|
|
{
|
|
*st_ = st;
|
|
continue;
|
|
}
|
|
|
|
st_->st_atim = TimeSpec::newest(st_->st_atim,st.st_atim);
|
|
st_->st_ctim = TimeSpec::newest(st_->st_ctim,st.st_ctim);
|
|
st_->st_mtim = TimeSpec::newest(st_->st_mtim,st.st_mtim);
|
|
st_->st_nlink += st.st_nlink;
|
|
}
|
|
|
|
if(st_->st_ino == 0)
|
|
return -ENOENT;
|
|
|
|
fs::inode::calc(fusepath_,st_);
|
|
|
|
return 0;
|
|
}
|