summaryrefslogtreecommitdiff
path: root/artd/path_utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'artd/path_utils.h')
-rw-r--r--artd/path_utils.h57
1 files changed, 43 insertions, 14 deletions
diff --git a/artd/path_utils.h b/artd/path_utils.h
index 9cbec2351a..a4a6e4f2a7 100644
--- a/artd/path_utils.h
+++ b/artd/path_utils.h
@@ -18,16 +18,23 @@
#define ART_ARTD_PATH_UTILS_H_
#include <string>
+#include <type_traits>
#include <vector>
#include "aidl/com/android/server/art/BnArtd.h"
+#include "android-base/logging.h"
#include "android-base/result.h"
-#include "base/file_utils.h"
-#include "fstab/fstab.h"
+#include "base/macros.h"
namespace art {
namespace artd {
+struct RawArtifactsPath {
+ std::string oat_path;
+ std::string vdex_path;
+ std::string art_path;
+};
+
android::base::Result<std::string> GetAndroidDataOrError();
android::base::Result<std::string> GetAndroidExpandOrError();
@@ -48,20 +55,10 @@ android::base::Result<void> ValidateRuntimeArtifactsPath(
android::base::Result<std::string> BuildArtBinPath(const std::string& binary_name);
-// Returns the absolute path to the OAT file built from the `ArtifactsPath`.
-android::base::Result<std::string> BuildOatPath(
+// Returns the absolute paths to files built from the `ArtifactsPath`.
+android::base::Result<RawArtifactsPath> BuildArtifactsPath(
const aidl::com::android::server::art::ArtifactsPath& artifacts_path);
-// Returns the path to the VDEX file that corresponds to the OAT file.
-inline std::string OatPathToVdexPath(const std::string& oat_path) {
- return ReplaceFileExtension(oat_path, "vdex");
-}
-
-// Returns the path to the ART file that corresponds to the OAT file.
-inline std::string OatPathToArtPath(const std::string& oat_path) {
- return ReplaceFileExtension(oat_path, "art");
-}
-
android::base::Result<std::string> BuildPrimaryRefProfilePath(
const aidl::com::android::server::art::ProfilePath::PrimaryRefProfilePath&
primary_ref_profile_path);
@@ -96,6 +93,38 @@ android::base::Result<std::string> BuildProfileOrDmPath(
android::base::Result<std::string> BuildVdexPath(
const aidl::com::android::server::art::VdexPath& vdex_path);
+// Takes an argument of type `WritableProfilePath`. Returns the pre-reboot flag by value if the
+// argument is const, or by reference otherwise.
+template <typename T,
+ typename = std::enable_if_t<
+ std::is_same_v<std::remove_cv_t<T>,
+ aidl::com::android::server::art::ProfilePath::WritableProfilePath>>>
+std::conditional_t<std::is_const_v<T>, bool, bool&> PreRebootFlag(T& profile_path) {
+ switch (profile_path.getTag()) {
+ case T::forPrimary:
+ return profile_path.template get<T::forPrimary>().isPreReboot;
+ case T::forSecondary:
+ return profile_path.template get<T::forSecondary>().isPreReboot;
+ // No default. All cases should be explicitly handled, or the compilation will fail.
+ }
+ // This should never happen. Just in case we get a non-enumerator value.
+ LOG(FATAL) << ART_FORMAT("Unexpected writable profile path type {}",
+ fmt::underlying(profile_path.getTag()));
+}
+
+template bool PreRebootFlag(
+ const aidl::com::android::server::art::ProfilePath::WritableProfilePath& profile_path);
+template bool& PreRebootFlag(
+ aidl::com::android::server::art::ProfilePath::WritableProfilePath& profile_path);
+
+bool PreRebootFlag(const aidl::com::android::server::art::ProfilePath& profile_path);
+bool PreRebootFlag(
+ const aidl::com::android::server::art::ProfilePath::TmpProfilePath& tmp_profile_path);
+bool PreRebootFlag(const aidl::com::android::server::art::OutputProfile& profile);
+bool PreRebootFlag(const aidl::com::android::server::art::ArtifactsPath& artifacts_path);
+bool PreRebootFlag(const aidl::com::android::server::art::OutputArtifacts& artifacts);
+bool PreRebootFlag(const aidl::com::android::server::art::VdexPath& vdex_path);
+
// Sets the root dir for `ListManagedFiles` and `ListRuntimeImageFiles`.
// The passed string must be alive until the test ends.
// For testing use only.