blob: 1f614ca71a88c6b972bcff05ff007a6d233f5353 [file] [log] [blame]
// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromeos/key_value_store.h"
#include <map>
#include <string>
#include <vector>
#include <base/files/file_util.h>
#include <base/files/important_file_writer.h>
#include <base/strings/string_split.h>
#include <base/strings/string_util.h>
using std::map;
using std::string;
using std::vector;
namespace chromeos {
bool KeyValueStore::Load(const base::FilePath& path) {
string file_data;
if (!base::ReadFileToString(path, &file_data))
return false;
// Split along '\n', then along '='
vector<string> lines;
base::SplitStringDontTrim(file_data, '\n', &lines);
for (const auto& line : lines) {
if (line.empty() || line.front() == '#')
continue;
string::size_type pos = line.find('=');
if (pos == string::npos)
continue;
store_[line.substr(0, pos)] = line.substr(pos + 1);
}
return true;
}
bool KeyValueStore::Save(const base::FilePath& path) const {
string data;
for (const auto& key_value : store_)
data += key_value.first + "=" + key_value.second + "\n";
return base::ImportantFileWriter::WriteFileAtomically(path, data);
}
bool KeyValueStore::GetString(const string& key, string* value) const {
const auto key_value = store_.find(key);
if (key_value == store_.end())
return false;
*value = key_value->second;
return true;
}
void KeyValueStore::SetString(const string& key, const string& value) {
store_[key] = value;
}
bool KeyValueStore::GetBoolean(const string& key, bool* value) const {
const auto key_value = store_.find(key);
if (key_value == store_.end())
return false;
if (key_value->second == "true") {
*value = true;
return true;
} else if (key_value-> second == "false") {
*value = false;
return true;
}
return false;
}
void KeyValueStore::SetBoolean(const string& key, bool value) {
store_[key] = value ? "true" : "false";
}
} // namespace chromeos