Fix an issue when using -o
atime mount options
This commit is contained in:
parent
7a3f2b6114
commit
d6252896e0
@ -9,6 +9,10 @@ Version 0.12.0 (unreleased)
|
|||||||
* boost 1.79
|
* boost 1.79
|
||||||
* spdlog/1.11.0
|
* spdlog/1.11.0
|
||||||
|
|
||||||
|
Version 0.11.5 (unreleased)
|
||||||
|
---------------
|
||||||
|
* Fix an issue when using `-o` atime mount options
|
||||||
|
|
||||||
Version 0.11.4
|
Version 0.11.4
|
||||||
---------------
|
---------------
|
||||||
* Fixed build issue with GCC 13 (see https://github.com/cryfs/cryfs/pull/448 )
|
* Fixed build issue with GCC 13 (see https://github.com/cryfs/cryfs/pull/448 )
|
||||||
|
@ -311,9 +311,7 @@ void extractAllAtimeOptionsAndRemoveOnesUnknownToLibfuse_(string* csv_options, v
|
|||||||
constexpr std::array<const char*, 3> flags = {"strictatime", "relatime", "nodiratime"};
|
constexpr std::array<const char*, 3> flags = {"strictatime", "relatime", "nodiratime"};
|
||||||
return flags.end() != std::find(flags.begin(), flags.end(), flag);
|
return flags.end() != std::find(flags.begin(), flags.end(), flag);
|
||||||
};
|
};
|
||||||
*csv_options = ranges::make_subrange(csv_options->begin(), csv_options->end())
|
*csv_options = ranges::make_subrange(csv_options->begin(), csv_options->end()) | ranges::views::split(',') | ranges::views::filter(
|
||||||
| ranges::views::split(',')
|
|
||||||
| ranges::views::filter(
|
|
||||||
[&](auto &&elem_) {
|
[&](auto &&elem_) {
|
||||||
// TODO string_view would be better
|
// TODO string_view would be better
|
||||||
const std::string elem(&*elem_.begin(), ranges::distance(elem_));
|
const std::string elem(&*elem_.begin(), ranges::distance(elem_));
|
||||||
@ -325,9 +323,7 @@ void extractAllAtimeOptionsAndRemoveOnesUnknownToLibfuse_(string* csv_options, v
|
|||||||
result->push_back(elem);
|
result->push_back(elem);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
})
|
}) | ranges::views::join(',') | ranges::to<string>();
|
||||||
| ranges::views::join(',')
|
|
||||||
| ranges::to<string>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return a list of all atime options (e.g. atime, noatime, relatime, strictatime, nodiratime) that occur in the
|
// Return a list of all atime options (e.g. atime, noatime, relatime, strictatime, nodiratime) that occur in the
|
||||||
@ -338,12 +334,24 @@ void extractAllAtimeOptionsAndRemoveOnesUnknownToLibfuse_(string* csv_options, v
|
|||||||
vector<string> extractAllAtimeOptionsAndRemoveOnesUnknownToLibfuse_(vector<string>* fuseOptions) {
|
vector<string> extractAllAtimeOptionsAndRemoveOnesUnknownToLibfuse_(vector<string>* fuseOptions) {
|
||||||
vector<string> result;
|
vector<string> result;
|
||||||
bool lastOptionWasDashO = false;
|
bool lastOptionWasDashO = false;
|
||||||
for (string& option : *fuseOptions) {
|
for (size_t i = 0; i < fuseOptions->size(); ++i)
|
||||||
if (lastOptionWasDashO) {
|
{
|
||||||
|
string &option = (*fuseOptions)[i];
|
||||||
|
if (lastOptionWasDashO)
|
||||||
|
{
|
||||||
extractAllAtimeOptionsAndRemoveOnesUnknownToLibfuse_(&option, &result);
|
extractAllAtimeOptionsAndRemoveOnesUnknownToLibfuse_(&option, &result);
|
||||||
|
if (option.empty()) {
|
||||||
|
// All options were removed, remove the empty argument
|
||||||
|
fuseOptions->erase(fuseOptions->begin() + i);
|
||||||
|
--i;
|
||||||
|
// And also remove the now value-less '-o' before it
|
||||||
|
fuseOptions->erase(fuseOptions->begin() + i);
|
||||||
|
--i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
lastOptionWasDashO = (option == "-o");
|
lastOptionWasDashO = (option == "-o");
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user