summaryrefslogtreecommitdiff
path: root/libgsi.cpp
diff options
context:
space:
mode:
authorDavid Anderson <dvander@google.com>2019-01-07 18:10:29 -0800
committerDavid Anderson <dvander@google.com>2019-01-08 13:31:06 -0800
commitee84d7406b1f36fa8c6c501457289268038f2c2f (patch)
treeee2d5cabccf2a332010f10bfca4cb1ede740cd31 /libgsi.cpp
parent264f9fa893fe2d1b418d24aabf69503cbbe05f04 (diff)
downloadgsid-ee84d7406b1f36fa8c6c501457289268038f2c2f.tar.gz
Introduce libgsi, gsi_tool.
libgsi is a very small library to communicate critical gsi knowledge to init and fs_mgr, to avoid hardcoding path names and constants. gsi_tool is a shell wrapper to talk to gsid through binder. gsid (currently in vold, will be moved shortly) is the daemon to manage gsi installs. Bug: 121210348 Test: N/A Change-Id: I7942af56cb8e6ed69d28189bcf8d9806aa5e3e45
Diffstat (limited to 'libgsi.cpp')
-rw-r--r--libgsi.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/libgsi.cpp b/libgsi.cpp
new file mode 100644
index 0000000..4291389
--- /dev/null
+++ b/libgsi.cpp
@@ -0,0 +1,68 @@
+//
+// Copyright (C) 2019 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#include "libgsi/libgsi.h"
+
+#include <unistd.h>
+
+#include <android-base/file.h>
+
+#include "file_paths.h"
+
+namespace android {
+namespace gsi {
+
+bool IsGsiRunning() {
+ return !access(kGsiBootedIndicatorFile, F_OK);
+}
+
+bool IsGsiInstalled() {
+ return !access(kGsiBootableFile, R_OK);
+}
+
+static bool CanBootIntoGsi(std::string* error) {
+ if (IsGsiInstalled()) {
+ *error = "not detected";
+ return false;
+ }
+ // :TODO: boot attempts
+ return true;
+}
+
+bool CanBootIntoGsi(std::string* metadata_file, std::string* error) {
+ if (!CanBootIntoGsi(error)) {
+ android::base::RemoveFileIfExists(kGsiBootedIndicatorFile);
+ android::base::RemoveFileIfExists(kGsiBootableFile);
+ return false;
+ }
+
+ *metadata_file = kGsiMetadata;
+ return true;
+}
+
+bool UninstallGsi() {
+ if (!android::base::RemoveFileIfExists(kGsiBootableFile)) {
+ return false;
+ }
+ return true;
+}
+
+bool MarkSystemAsGsi() {
+ return android::base::WriteStringToFile("1", kGsiBootedIndicatorFile);
+}
+
+} // namespace gsi
+} // namespace android