Home | History | Annotate | Download | only in brillo
      1 // Copyright 2014 The Chromium OS Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Wrapper around /etc/os-release and /etc/os-release.d.
      6 // Standard fields can come from both places depending on how we set them. They
      7 // should always be accessed through this interface.
      8 
      9 #ifndef LIBBRILLO_BRILLO_OSRELEASE_READER_H_
     10 #define LIBBRILLO_BRILLO_OSRELEASE_READER_H_
     11 
     12 #include <string>
     13 
     14 #include <brillo/brillo_export.h>
     15 #include <brillo/key_value_store.h>
     16 #include <gtest/gtest_prod.h>
     17 
     18 namespace brillo {
     19 
     20 class BRILLO_EXPORT OsReleaseReader final {
     21  public:
     22   // Create an empty reader
     23   OsReleaseReader() = default;
     24 
     25   // Loads the key=value pairs from either /etc/os-release.d/<KEY> or
     26   // /etc/os-release.
     27   void Load();
     28 
     29   // Same as the private Load method.
     30   // This need to be public so that services can use it in testing mode (for
     31   // autotest tests for example).
     32   // This should not be used in production so suffix it with TestingOnly to
     33   // make it obvious.
     34   void LoadTestingOnly(const base::FilePath& root_dir);
     35 
     36   // Getter for the given key. Returns whether the key was found on the store.
     37   bool GetString(const std::string& key, std::string* value) const;
     38 
     39  private:
     40   // The map storing all the key-value pairs.
     41   KeyValueStore store_;
     42 
     43   // os-release can be lazily loaded if need be.
     44   bool initialized_;
     45 
     46   // Load the data from a given root_dir.
     47   BRILLO_PRIVATE void Load(const base::FilePath& root_dir);
     48 
     49   DISALLOW_COPY_AND_ASSIGN(OsReleaseReader);
     50 };
     51 
     52 }  // namespace brillo
     53 
     54 #endif  // LIBBRILLO_BRILLO_OSRELEASE_READER_H_
     55