mirror of https://github.com/1okko/openpilot.git
params: remove all files if call clearAll with the ParamKeyType.ALL key. (#26000)
* remove all files in dir * fix test case name
This commit is contained in:
parent
1f5187892f
commit
8dbb25e683
|
@ -299,10 +299,13 @@ std::map<std::string, std::string> Params::readAll() {
|
|||
void Params::clearAll(ParamKeyType key_type) {
|
||||
FileLock file_lock(params_path + "/.lock");
|
||||
|
||||
std::string path;
|
||||
for (auto &[key, type] : keys) {
|
||||
if (type & key_type) {
|
||||
unlink(getParamPath(key).c_str());
|
||||
if (key_type == ALL) {
|
||||
util::remove_files_in_dir(getParamPath());
|
||||
} else {
|
||||
for (auto &[key, type] : keys) {
|
||||
if (type & key_type) {
|
||||
unlink(getParamPath(key).c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -143,3 +143,20 @@ TEST_CASE("util::create_directories") {
|
|||
REQUIRE(util::create_directories("", 0755) == false);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("util::remove_files_in_dir") {
|
||||
std::string tmp_dir = "/tmp/test_remove_all_in_dir";
|
||||
system("rm /tmp/test_remove_all_in_dir -rf");
|
||||
REQUIRE(util::create_directories(tmp_dir, 0755));
|
||||
const int tmp_file_cnt = 10;
|
||||
for (int i = 0; i < tmp_file_cnt; ++i) {
|
||||
std::string tmp_file = tmp_dir + "/test_XXXXXX";
|
||||
int fd = mkstemp((char*)tmp_file.c_str());
|
||||
close(fd);
|
||||
REQUIRE(util::file_exists(tmp_file.c_str()));
|
||||
}
|
||||
|
||||
REQUIRE(util::read_files_in_dir(tmp_dir).size() == tmp_file_cnt);
|
||||
util::remove_files_in_dir(tmp_dir);
|
||||
REQUIRE(util::read_files_in_dir(tmp_dir).empty());
|
||||
}
|
||||
|
|
|
@ -97,6 +97,22 @@ std::map<std::string, std::string> read_files_in_dir(const std::string &path) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
void remove_files_in_dir(const std::string &path) {
|
||||
DIR *d = opendir(path.c_str());
|
||||
if (!d) return;
|
||||
|
||||
std::string fn;
|
||||
struct dirent *de = NULL;
|
||||
while ((de = readdir(d))) {
|
||||
if (de->d_type != DT_DIR) {
|
||||
fn = path + "/" + de->d_name;
|
||||
unlink(fn.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
closedir(d);
|
||||
}
|
||||
|
||||
int write_file(const char* path, const void* data, size_t size, int flags, mode_t mode) {
|
||||
int fd = HANDLE_EINTR(open(path, flags, mode));
|
||||
if (fd == -1) {
|
||||
|
|
|
@ -80,6 +80,7 @@ std::string dir_name(std::string const& path);
|
|||
// **** file fhelpers *****
|
||||
std::string read_file(const std::string& fn);
|
||||
std::map<std::string, std::string> read_files_in_dir(const std::string& path);
|
||||
void remove_files_in_dir(const std::string& path);
|
||||
int write_file(const char* path, const void* data, size_t size, int flags = O_WRONLY, mode_t mode = 0664);
|
||||
|
||||
FILE* safe_fopen(const char* filename, const char* mode);
|
||||
|
|
Loading…
Reference in New Issue