Use mapper binding for busname queries

Prefer mapper queries to hardcoded busnames.
React to /org/openbmc/managers/system GetObjectById
API change.

Change-Id: I651b820622c3bff51c05365b811b41e73fde997c
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/writefrudata.C b/writefrudata.C
index 6791148..ee94d79 100644
--- a/writefrudata.C
+++ b/writefrudata.C
@@ -11,11 +11,11 @@
 #include <algorithm>
 #include <fstream>
 #include <sstream>
+#include <mapper.h>
 #include "frup.h"
 #include "fru-area.H"
 
 // OpenBMC System Manager dbus framework
-const char  *sys_bus_name      =  "org.openbmc.managers.System";
 const char  *sys_object_name   =  "/org/openbmc/managers/System";
 const char  *sys_intf_name     =  "org.openbmc.managers.System";
 
@@ -171,14 +171,23 @@
     int rc = 0;
 
     // What we need is BOARD_1, PRODUCT_1, CHASSIS_1 etc..
-    char *inv_bus_name, *inv_obj_path, *inv_intf_name;
+    char *inv_bus_name = NULL, *inv_obj_path, *inv_intf_name;
     char fru_area_name[16] = {0};
+    char *sys_bus_name = NULL;
     sprintf(fru_area_name,"%s%d",iv_name.c_str(), iv_fruid);
 
 #ifdef __IPMI_DEBUG__
     printf("Getting sd_bus for :[%s]\n",fru_area_name);
 #endif
 
+    rc = mapper_get_service(iv_bus_type, sys_object_name, &sys_bus_name);
+    if(rc < 0)
+    {
+        fprintf(stderr, "Failed to get system manager service:[%s]\n",
+                strerror(-rc));
+        goto exit;
+    }
+
     // We want to call a method "getObjectFromId" on System Bus that is
     // made available over  OpenBmc system services.
 
@@ -198,26 +207,35 @@
     }
     else
     {
-        // Method getObjectFromId returns 3 parameters and all are strings, namely
-        // bus_name , object_path and interface name for accessing that particular
-        // FRU over Inventory SDBUS manager. 'sss' here mentions that format.
-        rc = sd_bus_message_read(response, "(sss)", &inv_bus_name, &inv_obj_path, &inv_intf_name);
+        // Method getObjectFromId returns 2 parameters and all are strings, namely
+        // object_path and interface name for accessing that particular
+        // FRU over Inventory SDBUS manager. 'ss' here mentions that format.
+        rc = sd_bus_message_read(response, "(ss)", &inv_obj_path, &inv_intf_name);
         if(rc < 0)
         {
             fprintf(stderr, "Failed to parse response message:[%s]\n", strerror(-rc));
         }
         else
         {
+            rc = mapper_get_service(iv_bus_type, inv_obj_path, &inv_bus_name);
+            if(rc < 0)
+            {
+                fprintf(stderr, "Failed to get inventory item service:[%s]\n",
+                        strerror(-rc));
+                goto exit;
+            }
             // Update the paths in the area object
             update_dbus_paths(inv_bus_name, inv_obj_path, inv_intf_name);
         }
     }
 
+exit:
 #ifdef __IPMI_DEBUG__
             printf("fru_area=[%s], inv_bus_name=[%s], inv_obj_path=[%s], inv_intf_name=[%s]\n",
                     fru_area_name, inv_bus_name, inv_obj_path, inv_intf_name);
 #endif
 
+    free(sys_bus_name);
     sd_bus_error_free(&bus_error);
     sd_bus_message_unref(response);
 
@@ -578,11 +596,20 @@
     sd_bus_message *response = NULL;
     int rc = 0;
     char *areas = NULL;
+    char *sys_bus_name = NULL;
 
 #ifdef __IPMI_DEBUG__
     printf("Getting fru areas defined in Skeleton for :[%d]\n", fruid);
 #endif
 
+    rc = mapper_get_service(bus_type, sys_object_name, &sys_bus_name);
+    if(rc < 0)
+    {
+        fprintf(stderr, "Failed to get system manager service:[%s]\n",
+                strerror(-rc));
+        goto exit;
+    }
+
     // We want to call a method "getFRUArea" on System Bus that is
     // made available over OpenBmc system services.
     rc = sd_bus_call_method(bus_type,                   // On the System Bus
@@ -626,6 +653,9 @@
         }
     }
 
+exit:
+
+    free(sys_bus_name);
     sd_bus_error_free(&bus_error);
     sd_bus_message_unref(response);