libchromeos: Add standard system error support to chromeos::Error

Added methods to obtain meaningful chromeos::Error values for
standard system errors returned via errno from system APIs.

Now it is easy to provide additional context error information
when working with system APIs (such as file I/O) to report underlying
reason for failures.

BUG=None
TEST=FEATURES=test emerge-test libchromeos buffet

Change-Id: I762286ed998a9dad79b9ae1905443ba22e248caa
Reviewed-on: https://chromium-review.googlesource.com/218568
Tested-by: Alex Vakulenko <avakulenko@chromium.org>
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Commit-Queue: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/buffet/commands/command_manager.cc b/buffet/commands/command_manager.cc
index db1b5e7..f43fc66 100644
--- a/buffet/commands/command_manager.cc
+++ b/buffet/commands/command_manager.cc
@@ -16,6 +16,13 @@
 
 using chromeos::dbus_utils::ExportedObjectManager;
 
+namespace {
+
+const char kCommandManagerErrorDomain[] = "Buffet_CommandManager";
+const char kCommandManagerFileReadError[] = "file_read_error";
+
+}  // namespace
+
 namespace buffet {
 
 CommandManager::CommandManager() {
@@ -88,8 +95,9 @@
     const base::FilePath& json_file_path, chromeos::ErrorPtr* error) {
   std::string json_string;
   if (!base::ReadFileToString(json_file_path, &json_string)) {
-    chromeos::Error::AddToPrintf(error, chromeos::errors::file_system::kDomain,
-                                 chromeos::errors::file_system::kFileReadError,
+    chromeos::errors::system::AddSystemError(error, errno);
+    chromeos::Error::AddToPrintf(error, kCommandManagerErrorDomain,
+                                 kCommandManagerFileReadError,
                                  "Failed to read file '%s'",
                                  json_file_path.value().c_str());
     return std::unique_ptr<const base::DictionaryValue>();