Don't delete /mnt/user/<userId>/package on reset.
We need this to stay mounted at /storage. Bug: 124466384 Test: manual Test: atest cts/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java Test: atest cts/tests/tests/provider/src/android/provider/cts/MediaStore* Change-Id: I0cc835471ced2822d83d7056bec53d62ddc682f0
This commit is contained in:
parent
727c5fad41
commit
30df1c61d9
3 changed files with 17 additions and 12 deletions
25
Utils.cpp
25
Utils.cpp
|
@ -898,6 +898,19 @@ static status_t delete_dir_contents(DIR* dir) {
|
|||
}
|
||||
|
||||
status_t DeleteDirContentsAndDir(const std::string& pathname) {
|
||||
status_t res = DeleteDirContents(pathname);
|
||||
if (res < 0) {
|
||||
return res;
|
||||
}
|
||||
if (rmdir(pathname.c_str()) != 0) {
|
||||
PLOG(ERROR) << "rmdir failed on " << pathname;
|
||||
return -errno;
|
||||
}
|
||||
LOG(VERBOSE) << "Success: rmdir on " << pathname;
|
||||
return OK;
|
||||
}
|
||||
|
||||
status_t DeleteDirContents(const std::string& pathname) {
|
||||
// Shamelessly borrowed from android::installd
|
||||
std::unique_ptr<DIR, decltype(&closedir)> dirp(opendir(pathname.c_str()), closedir);
|
||||
if (!dirp) {
|
||||
|
@ -907,17 +920,7 @@ status_t DeleteDirContentsAndDir(const std::string& pathname) {
|
|||
PLOG(ERROR) << "Failed to opendir " << pathname;
|
||||
return -errno;
|
||||
}
|
||||
status_t res = delete_dir_contents(dirp.get());
|
||||
if (res < 0) {
|
||||
return res;
|
||||
}
|
||||
dirp.reset(nullptr);
|
||||
if (rmdir(pathname.c_str()) != 0) {
|
||||
PLOG(ERROR) << "rmdir failed on " << pathname;
|
||||
return -errno;
|
||||
}
|
||||
LOG(VERBOSE) << "Success: rmdir on " << pathname;
|
||||
return OK;
|
||||
return delete_dir_contents(dirp.get());
|
||||
}
|
||||
|
||||
// TODO(118708649): fix duplication with init/util.h
|
||||
|
|
1
Utils.h
1
Utils.h
|
@ -140,6 +140,7 @@ status_t UnmountTreeWithPrefix(const std::string& prefix);
|
|||
status_t UnmountTree(const std::string& mountPoint);
|
||||
|
||||
status_t DeleteDirContentsAndDir(const std::string& pathname);
|
||||
status_t DeleteDirContents(const std::string& pathname);
|
||||
|
||||
status_t WaitForFile(const char* filename, std::chrono::nanoseconds timeout);
|
||||
|
||||
|
|
|
@ -76,6 +76,7 @@ using android::base::StringPrintf;
|
|||
using android::base::unique_fd;
|
||||
using android::vold::BindMount;
|
||||
using android::vold::CreateDir;
|
||||
using android::vold::DeleteDirContents;
|
||||
using android::vold::DeleteDirContentsAndDir;
|
||||
using android::vold::Symlink;
|
||||
using android::vold::Unlink;
|
||||
|
@ -1234,7 +1235,7 @@ int VolumeManager::reset() {
|
|||
mVisibleVolumeIds.clear();
|
||||
|
||||
for (userid_t userId : mStartedUsers) {
|
||||
DeleteDirContentsAndDir(StringPrintf("/mnt/user/%d/package", userId));
|
||||
DeleteDirContents(StringPrintf("/mnt/user/%d/package", userId));
|
||||
}
|
||||
mStartedUsers.clear();
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue