blob: f29c14d9092c9cb39db78ff61602072314b8012f [file] [log] [blame]
Bertrand SIMONNET601ecf82014-10-06 13:14:27 -07001// 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
Alex Vakulenkofed60b02015-10-27 09:53:05 -07009#ifndef LIBBRILLO_BRILLO_OSRELEASE_READER_H_
10#define LIBBRILLO_BRILLO_OSRELEASE_READER_H_
Bertrand SIMONNET601ecf82014-10-06 13:14:27 -070011
12#include <string>
13
Alex Vakulenko9ed0cab2015-10-12 15:21:28 -070014#include <brillo/brillo_export.h>
15#include <brillo/key_value_store.h>
Bertrand SIMONNET601ecf82014-10-06 13:14:27 -070016#include <gtest/gtest_prod.h>
17
Alex Vakulenko9ed0cab2015-10-12 15:21:28 -070018namespace brillo {
Bertrand SIMONNET601ecf82014-10-06 13:14:27 -070019
Alex Vakulenko9ed0cab2015-10-12 15:21:28 -070020class BRILLO_EXPORT OsReleaseReader final {
Bertrand SIMONNET601ecf82014-10-06 13:14:27 -070021 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.
Nathan Bullock18da7772014-10-17 10:03:52 -040027 void Load();
Bertrand SIMONNET601ecf82014-10-06 13:14:27 -070028
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.
Nathan Bullock18da7772014-10-17 10:03:52 -040034 void LoadTestingOnly(const base::FilePath& root_dir);
Bertrand SIMONNET601ecf82014-10-06 13:14:27 -070035
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
Nathan Bullock18da7772014-10-17 10:03:52 -040046 // Load the data from a given root_dir.
Alex Vakulenko9ed0cab2015-10-12 15:21:28 -070047 BRILLO_PRIVATE void Load(const base::FilePath& root_dir);
Bertrand SIMONNET601ecf82014-10-06 13:14:27 -070048
49 DISALLOW_COPY_AND_ASSIGN(OsReleaseReader);
50};
51
Alex Vakulenko9ed0cab2015-10-12 15:21:28 -070052} // namespace brillo
Bertrand SIMONNET601ecf82014-10-06 13:14:27 -070053
Alex Vakulenkofed60b02015-10-27 09:53:05 -070054#endif // LIBBRILLO_BRILLO_OSRELEASE_READER_H_