fru-device: retry with bytewise read

certain powersupplies, e.g. SuperMicro PWS-920P-SQ
require that their FRU eeprom be read bytewise.
otherwise, only garbage is read.

Tested: on Tyan S8030 board. FRU eeprom is now read correctly.

Change-Id: I36a0ce8d8f955d4fe3867dbd63fefda63b1a9b13
Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>
diff --git a/src/fru_utils.cpp b/src/fru_utils.cpp
index ab3283b..0bb92b9 100644
--- a/src/fru_utils.cpp
+++ b/src/fru_utils.cpp
@@ -743,15 +743,15 @@
     return false;
 }
 
-std::vector<uint8_t> readFRUContents(FRUReader& reader,
-                                     const std::string& errorHelp)
+std::pair<std::vector<uint8_t>, bool>
+    readFRUContents(FRUReader& reader, const std::string& errorHelp)
 {
     std::array<uint8_t, I2C_SMBUS_BLOCK_MAX> blockData{};
     off_t baseOffset = 0x0;
 
     if (!findFRUHeader(reader, errorHelp, blockData, baseOffset))
     {
-        return {};
+        return {{}, false};
     }
 
     std::vector<uint8_t> device;
@@ -779,7 +779,7 @@
         {
             std::cerr << "Fru area offsets are not in required order as per "
                          "Section 17 of Fru specification\n";
-            return {};
+            return {{}, true};
         }
         prevOffset = areaOffset;
 
@@ -797,7 +797,7 @@
         {
             std::cerr << "failed to read " << errorHelp << " base offset "
                       << baseOffset << "\n";
-            return {};
+            return {{}, true};
         }
 
         // Ignore data type (blockData is already unsigned).
@@ -827,7 +827,7 @@
             {
                 std::cerr << "failed to read " << errorHelp << " base offset "
                           << baseOffset << "\n";
-                return {};
+                return {{}, true};
             }
 
             // Ok, let's check the record length, which is in bytes (unsigned,
@@ -859,7 +859,7 @@
         {
             std::cerr << "failed to read " << errorHelp << " base offset "
                       << baseOffset << "\n";
-            return {};
+            return {{}, true};
         }
 
         device.insert(device.end(), blockData.begin(),
@@ -869,7 +869,7 @@
         fruLength -= std::min(requestLength, fruLength);
     }
 
-    return device;
+    return {device, true};
 }
 
 unsigned int getHeaderAreaFieldOffset(fruAreas area)