Merge "updater: Fix a bug in DeleteFn()."
am: 529032f4a0
Change-Id: I77054ec63705d4e8f72ce7232db5f394f7de420e
This commit is contained in:
@@ -147,3 +147,36 @@ TEST_F(UpdaterTest, file_getprop) {
|
|||||||
"\", \"ro.product.model\")");
|
"\", \"ro.product.model\")");
|
||||||
expect("", script6.c_str(), kNoCause);
|
expect("", script6.c_str(), kNoCause);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(UpdaterTest, delete) {
|
||||||
|
// Delete none.
|
||||||
|
expect("0", "delete()", kNoCause);
|
||||||
|
expect("0", "delete(\"/doesntexist\")", kNoCause);
|
||||||
|
expect("0", "delete(\"/doesntexist1\", \"/doesntexist2\")", kNoCause);
|
||||||
|
expect("0", "delete(\"/doesntexist1\", \"/doesntexist2\", \"/doesntexist3\")", kNoCause);
|
||||||
|
|
||||||
|
// Delete one file.
|
||||||
|
TemporaryFile temp_file1;
|
||||||
|
ASSERT_TRUE(android::base::WriteStringToFile("abc", temp_file1.path));
|
||||||
|
std::string script1("delete(\"" + std::string(temp_file1.path) + "\")");
|
||||||
|
expect("1", script1.c_str(), kNoCause);
|
||||||
|
|
||||||
|
// Delete two files.
|
||||||
|
TemporaryFile temp_file2;
|
||||||
|
ASSERT_TRUE(android::base::WriteStringToFile("abc", temp_file2.path));
|
||||||
|
TemporaryFile temp_file3;
|
||||||
|
ASSERT_TRUE(android::base::WriteStringToFile("abc", temp_file3.path));
|
||||||
|
std::string script2("delete(\"" + std::string(temp_file2.path) + "\", \"" +
|
||||||
|
std::string(temp_file3.path) + "\")");
|
||||||
|
expect("2", script2.c_str(), kNoCause);
|
||||||
|
|
||||||
|
// Delete already deleted files.
|
||||||
|
expect("0", script2.c_str(), kNoCause);
|
||||||
|
|
||||||
|
// Delete one out of three.
|
||||||
|
TemporaryFile temp_file4;
|
||||||
|
ASSERT_TRUE(android::base::WriteStringToFile("abc", temp_file4.path));
|
||||||
|
std::string script3("delete(\"/doesntexist1\", \"" + std::string(temp_file4.path) +
|
||||||
|
"\", \"/doesntexist2\")");
|
||||||
|
expect("1", script3.c_str(), kNoCause);
|
||||||
|
}
|
||||||
|
|||||||
+13
-9
@@ -66,7 +66,7 @@
|
|||||||
|
|
||||||
// Send over the buffer to recovery though the command pipe.
|
// Send over the buffer to recovery though the command pipe.
|
||||||
static void uiPrint(State* state, const std::string& buffer) {
|
static void uiPrint(State* state, const std::string& buffer) {
|
||||||
UpdaterInfo* ui = reinterpret_cast<UpdaterInfo*>(state->cookie);
|
UpdaterInfo* ui = static_cast<UpdaterInfo*>(state->cookie);
|
||||||
|
|
||||||
// "line1\nline2\n" will be split into 3 tokens: "line1", "line2" and "".
|
// "line1\nline2\n" will be split into 3 tokens: "line1", "line2" and "".
|
||||||
// So skip sending empty strings to UI.
|
// So skip sending empty strings to UI.
|
||||||
@@ -117,6 +117,7 @@ static int make_parents(char* name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// mount(fs_type, partition_type, location, mount_point)
|
// mount(fs_type, partition_type, location, mount_point)
|
||||||
|
// mount(fs_type, partition_type, location, mount_point, mount_options)
|
||||||
//
|
//
|
||||||
// fs_type="ext4" partition_type="EMMC" location=device
|
// fs_type="ext4" partition_type="EMMC" location=device
|
||||||
Value* MountFn(const char* name, State* state, int argc, Expr* argv[]) {
|
Value* MountFn(const char* name, State* state, int argc, Expr* argv[]) {
|
||||||
@@ -252,7 +253,6 @@ static int exec_cmd(const char* path, char* const argv[]) {
|
|||||||
return WEXITSTATUS(status);
|
return WEXITSTATUS(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// format(fs_type, partition_type, location, fs_size, mount_point)
|
// format(fs_type, partition_type, location, fs_size, mount_point)
|
||||||
//
|
//
|
||||||
// fs_type="ext4" partition_type="EMMC" location=device fs_size=<bytes> mount_point=<location>
|
// fs_type="ext4" partition_type="EMMC" location=device fs_size=<bytes> mount_point=<location>
|
||||||
@@ -301,14 +301,13 @@ Value* FormatFn(const char* name, State* state, int argc, Expr* argv[]) {
|
|||||||
if (fs_type == "ext4") {
|
if (fs_type == "ext4") {
|
||||||
int status = make_ext4fs(location.c_str(), size, mount_point.c_str(), sehandle);
|
int status = make_ext4fs(location.c_str(), size, mount_point.c_str(), sehandle);
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
printf("%s: make_ext4fs failed (%d) on %s",
|
printf("%s: make_ext4fs failed (%d) on %s", name, status, location.c_str());
|
||||||
name, status, location.c_str());
|
|
||||||
return StringValue("");
|
return StringValue("");
|
||||||
}
|
}
|
||||||
return StringValue(location);
|
return StringValue(location);
|
||||||
} else if (fs_type == "f2fs") {
|
} else if (fs_type == "f2fs") {
|
||||||
if (size < 0) {
|
if (size < 0) {
|
||||||
printf("fs_size can't be negative for f2fs: %s", fs_size.c_str());
|
printf("%s: fs_size can't be negative for f2fs: %s", name, fs_size.c_str());
|
||||||
return StringValue("");
|
return StringValue("");
|
||||||
}
|
}
|
||||||
std::string num_sectors = std::to_string(size / 512);
|
std::string num_sectors = std::to_string(size / 512);
|
||||||
@@ -318,8 +317,7 @@ Value* FormatFn(const char* name, State* state, int argc, Expr* argv[]) {
|
|||||||
num_sectors.c_str(), nullptr};
|
num_sectors.c_str(), nullptr};
|
||||||
int status = exec_cmd(f2fs_path, (char* const*)f2fs_argv);
|
int status = exec_cmd(f2fs_path, (char* const*)f2fs_argv);
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
printf("%s: mkfs.f2fs failed (%d) on %s",
|
printf("%s: mkfs.f2fs failed (%d) on %s", name, status, location.c_str());
|
||||||
name, status, location.c_str());
|
|
||||||
return StringValue("");
|
return StringValue("");
|
||||||
}
|
}
|
||||||
return StringValue(location);
|
return StringValue(location);
|
||||||
@@ -365,8 +363,14 @@ Value* RenameFn(const char* name, State* state, int argc, Expr* argv[]) {
|
|||||||
return StringValue(dst_name);
|
return StringValue(dst_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// delete([filename, ...])
|
||||||
|
// Deletes all the filenames listed. Returns the number of files successfully deleted.
|
||||||
|
//
|
||||||
|
// delete_recursive([dirname, ...])
|
||||||
|
// Recursively deletes dirnames and all their contents. Returns the number of directories
|
||||||
|
// successfully deleted.
|
||||||
Value* DeleteFn(const char* name, State* state, int argc, Expr* argv[]) {
|
Value* DeleteFn(const char* name, State* state, int argc, Expr* argv[]) {
|
||||||
std::vector<std::string> paths;
|
std::vector<std::string> paths(argc);
|
||||||
for (int i = 0; i < argc; ++i) {
|
for (int i = 0; i < argc; ++i) {
|
||||||
if (!Evaluate(state, argv[i], &paths[i])) {
|
if (!Evaluate(state, argv[i], &paths[i])) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@@ -382,7 +386,7 @@ Value* DeleteFn(const char* name, State* state, int argc, Expr* argv[]) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return StringValue(android::base::StringPrintf("%d", success));
|
return StringValue(std::to_string(success));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user