common: move asyncSystem() to common

asyncSystem() is shared across updaters, so moved to common.

Change-Id: I3545d34ecc1f1bf8a226d020267ae00bcf42c5f9
Signed-off-by: Kevin Tung <Kevin.Tung@quantatw.com>
diff --git a/bios/spi_device.cpp b/bios/spi_device.cpp
index a1b1f49..1af1e66 100644
--- a/bios/spi_device.cpp
+++ b/bios/spi_device.cpp
@@ -4,6 +4,7 @@
 #include "common/include/device.hpp"
 #include "common/include/host_power.hpp"
 #include "common/include/software_manager.hpp"
+#include "common/include/utils.hpp"
 
 #include <gpiod.hpp>
 #include <phosphor-logging/lg2.hpp>
@@ -273,17 +274,15 @@
         {
             if (tool == flashToolFlashrom)
             {
-                const int status =
-                    co_await SPIDevice::writeSPIFlashWithFlashrom(image,
-                                                                  image_size);
-                if (status != 0)
+                success = co_await SPIDevice::writeSPIFlashWithFlashrom(
+                    image, image_size);
+                if (!success)
                 {
                     error(
-                        "Error writing to SPI flash {CONTROLLERINDEX}:{DEVICEINDEX}, exit code {EXITCODE}",
+                        "Error writing to SPI flash {CONTROLLERINDEX}:{DEVICEINDEX}",
                         "CONTROLLERINDEX", spiControllerIndex, "DEVICEINDEX",
-                        spiDeviceIndex, "EXITCODE", status);
+                        spiDeviceIndex);
                 }
-                success = (status == 0);
             }
             else if (tool == flashToolFlashcp)
             {
@@ -318,50 +317,7 @@
     co_return success;
 }
 
-sdbusplus::async::task<int> asyncSystem(sdbusplus::async::context& ctx,
-                                        const std::string& cmd)
-{
-    int pipefd[2];
-    if (pipe(pipefd) == -1)
-    {
-        perror("pipe");
-        co_return -1;
-    }
-
-    pid_t pid = fork();
-    if (pid == -1)
-    {
-        perror("fork");
-        close(pipefd[0]);
-        close(pipefd[1]);
-        co_return -1;
-    }
-    else if (pid == 0)
-    {
-        close(pipefd[0]);
-        int exitCode = std::system(cmd.c_str());
-
-        ssize_t status = write(pipefd[1], &exitCode, sizeof(exitCode));
-        close(pipefd[1]);
-        exit((status == sizeof(exitCode)) ? 0 : 1);
-    }
-    else
-    {
-        close(pipefd[1]);
-
-        sdbusplus::async::fdio pipe_fdio(ctx, pipefd[0]);
-
-        co_await pipe_fdio.next();
-
-        int status;
-        waitpid(pid, &status, 0);
-        close(pipefd[0]);
-
-        co_return WEXITSTATUS(status);
-    }
-}
-
-sdbusplus::async::task<int> SPIDevice::writeSPIFlashWithFlashrom(
+sdbusplus::async::task<bool> SPIDevice::writeSPIFlashWithFlashrom(
     const uint8_t* image, size_t image_size) const
 {
     // randomize the name to enable parallel updates
@@ -424,11 +380,11 @@
 
     debug("[flashrom] running {CMD}", "CMD", cmd);
 
-    const int exitCode = co_await asyncSystem(ctx, cmd);
+    auto success = co_await asyncSystem(ctx, cmd);
 
     std::filesystem::remove(path);
 
-    co_return exitCode;
+    co_return success;
 }
 
 sdbusplus::async::task<bool> SPIDevice::writeSPIFlashWithFlashcp(
@@ -470,11 +426,11 @@
 
     debug("running {CMD}", "CMD", cmd);
 
-    const int exitCode = co_await asyncSystem(ctx, cmd);
+    auto success = co_await asyncSystem(ctx, cmd);
 
     std::filesystem::remove(path);
 
-    co_return exitCode == 0;
+    co_return success;
 }
 
 sdbusplus::async::task<bool> SPIDevice::writeSPIFlashDefault(
diff --git a/bios/spi_device.hpp b/bios/spi_device.hpp
index 25a53d1..63e7956 100644
--- a/bios/spi_device.hpp
+++ b/bios/spi_device.hpp
@@ -110,8 +110,8 @@
     // Intel Flash Descriptor
     // @param image           the component image
     // @param image_size      size of 'image'
-    // @returns               0 on success
-    sdbusplus::async::task<int> writeSPIFlashWithFlashrom(
+    // @returns               true on success
+    sdbusplus::async::task<bool> writeSPIFlashWithFlashrom(
         const uint8_t* image, size_t image_size) const;
 
     // @description preconditions: