• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include <vector>
14 
15 #include <brillo/brillo_export.h>
16 #include <brillo/key_value_store.h>
17 #include <gtest/gtest_prod.h>
18 
19 namespace brillo {
20 
21 class BRILLO_EXPORT OsReleaseReader final {
22  public:
23   // Create an empty reader
24   OsReleaseReader() = default;
25 
26   // Loads the key=value pairs from either /etc/os-release.d/<KEY> or
27   // /etc/os-release.
28   void Load();
29 
30   // Same as the private Load method.
31   // This need to be public so that services can use it in testing mode (for
32   // autotest tests for example).
33   // This should not be used in production so suffix it with TestingOnly to
34   // make it obvious.
35   void LoadTestingOnly(const base::FilePath& root_dir);
36 
37   // Getter for the given key. Returns whether the key was found on the store.
38   bool GetString(const std::string& key, std::string* value) const;
39 
40   // Getter for all the keys in /etc/os-release.
41   std::vector<std::string> GetKeys() const;
42 
43  private:
44   // The map storing all the key-value pairs.
45   KeyValueStore store_;
46 
47   // os-release can be lazily loaded if need be.
48   bool initialized_;
49 
50   // Load the data from a given root_dir.
51   BRILLO_PRIVATE void Load(const base::FilePath& root_dir);
52 
53   DISALLOW_COPY_AND_ASSIGN(OsReleaseReader);
54 };
55 
56 }  // namespace brillo
57 
58 #endif  // LIBBRILLO_BRILLO_OSRELEASE_READER_H_
59