Merge "screen_ui: Drop the dependency on common.h." am: 738a4258d8
am: 30f2775b37

Change-Id: Id553c1f1de86fa292c0327f6fcc00fb8cd17bec3
diff --git a/recovery.cpp b/recovery.cpp
index 4259c83..f820373 100644
--- a/recovery.cpp
+++ b/recovery.cpp
@@ -820,7 +820,7 @@
         std::bind(&Device::HandleMenuKey, device, std::placeholders::_1, std::placeholders::_2));
     if (entries[chosen_item] == "Back") break;
 
-    ui->ShowFile(entries[chosen_item].c_str());
+    ui->ShowFile(entries[chosen_item]);
   }
 }
 
diff --git a/screen_ui.cpp b/screen_ui.cpp
index aaeb18c..00ed45d 100644
--- a/screen_ui.cpp
+++ b/screen_ui.cpp
@@ -42,7 +42,6 @@
 #include <android-base/strings.h>
 #include <minui/minui.h>
 
-#include "common.h"
 #include "device.h"
 #include "ui.h"
 
@@ -951,10 +950,10 @@
   }
 }
 
-void ScreenRecoveryUI::ShowFile(const char* filename) {
-  FILE* fp = fopen_path(filename, "re");
-  if (fp == nullptr) {
-    Print("  Unable to open %s: %s\n", filename, strerror(errno));
+void ScreenRecoveryUI::ShowFile(const std::string& filename) {
+  std::unique_ptr<FILE, decltype(&fclose)> fp(fopen(filename.c_str(), "re"), fclose);
+  if (!fp) {
+    Print("  Unable to open %s: %s\n", filename.c_str(), strerror(errno));
     return;
   }
 
@@ -966,8 +965,7 @@
   text_ = file_viewer_text_;
   ClearText();
 
-  ShowFile(fp);
-  fclose(fp);
+  ShowFile(fp.get());
 
   text_ = old_text;
   text_col_ = old_text_col;
diff --git a/screen_ui.h b/screen_ui.h
index 837d346..986959c 100644
--- a/screen_ui.h
+++ b/screen_ui.h
@@ -133,7 +133,7 @@
   // printing messages
   void Print(const char* fmt, ...) override __printflike(2, 3);
   void PrintOnScreenOnly(const char* fmt, ...) override __printflike(2, 3);
-  void ShowFile(const char* filename) override;
+  void ShowFile(const std::string& filename) override;
 
   // menu display
   int ShowMenu(const char* const* headers, const char* const* items, int initial_selection,
diff --git a/stub_ui.h b/stub_ui.h
index 3c36fcf..362aab4 100644
--- a/stub_ui.h
+++ b/stub_ui.h
@@ -17,6 +17,9 @@
 #ifndef RECOVERY_STUB_UI_H
 #define RECOVERY_STUB_UI_H
 
+#include <functional>
+#include <string>
+
 #include "ui.h"
 
 // Stub implementation of RecoveryUI for devices without screen.
@@ -51,7 +54,7 @@
     va_end(ap);
   }
   void PrintOnScreenOnly(const char* /* fmt */, ...) override {}
-  void ShowFile(const char* /* filename */) override {}
+  void ShowFile(const std::string& /* filename */) override {}
 
   // menu display
   int ShowMenu(const char* const* /* headers */, const char* const* /* items */,
diff --git a/ui.h b/ui.h
index 636c2ff..c468992 100644
--- a/ui.h
+++ b/ui.h
@@ -88,7 +88,9 @@
   virtual void Print(const char* fmt, ...) __printflike(2, 3) = 0;
   virtual void PrintOnScreenOnly(const char* fmt, ...) __printflike(2, 3) = 0;
 
-  virtual void ShowFile(const char* filename) = 0;
+  // Shows the contents of the given file. Caller ensures the patition that contains the file has
+  // been mounted.
+  virtual void ShowFile(const std::string& filename) = 0;
 
   // --- key handling ---