Set error code for getFruPathFromJson API

This commit updates getFruPathFromJson API to set error code in case of
error. This helps caller of API to take action based on the error code
returned from the API.

Change-Id: I66f22e997119bc93ad3ae88e21c4d4d6e8951c3f
Signed-off-by: Rekha Aparna <vrekhaaparna@ibm.com>
diff --git a/vpd-manager/src/backup_restore.cpp b/vpd-manager/src/backup_restore.cpp
index 89d7d2a..0a8d844 100644
--- a/vpd-manager/src/backup_restore.cpp
+++ b/vpd-manager/src/backup_restore.cpp
@@ -154,10 +154,30 @@
         return;
     }
 
+    uint16_t l_errCode = 0;
+
     const std::string l_srcFruPath =
-        jsonUtility::getFruPathFromJson(m_sysCfgJsonObj, i_srcPath);
+        jsonUtility::getFruPathFromJson(m_sysCfgJsonObj, i_srcPath, l_errCode);
+
+    if (l_errCode)
+    {
+        logging::logMessage(
+            "Failed to get source FRU path for [" + i_srcPath +
+            "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode));
+        return;
+    }
+
     const std::string l_dstFruPath =
-        jsonUtility::getFruPathFromJson(m_sysCfgJsonObj, i_dstPath);
+        jsonUtility::getFruPathFromJson(m_sysCfgJsonObj, i_dstPath, l_errCode);
+
+    if (l_errCode)
+    {
+        logging::logMessage(
+            "Failed to get destination FRU path for [" + i_dstPath +
+            "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode));
+        return;
+    }
+
     if (l_srcFruPath.empty() || l_dstFruPath.empty())
     {
         logging::logMessage(
@@ -165,7 +185,6 @@
         return;
     }
 
-    uint16_t l_errCode = 0;
     const std::string l_srcInvPath = jsonUtility::getInventoryObjPathFromJson(
         m_sysCfgJsonObj, i_srcPath, l_errCode);
 
diff --git a/vpd-manager/src/manager.cpp b/vpd-manager/src/manager.cpp
index d7b512d..27b1f63 100644
--- a/vpd-manager/src/manager.cpp
+++ b/vpd-manager/src/manager.cpp
@@ -172,6 +172,7 @@
         return -1;
     }
 
+    uint16_t l_errCode = 0;
     types::Path l_fruPath;
     nlohmann::json l_sysCfgJsonObj{};
 
@@ -182,13 +183,20 @@
         // Get the EEPROM path
         if (!l_sysCfgJsonObj.empty())
         {
-            l_fruPath =
-                jsonUtility::getFruPathFromJson(l_sysCfgJsonObj, i_vpdPath);
+            l_fruPath = jsonUtility::getFruPathFromJson(l_sysCfgJsonObj,
+                                                        i_vpdPath, l_errCode);
         }
     }
 
     if (l_fruPath.empty())
     {
+        if (l_errCode)
+        {
+            logging::logMessage(
+                "Failed to get FRU path from JSON for [" + i_vpdPath +
+                "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode));
+        }
+
         l_fruPath = i_vpdPath;
     }
 
diff --git a/vpd-manager/src/worker.cpp b/vpd-manager/src/worker.cpp
index b5b3780..04f060f 100644
--- a/vpd-manager/src/worker.cpp
+++ b/vpd-manager/src/worker.cpp
@@ -1688,8 +1688,18 @@
         throw std::runtime_error("Given DBus object path is empty.");
     }
 
+    uint16_t l_errCode = 0;
     const std::string& l_fruPath =
-        jsonUtility::getFruPathFromJson(m_parsedJson, i_dbusObjPath);
+        jsonUtility::getFruPathFromJson(m_parsedJson, i_dbusObjPath, l_errCode);
+
+    if (l_errCode)
+    {
+        logging::logMessage(
+            "Failed to get FRU path for inventory path [" + i_dbusObjPath +
+            "], error : " + vpdSpecificUtility::getErrCodeMsg(l_errCode) +
+            " Aborting FRU VPD deletion.");
+        return;
+    }
 
     try
     {
@@ -1922,6 +1932,8 @@
     const sdbusplus::message::object_path& i_dbusObjPath)
 {
     std::string l_fruPath{};
+    uint16_t l_errCode = 0;
+
     try
     {
         // Check if system config JSON is present
@@ -1934,11 +1946,21 @@
         }
 
         // Get FRU path for the given D-bus object path from JSON
-        l_fruPath =
-            jsonUtility::getFruPathFromJson(m_parsedJson, i_dbusObjPath);
+        l_fruPath = jsonUtility::getFruPathFromJson(m_parsedJson, i_dbusObjPath,
+                                                    l_errCode);
 
         if (l_fruPath.empty())
         {
+            if (l_errCode)
+            {
+                logging::logMessage(
+                    "Failed to get FRU path for [" +
+                    std::string(i_dbusObjPath) + "], error : " +
+                    vpdSpecificUtility::getErrCodeMsg(l_errCode) +
+                    " Aborting single FRU VPD collection.");
+                return;
+            }
+
             logging::logMessage(
                 "D-bus object path not present in JSON. Single FRU VPD collection is not performed for " +
                 std::string(i_dbusObjPath));