field mode: restore works on all systems

The restoreFieldModeStatus function previously read from a chip
that is not found on all systems. Changed it to read fieldmode
status using fw_printenv. Updated utils::executeCmd to return the
print output of the command it executes.

Tested:
On p10bmc running mmc chip:
- Set the fieldmode env variable to "true" and verified FieldModeEnabled
  was set to true:
root@p10bmc:~# fw_setenv fieldmode true
root@p10bmc:~# systemctl restart xyz.openbmc_project.Software.BMC.Updater.service
root@p10bmc:~# busctl introspect xyz.openbmc_project.Software.BMC.Updater /xyz/openbmc_project/software
...
xyz.openbmc_project.Control.FieldMode       interface -          -
.FieldModeEnabled                           property  b          true

- Set the fieldmode env variable to "false" (fw_setenv fieldmode false)
  and also clear the variable (fw_setenv fieldmode) and verified
  FieldModeEnabled was set to false with no error messages in the
  journal:
root@p10bmc:~# fw_setenv fieldmode
root@p10bmc:~# systemctl restart xyz.openbmc_project.Software.BMC.Updater.service
root@p10bmc:~# busctl introspect xyz.openbmc_project.Software.BMC.Updater /xyz/openbmc_project/software
...
xyz.openbmc_project.Control.FieldMode       interface -          -
.FieldModeEnabled                           property  b          false

Change-Id: Ib1b54d83f058015ff5967c445a40318a02baae92
Signed-off-by: Isaac Kurth <blisaac91@gmail.com>
Signed-off-by: Adriana Kobylak <anoo@linux.ibm.com>
diff --git a/item_updater.cpp b/item_updater.cpp
index 96782f2..2fdbc31 100644
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -602,11 +602,20 @@
 
 void ItemUpdater::restoreFieldModeStatus()
 {
-    std::ifstream input("/dev/mtd/u-boot-env");
-    std::string envVar;
-    std::getline(input, envVar);
+    // The fieldmode u-boot environment variable may not exist since it is not
+    // part of the default environment, run fw_printenv with 2>&1 to ignore the
+    // error message in the journal "Error: "fieldmode" not defined"
+    std::pair<int, std::string> ret =
+        utils::execute("/sbin/fw_printenv", "-n", "fieldmode", "2>&1");
 
-    if (envVar.find("fieldmode=true") != std::string::npos)
+    if (ret.first != 0)
+    {
+        return;
+    }
+
+    // truncate any extra characters off the end to compare against a "true" str
+    std::string result = ret.second.substr(0, 4);
+    if (result == "true")
     {
         ItemUpdater::fieldModeEnabled(true);
     }