fru-device: fixup fru edit commit

Adds a number of fixups to review comments and simplifications
to the flow of the previous fru-edit commit.

Tested: Edited FRU property on nvl32-obmc
```
root@nvl32-obmc:/sys/bus/i2c/devices/4-0051# busctl introspect xyz.openbmc_project.FruDevice /xyz/openbmc_project/FruDevice/MSX4_MG1_000
NAME                                TYPE      SIGNATURE RESULT/VALUE             FLAGS
org.freedesktop.DBus.Introspectable interface -         -                        -
.Introspect                         method    -         s                        -
org.freedesktop.DBus.Peer           interface -         -                        -
.GetMachineId                       method    -         s                        -
.Ping                               method    -         -                        -
org.freedesktop.DBus.Properties     interface -         -                        -
.Get                                method    ss        v                        -
.GetAll                             method    s         a{sv}                    -
.Set                                method    ssv       -                        -
.PropertiesChanged                  signal    sa{sv}as  -                        -
xyz.openbmc_project.FruDevice       interface -         -                        -
.UpdateFruField                     method    ss        b                        -
.ADDRESS                            property  u         81                       emits-change
.BOARD_INFO_AM1                     property  s         "NULL"                   emits-change writable
.BOARD_LANGUAGE_CODE                property  s         "0"                      emits-change
.BOARD_MANUFACTURER                 property  s         "Giga Computing"         emits-change writable
.BOARD_MANUFACTURE_DATE             property  s         "20250101T000800Z"       emits-change
.BOARD_PART_NUMBER                  property  s         "123456789AB"            emits-change writable
.BOARD_PRODUCT_NAME                 property  s         "MSX4-MG1-000"           emits-change writable
.BOARD_SERIAL_NUMBER                property  s         "S2510200007"            emits-change writable
.BUS                                property  u         4                        emits-change
.CHASSIS_PART_NUMBER                property  s         "01234567"               emits-change writable
.CHASSIS_SERIAL_NUMBER              property  s         "01234567890123456789AB" emits-change writable
.CHASSIS_TYPE                       property  s         "23"                     emits-change
.Common_Format_Version              property  s         "1"                      emits-change
.PRODUCT_ASSET_TAG                  property  s         "01234567890"            emits-change writable
.PRODUCT_LANGUAGE_CODE              property  s         "0"                      emits-change
.PRODUCT_MANUFACTURER               property  s         "Giga Computing"         emits-change writable
.PRODUCT_PART_NUMBER                property  s         "000000000001"           emits-change writable
.PRODUCT_PRODUCT_NAME               property  s         "XL44-SX2-AAS1-000"      emits-change writable
.PRODUCT_SERIAL_NUMBER              property  s         "01234567890123"         emits-change writable
.PRODUCT_VERSION                    property  s         "0100"                   emits-change writable
root@nvl32-obmc:/sys/bus/i2c/devices/4-0051# busctl call xyz.openbmc_project.FruDevice /xyz/openbmc_project/FruDevice/MSX4_MG1_000 xyz.openbmc_project.FruDevice UpdateFruField ss "PRODUCT_ASSET_TAG" "12345678901234"
b true
root@nvl32-obmc:/sys/bus/i2c/devices/4-0051# busctl introspect xyz.openbmc_project.FruDevice /xyz/openbmc_project/FruDevice/MSX4_MG1_000
NAME                                TYPE      SIGNATURE RESULT/VALUE             FLAGS
org.freedesktop.DBus.Introspectable interface -         -                        -
.Introspect                         method    -         s                        -
org.freedesktop.DBus.Peer           interface -         -                        -
.GetMachineId                       method    -         s                        -
.Ping                               method    -         -                        -
org.freedesktop.DBus.Properties     interface -         -                        -
.Get                                method    ss        v                        -
.GetAll                             method    s         a{sv}                    -
.Set                                method    ssv       -                        -
.PropertiesChanged                  signal    sa{sv}as  -                        -
xyz.openbmc_project.FruDevice       interface -         -                        -
.UpdateFruField                     method    ss        b                        -
.ADDRESS                            property  u         81                       emits-change
.BOARD_INFO_AM1                     property  s         "NULL"                   emits-change writable
.BOARD_LANGUAGE_CODE                property  s         "0"                      emits-change
.BOARD_MANUFACTURER                 property  s         "Giga Computing"         emits-change writable
.BOARD_MANUFACTURE_DATE             property  s         "20250101T000800Z"       emits-change
.BOARD_PART_NUMBER                  property  s         "123456789AB"            emits-change writable
.BOARD_PRODUCT_NAME                 property  s         "MSX4-MG1-000"           emits-change writable
.BOARD_SERIAL_NUMBER                property  s         "S2510200007"            emits-change writable
.BUS                                property  u         4                        emits-change
.CHASSIS_PART_NUMBER                property  s         "01234567"               emits-change writable
.CHASSIS_SERIAL_NUMBER              property  s         "01234567890123456789AB" emits-change writable
.CHASSIS_TYPE                       property  s         "23"                     emits-change
.Common_Format_Version              property  s         "1"                      emits-change
.PRODUCT_ASSET_TAG                  property  s         "12345678901234"         emits-change writable
.PRODUCT_LANGUAGE_CODE              property  s         "0"                      emits-change
.PRODUCT_MANUFACTURER               property  s         "Giga Computing"         emits-change writable
.PRODUCT_PART_NUMBER                property  s         "000000000001"           emits-change writable
.PRODUCT_PRODUCT_NAME               property  s         "XL44-SX2-AAS1-000"      emits-change writable
.PRODUCT_SERIAL_NUMBER              property  s         "01234567890123"         emits-change writable
.PRODUCT_VERSION                    property  s         "0100"                   emits-change writable
```

Change-Id: Ic4cd7111cd4f3694faed79793e1abc98f254617b
Signed-off-by: Marc Olberding <molberding@nvidia.com>
diff --git a/src/fru_device/fru_device.cpp b/src/fru_device/fru_device.cpp
index cbd2af0..2678f90 100644
--- a/src/fru_device/fru_device.cpp
+++ b/src/fru_device/fru_device.cpp
@@ -1214,10 +1214,10 @@
 
     // Validate field length: must be 2–63 characters
     const size_t len = propertyValue.length();
-    if (len <= 1 || len > 63)
+    if (len == 1 || len > 63)
     {
-        lg2::debug(
-            "FRU field data must be between 2 and 63 characters. Invalid Length: {LEN}",
+        lg2::error(
+            "FRU field data must be 0 or between 2 and 63 characters. Invalid Length: {LEN}",
             "LEN", len);
         return false;
     }
@@ -1225,29 +1225,37 @@
     std::vector<uint8_t> fruData;
     if (!getFruData(fruData, bus, address))
     {
-        std::cerr << "Failure getting FRU Data from bus " << bus << ", address "
-                  << address << "\n";
+        lg2::error("Failure getting FRU Data from bus {BUS}, address {ADDRESS}",
+                   "BUS", bus, "ADDRESS", address);
         return false;
     }
 
     if (fruData.empty())
     {
-        std::cerr << "Empty FRU data\n";
+        lg2::error("Empty FRU data\n");
         return false;
     }
 
     // Extract area name (prefix before underscore)
-    fruAreas fruAreaToUpdate{};
     std::string areaName = propertyName.substr(0, propertyName.find('_'));
-    if (!getAreaIdx(areaName, fruAreaToUpdate))
+    auto areaIterator =
+        std::find(fruAreaNames.begin(), fruAreaNames.end(), areaName);
+    if (areaIterator == fruAreaNames.end())
     {
-        lg2::debug("Failed to get FRU area for property: {AREA}", "AREA",
+        lg2::error("Failed to get FRU area for property: {AREA}", "AREA",
                    areaName);
         return false;
     }
 
+    fruAreas fruAreaToUpdate = static_cast<fruAreas>(
+        std::distance(fruAreaNames.begin(), areaIterator));
+
     std::vector<std::vector<uint8_t>> areasData;
-    disassembleFruData(fruData, areasData);
+    if (!disassembleFruData(fruData, areasData))
+    {
+        lg2::error("Failed to disassemble Fru Data");
+        return false;
+    }
 
     std::vector<uint8_t>& areaData =
         areasData[static_cast<size_t>(fruAreaToUpdate)];
@@ -1255,7 +1263,7 @@
     {
         // If ENABLE_FRU_AREA_RESIZE is not defined then return with failure
 #ifndef ENABLE_FRU_AREA_RESIZE
-        lg2::debug(
+        lg2::error(
             "FRU area {AREA} not present and ENABLE_FRU_AREA_RESIZE is not set. "
             "Returning failure.",
             "AREA", areaName);
@@ -1263,7 +1271,7 @@
 #endif
         if (!createDummyArea(fruAreaToUpdate, areaData))
         {
-            lg2::debug("Failed to create dummy area for {AREA}", "AREA",
+            lg2::error("Failed to create dummy area for {AREA}", "AREA",
                        areaName);
             return false;
         }
@@ -1271,22 +1279,27 @@
 
     if (!setField(fruAreaToUpdate, areaData, propertyName, propertyValue))
     {
-        lg2::debug("Failed to set field value for property: {PROPERTY}",
+        lg2::error("Failed to set field value for property: {PROPERTY}",
                    "PROPERTY", propertyName);
         return false;
     }
 
-    assembleFruData(fruData, areasData);
+    if (!assembleFruData(fruData, areasData))
+    {
+        lg2::error("Failed to reassemble FRU data");
+        return false;
+    }
 
     if (fruData.empty())
     {
-        std::cerr << "FRU data is empty after assembly\n";
+        lg2::error("FRU data is empty after assembly");
         return false;
     }
 
     if (!writeFRU(static_cast<uint8_t>(bus), static_cast<uint8_t>(address),
                   fruData))
     {
+        lg2::error("Failed to write the FRU");
         return false;
     }