mirror of https://github.com/trapexit/mergerfs.git
Antonio SJ Musumeci
11 years ago
35 changed files with 982 additions and 990 deletions
-
72README.md
-
15src/access.cpp
-
51src/buildmap.hpp
-
51src/buildvector.hpp
-
70src/category.cpp
-
98src/category.hpp
-
8src/chmod.cpp
-
8src/chown.cpp
-
15src/config.cpp
-
7src/config.hpp
-
27src/create.cpp
-
535src/fs.cpp
-
83src/fs.hpp
-
12src/getattr.cpp
-
25src/getxattr.cpp
-
8src/link.cpp
-
34src/listxattr.cpp
-
1src/mergerfs.cpp
-
24src/mkdir.cpp
-
24src/mknod.cpp
-
14src/open.cpp
-
7src/option_parser.cpp
-
251src/policy.cpp
-
164src/policy.hpp
-
12src/readlink.cpp
-
8src/removexattr.cpp
-
14src/rename.cpp
-
8src/rmdir.cpp
-
79src/setxattr.cpp
-
10src/symlink.cpp
-
2src/test.cpp
-
8src/truncate.cpp
-
8src/unlink.cpp
-
8src/utimens.cpp
-
39src/write.cpp
@ -0,0 +1,51 @@ |
|||||
|
/*
|
||||
|
The MIT License (MIT) |
||||
|
|
||||
|
Copyright (c) 2014 Antonio SJ Musumeci <trapexit@spawn.link> |
||||
|
|
||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
of this software and associated documentation files (the "Software"), to deal |
||||
|
in the Software without restriction, including without limitation the rights |
||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
copies of the Software, and to permit persons to whom the Software is |
||||
|
furnished to do so, subject to the following conditions: |
||||
|
|
||||
|
The above copyright notice and this permission notice shall be included in |
||||
|
all copies or substantial portions of the Software. |
||||
|
|
||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
THE SOFTWARE. |
||||
|
*/ |
||||
|
|
||||
|
#include <algorithm>
|
||||
|
|
||||
|
template<typename K,typename V> |
||||
|
class buildmap |
||||
|
{ |
||||
|
public: |
||||
|
buildmap(const K &key, |
||||
|
const V &val) |
||||
|
{ |
||||
|
_map.insert(std::make_pair(key,val)); |
||||
|
} |
||||
|
|
||||
|
buildmap<K,V> &operator()(const K &key, |
||||
|
const V &val) |
||||
|
{ |
||||
|
_map.insert(std::make_pair(key,val)); |
||||
|
return *this; |
||||
|
} |
||||
|
|
||||
|
operator std::map<K,V>() |
||||
|
{ |
||||
|
return _map; |
||||
|
} |
||||
|
|
||||
|
private: |
||||
|
std::map<K,V> _map; |
||||
|
}; |
@ -0,0 +1,51 @@ |
|||||
|
/*
|
||||
|
The MIT License (MIT) |
||||
|
|
||||
|
Copyright (c) 2014 Antonio SJ Musumeci <trapexit@spawn.link> |
||||
|
|
||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
of this software and associated documentation files (the "Software"), to deal |
||||
|
in the Software without restriction, including without limitation the rights |
||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
copies of the Software, and to permit persons to whom the Software is |
||||
|
furnished to do so, subject to the following conditions: |
||||
|
|
||||
|
The above copyright notice and this permission notice shall be included in |
||||
|
all copies or substantial portions of the Software. |
||||
|
|
||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
THE SOFTWARE. |
||||
|
*/ |
||||
|
|
||||
|
#include <algorithm>
|
||||
|
|
||||
|
template<typename V, bool SORT = false> |
||||
|
class buildvector |
||||
|
{ |
||||
|
public: |
||||
|
buildvector(const V &val) |
||||
|
{ |
||||
|
_vector.push_back(val); |
||||
|
} |
||||
|
|
||||
|
buildvector<V,SORT> &operator()(const V &val) |
||||
|
{ |
||||
|
_vector.push_back(val); |
||||
|
return *this; |
||||
|
} |
||||
|
|
||||
|
operator std::vector<V>() |
||||
|
{ |
||||
|
if(SORT == true) |
||||
|
std::sort(_vector.begin(),_vector.end()); |
||||
|
return _vector; |
||||
|
} |
||||
|
|
||||
|
private: |
||||
|
std::vector<V> _vector; |
||||
|
}; |
@ -0,0 +1,70 @@ |
|||||
|
/*
|
||||
|
The MIT License (MIT) |
||||
|
|
||||
|
Copyright (c) 2014 Antonio SJ Musumeci <trapexit@spawn.link> |
||||
|
|
||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
of this software and associated documentation files (the "Software"), to deal |
||||
|
in the Software without restriction, including without limitation the rights |
||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
copies of the Software, and to permit persons to whom the Software is |
||||
|
furnished to do so, subject to the following conditions: |
||||
|
|
||||
|
The above copyright notice and this permission notice shall be included in |
||||
|
all copies or substantial portions of the Software. |
||||
|
|
||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
THE SOFTWARE. |
||||
|
*/ |
||||
|
|
||||
|
#include <string>
|
||||
|
#include <vector>
|
||||
|
|
||||
|
#include "category.hpp"
|
||||
|
#include "buildvector.hpp"
|
||||
|
|
||||
|
#define CATEGORY(X) Category(Category::Enum::X,#X)
|
||||
|
|
||||
|
namespace mergerfs |
||||
|
{ |
||||
|
const std::vector<Category> Category::_categories_ = |
||||
|
buildvector<Category,true> |
||||
|
(CATEGORY(invalid)) |
||||
|
(CATEGORY(action)) |
||||
|
(CATEGORY(create)) |
||||
|
(CATEGORY(search)); |
||||
|
|
||||
|
const Category * const Category::categories = &_categories_[1]; |
||||
|
|
||||
|
const Category &Category::invalid = Category::categories[Category::Enum::invalid]; |
||||
|
const Category &Category::action = Category::categories[Category::Enum::action]; |
||||
|
const Category &Category::create = Category::categories[Category::Enum::create]; |
||||
|
const Category &Category::search = Category::categories[Category::Enum::search]; |
||||
|
|
||||
|
const Category& |
||||
|
Category::find(const std::string str) |
||||
|
{ |
||||
|
for(int i = Enum::BEGIN; i != Enum::END; ++i) |
||||
|
{ |
||||
|
if(categories[i] == str) |
||||
|
return categories[i]; |
||||
|
} |
||||
|
|
||||
|
return invalid; |
||||
|
} |
||||
|
|
||||
|
const Category& |
||||
|
Category::find(const Category::Enum::Type i) |
||||
|
{ |
||||
|
if(i >= Category::Enum::BEGIN && |
||||
|
i < Category::Enum::END) |
||||
|
return categories[i]; |
||||
|
|
||||
|
return invalid; |
||||
|
} |
||||
|
} |
@ -0,0 +1,98 @@ |
|||||
|
/*
|
||||
|
The MIT License (MIT) |
||||
|
|
||||
|
Copyright (c) 2014 Antonio SJ Musumeci <trapexit@spawn.link> |
||||
|
|
||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
|
of this software and associated documentation files (the "Software"), to deal |
||||
|
in the Software without restriction, including without limitation the rights |
||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
|
copies of the Software, and to permit persons to whom the Software is |
||||
|
furnished to do so, subject to the following conditions: |
||||
|
|
||||
|
The above copyright notice and this permission notice shall be included in |
||||
|
all copies or substantial portions of the Software. |
||||
|
|
||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
|
THE SOFTWARE. |
||||
|
*/ |
||||
|
|
||||
|
#ifndef __CATEGORY_HPP__
|
||||
|
#define __CATEGORY_HPP__
|
||||
|
|
||||
|
#include <string>
|
||||
|
#include <vector>
|
||||
|
|
||||
|
namespace mergerfs |
||||
|
{ |
||||
|
class Category |
||||
|
{ |
||||
|
public: |
||||
|
struct Enum |
||||
|
{ |
||||
|
enum Type |
||||
|
{ |
||||
|
invalid = -1, |
||||
|
BEGIN = 0, |
||||
|
action = BEGIN, |
||||
|
create, |
||||
|
search, |
||||
|
END |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
private: |
||||
|
Enum::Type _enum; |
||||
|
std::string _str; |
||||
|
|
||||
|
public: |
||||
|
Category() |
||||
|
: _enum(invalid), |
||||
|
_str(invalid) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
Category(const Enum::Type enum_, |
||||
|
const std::string str_) |
||||
|
: _enum(enum_), |
||||
|
_str(str_) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
public: |
||||
|
operator const Enum::Type() const { return _enum; } |
||||
|
operator const std::string() const { return _str; } |
||||
|
operator const Category*() const { return this; } |
||||
|
|
||||
|
bool operator==(const std::string str_) const |
||||
|
{ return _str == str_; } |
||||
|
|
||||
|
bool operator==(const Enum::Type enum_) const |
||||
|
{ return _enum == enum_; } |
||||
|
|
||||
|
bool operator!=(const Category &r) const |
||||
|
{ return _enum != r._enum; } |
||||
|
|
||||
|
bool operator<(const Category &r) const |
||||
|
{ return _enum < r._enum; } |
||||
|
|
||||
|
public: |
||||
|
static const Category &find(const std::string); |
||||
|
static const Category &find(const Enum::Type); |
||||
|
|
||||
|
public: |
||||
|
static const std::vector<Category> _categories_; |
||||
|
static const Category * const categories; |
||||
|
static const Category &invalid; |
||||
|
static const Category &action; |
||||
|
static const Category &create; |
||||
|
static const Category &search; |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
#endif
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue