From eee9003f64a5f498dcf362bc7f659e434fd72051 Mon Sep 17 00:00:00 2001
From: dpgilbert <dpgilbert@4ea69e1a-61f1-4043-bf83-b5c94c648137>
Date: Fri, 14 Nov 2003 05:28:14 +0000
Subject: [PATCH] pout() seems to print one line per invocation (without a
 newline) in logs. So build up scsi command string prior to giving to pout()

git-svn-id: https://smartmontools.svn.sourceforge.net/svnroot/smartmontools/trunk@1223 4ea69e1a-61f1-4043-bf83-b5c94c648137
---
 sm5/os_linux.c   | 18 +++++++++++-------
 sm5/os_linux.cpp | 18 +++++++++++-------
 2 files changed, 22 insertions(+), 14 deletions(-)

diff --git a/sm5/os_linux.c b/sm5/os_linux.c
index f25a0c5e2..ea1da5c52 100644
--- a/sm5/os_linux.c
+++ b/sm5/os_linux.c
@@ -60,7 +60,7 @@
 #include "smartd.h"
 #include "utility.h"
 
-const char *os_XXXX_c_cvsid="$Id: os_linux.c,v 1.25 2003/11/12 02:13:34 ballen4705 Exp $" \
+const char *os_XXXX_c_cvsid="$Id: os_linux.c,v 1.26 2003/11/14 05:28:14 dpgilbert Exp $" \
 ATACMDS_H_CVSID CONFIG_H_CVSID OS_XXXX_H_CVSID SCSICMDS_H_CVSID SMARTD_H_CVSID UTILITY_H_CVSID;
 
 // to hold onto exit code for atexit routine
@@ -466,24 +466,28 @@ int do_scsi_cmnd_io(int dev_fd, struct scsi_cmnd_io * iop, int report)
     memcpy(wrk.buff, iop->cmnd, iop->cmnd_len);
     buff_offset = iop->cmnd_len;
     if (report > 0) {
-        int k;
+        int k, j;
         const unsigned char * ucp = iop->cmnd;
         const char * np;
+        char buff[256];
+        const size_t sz = sizeof(buff);
 
         np = scsi_get_opcode_name(ucp[0]);
-        pout(" [%s: ", np ? np : "<unknown opcode>");
+        j = snprintf(buff, sz, " [%s: ", np ? np : "<unknown opcode>");
         for (k = 0; k < iop->cmnd_len; ++k)
-            pout("%02x ", ucp[k]);
+            j += snprintf(&buff[j], (sz > j ? (sz - j) : 0), "%02x ", ucp[k]);
         if ((report > 1) && 
             (DXFER_TO_DEVICE == iop->dxfer_dir) && (iop->dxferp)) {
             int trunc = (iop->dxfer_len > 256) ? 1 : 0;
 
-            pout("]\n  Outgoing data, len=%d%s:\n", (int)iop->dxfer_len,
-                 (trunc ? " [only first 256 bytes shown]" : ""));
+            j += snprintf(&buff[j], (sz > j ? (sz - j) : 0), "]\n  Outgoing "
+                          "data, len=%d%s:\n", (int)iop->dxfer_len,
+                          (trunc ? " [only first 256 bytes shown]" : ""));
             dStrHex(iop->dxferp, (trunc ? 256 : iop->dxfer_len) , 1);
         }
         else
-            pout("]");
+            j += snprintf(&buff[j], (sz > j ? (sz - j) : 0), "]\n");
+        pout(buff);
     }
     switch (iop->dxfer_dir) {
         case DXFER_NONE:
diff --git a/sm5/os_linux.cpp b/sm5/os_linux.cpp
index 2411d71ee..d7e2acd6e 100644
--- a/sm5/os_linux.cpp
+++ b/sm5/os_linux.cpp
@@ -60,7 +60,7 @@
 #include "smartd.h"
 #include "utility.h"
 
-const char *os_XXXX_c_cvsid="$Id: os_linux.cpp,v 1.25 2003/11/12 02:13:34 ballen4705 Exp $" \
+const char *os_XXXX_c_cvsid="$Id: os_linux.cpp,v 1.26 2003/11/14 05:28:14 dpgilbert Exp $" \
 ATACMDS_H_CVSID CONFIG_H_CVSID OS_XXXX_H_CVSID SCSICMDS_H_CVSID SMARTD_H_CVSID UTILITY_H_CVSID;
 
 // to hold onto exit code for atexit routine
@@ -466,24 +466,28 @@ int do_scsi_cmnd_io(int dev_fd, struct scsi_cmnd_io * iop, int report)
     memcpy(wrk.buff, iop->cmnd, iop->cmnd_len);
     buff_offset = iop->cmnd_len;
     if (report > 0) {
-        int k;
+        int k, j;
         const unsigned char * ucp = iop->cmnd;
         const char * np;
+        char buff[256];
+        const size_t sz = sizeof(buff);
 
         np = scsi_get_opcode_name(ucp[0]);
-        pout(" [%s: ", np ? np : "<unknown opcode>");
+        j = snprintf(buff, sz, " [%s: ", np ? np : "<unknown opcode>");
         for (k = 0; k < iop->cmnd_len; ++k)
-            pout("%02x ", ucp[k]);
+            j += snprintf(&buff[j], (sz > j ? (sz - j) : 0), "%02x ", ucp[k]);
         if ((report > 1) && 
             (DXFER_TO_DEVICE == iop->dxfer_dir) && (iop->dxferp)) {
             int trunc = (iop->dxfer_len > 256) ? 1 : 0;
 
-            pout("]\n  Outgoing data, len=%d%s:\n", (int)iop->dxfer_len,
-                 (trunc ? " [only first 256 bytes shown]" : ""));
+            j += snprintf(&buff[j], (sz > j ? (sz - j) : 0), "]\n  Outgoing "
+                          "data, len=%d%s:\n", (int)iop->dxfer_len,
+                          (trunc ? " [only first 256 bytes shown]" : ""));
             dStrHex(iop->dxferp, (trunc ? 256 : iop->dxfer_len) , 1);
         }
         else
-            pout("]");
+            j += snprintf(&buff[j], (sz > j ? (sz - j) : 0), "]\n");
+        pout(buff);
     }
     switch (iop->dxfer_dir) {
         case DXFER_NONE:
-- 
GitLab