Merge "init: Use std::string for write_file()" am: 815578cef2
am: 5ff631620e
am: 5981eae421
Change-Id: I3259e0cc0af1079efd9d8a267e6aaeb34c74695c
This commit is contained in:
commit
16d14d73a6
5 changed files with 29 additions and 12 deletions
|
@ -155,7 +155,7 @@ static int do_class_restart(const std::vector<std::string>& args) {
|
|||
}
|
||||
|
||||
static int do_domainname(const std::vector<std::string>& args) {
|
||||
return write_file("/proc/sys/kernel/domainname", args[1].c_str()) ? 0 : 1;
|
||||
return write_file("/proc/sys/kernel/domainname", args[1]) ? 0 : 1;
|
||||
}
|
||||
|
||||
static int do_enable(const std::vector<std::string>& args) {
|
||||
|
@ -179,7 +179,7 @@ static int do_export(const std::vector<std::string>& args) {
|
|||
}
|
||||
|
||||
static int do_hostname(const std::vector<std::string>& args) {
|
||||
return write_file("/proc/sys/kernel/hostname", args[1].c_str()) ? 0 : 1;
|
||||
return write_file("/proc/sys/kernel/hostname", args[1]) ? 0 : 1;
|
||||
}
|
||||
|
||||
static int do_ifup(const std::vector<std::string>& args) {
|
||||
|
@ -696,9 +696,7 @@ static int do_verity_update_state(const std::vector<std::string>& args) {
|
|||
}
|
||||
|
||||
static int do_write(const std::vector<std::string>& args) {
|
||||
const char* path = args[1].c_str();
|
||||
const char* value = args[2].c_str();
|
||||
return write_file(path, value) ? 0 : 1;
|
||||
return write_file(args[1], args[2]) ? 0 : 1;
|
||||
}
|
||||
|
||||
static int do_copy(const std::vector<std::string>& args) {
|
||||
|
|
|
@ -96,7 +96,7 @@ bool Parser::ParseConfigFile(const std::string& path) {
|
|||
LOG(INFO) << "Parsing file " << path << "...";
|
||||
Timer t;
|
||||
std::string data;
|
||||
if (!read_file(path.c_str(), &data)) {
|
||||
if (!read_file(path, &data)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -163,10 +163,11 @@ out_unlink:
|
|||
return -1;
|
||||
}
|
||||
|
||||
bool read_file(const char* path, std::string* content) {
|
||||
bool read_file(const std::string& path, std::string* content) {
|
||||
content->clear();
|
||||
|
||||
android::base::unique_fd fd(TEMP_FAILURE_RETRY(open(path, O_RDONLY | O_NOFOLLOW | O_CLOEXEC)));
|
||||
android::base::unique_fd fd(
|
||||
TEMP_FAILURE_RETRY(open(path.c_str(), O_RDONLY | O_NOFOLLOW | O_CLOEXEC)));
|
||||
if (fd == -1) {
|
||||
return false;
|
||||
}
|
||||
|
@ -186,9 +187,9 @@ bool read_file(const char* path, std::string* content) {
|
|||
return android::base::ReadFdToString(fd, content);
|
||||
}
|
||||
|
||||
bool write_file(const char* path, const char* content) {
|
||||
bool write_file(const std::string& path, const std::string& content) {
|
||||
android::base::unique_fd fd(
|
||||
TEMP_FAILURE_RETRY(open(path, O_WRONLY | O_CREAT | O_NOFOLLOW | O_CLOEXEC, 0600)));
|
||||
TEMP_FAILURE_RETRY(open(path.c_str(), O_WRONLY | O_CREAT | O_NOFOLLOW | O_CLOEXEC, 0600)));
|
||||
if (fd == -1) {
|
||||
PLOG(ERROR) << "write_file: Unable to open '" << path << "'";
|
||||
return false;
|
||||
|
|
|
@ -35,8 +35,8 @@ using namespace std::chrono_literals;
|
|||
int create_socket(const char *name, int type, mode_t perm,
|
||||
uid_t uid, gid_t gid, const char *socketcon);
|
||||
|
||||
bool read_file(const char* path, std::string* content);
|
||||
bool write_file(const char* path, const char* content);
|
||||
bool read_file(const std::string& path, std::string* content);
|
||||
bool write_file(const std::string& path, const std::string& content);
|
||||
|
||||
class Timer {
|
||||
public:
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
#include <errno.h>
|
||||
|
||||
#include <android-base/test_utils.h>
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
TEST(util, read_file_ENOENT) {
|
||||
|
@ -37,6 +38,23 @@ TEST(util, read_file_success) {
|
|||
EXPECT_STREQ("Linux", s.c_str());
|
||||
}
|
||||
|
||||
TEST(util, write_file_binary) {
|
||||
std::string contents("abcd");
|
||||
contents.push_back('\0');
|
||||
contents.push_back('\0');
|
||||
contents.append("dcba");
|
||||
ASSERT_EQ(10u, contents.size());
|
||||
|
||||
TemporaryFile tf;
|
||||
ASSERT_TRUE(tf.fd != -1);
|
||||
EXPECT_TRUE(write_file(tf.path, contents)) << strerror(errno);
|
||||
|
||||
std::string read_back_contents;
|
||||
EXPECT_TRUE(read_file(tf.path, &read_back_contents)) << strerror(errno);
|
||||
EXPECT_EQ(contents, read_back_contents);
|
||||
EXPECT_EQ(10u, read_back_contents.size());
|
||||
}
|
||||
|
||||
TEST(util, decode_uid) {
|
||||
EXPECT_EQ(0U, decode_uid("root"));
|
||||
EXPECT_EQ(UINT_MAX, decode_uid("toot"));
|
||||
|
|
Loading…
Reference in a new issue