Index: platform_reader.h |
diff --git a/platform_reader.h b/platform_reader.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cd0cab2bc606a1889dd4f9dfb88ca1dceed5afa9 |
--- /dev/null |
+++ b/platform_reader.h |
@@ -0,0 +1,69 @@ |
+// Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+// |
+// Defines the PlatformReader base class. It provides a default file reading |
+// implementation that pulls in the contents of the given platform_file_path. |
+// This content is passed to a subclass-defined Process() helper which will |
+// return an int. This int should map to the anonymous enum in the |
+// PlatformReader class or to an extension to that enum in the subclass. |
+#ifndef CROS_BOOT_MODE_PLATFORM_READER_H_ |
+#define CROS_BOOT_MODE_PLATFORM_READER_H_ |
+ |
+#include <sys/types.h> |
+#include <string> |
+ |
+#include "helpers.h" |
+ |
+namespace cros_boot_mode { |
+ |
+class PlatformReader { |
+ public: |
+ enum { kUnsupported = -1 }; // All subclasses should extend this enum. |
+ PlatformReader(); |
+ virtual ~PlatformReader(); |
+ // Provides a default file reader which then calls an override-able |
+ // function for processing. Initialize must leave the class in a usable |
+ // state even on failure. |
+ virtual void Initialize(); |
+ |
+ // To be provided by the implementation |
+ |
+ // The name of the concrete class. |
+ virtual const char *name() const = 0; |
+ // c_str() should return the conversion of the given enum to a lowercase |
+ // char array with no spaces. |
+ virtual const char *c_str() const = 0; |
+ // max_size should return the maximum size that will be read. |
+ virtual size_t max_size() const = 0; |
+ // default_platform_file_path should return the char array of the |
+ // path to the file to be processed. |
+ virtual const char *default_platform_file_path() const = 0; |
+ // Called from initialize over the contents of the platform file. It |
+ // should return an int that matches either kUnsupported or an extension |
+ // of the anonymous enum. If the file does not exist, cannot be read, |
+ // or exceeds the max_size(), Process will be called with (buf, 0) arguments. |
+ virtual int Process(const char *file_contents, size_t length) = 0; |
+ |
+ // Accessors for the private value. |
+ // These are largely used for internal references, but kept in public |
+ // to allow for direct unit testing. |
+ virtual int value() const { |
+ return value_; |
+ } |
+ virtual void set_value(int value) { |
+ value_ = value; |
+ } |
+ |
+ virtual const char *platform_file_path() const; |
+ virtual void set_platform_file_path(const char *path) { |
+ platform_file_path_ = path; |
+ } |
+ |
+ private: |
+ int value_; |
+ const char *platform_file_path_; |
+}; |
+ |
+} // namespace cros_boot_mode |
+#endif // CROS_BOOT_MODE_PLATFORM_READER_H_ |