sg: drop unneeded strdup from ->errdetails() handler
[fio.git] / engines / sg.c
index 2148e87c190f8c1dfc4f648aecb99796888ca777..b924ca3e0ae2afc2cfa83ab5b124fdfea53cda4c 100644 (file)
@@ -572,17 +572,17 @@ static char *fio_sgio_errdetails(struct io_u *io_u)
        struct sg_io_hdr *hdr = &io_u->hdr;
 #define MAXERRDETAIL 1024
 #define MAXMSGCHUNK  128
-       char *msg, msgchunk[MAXMSGCHUNK], *ret = NULL;
+       char *msg, msgchunk[MAXMSGCHUNK];
        int i;
 
        msg = calloc(1, MAXERRDETAIL);
+       strcpy(msg, "");
 
        /*
         * can't seem to find sg_err.h, so I'll just echo the define values
         * so others can search on internet to find clearer clues of meaning.
         */
        if (hdr->info & SG_INFO_CHECK) {
-               ret = msg;
                if (hdr->host_status) {
                        snprintf(msgchunk, MAXMSGCHUNK, "SG Host Status: 0x%02x; ", hdr->host_status);
                        strlcat(msg, msgchunk, MAXERRDETAIL);
@@ -755,14 +755,14 @@ static char *fio_sgio_errdetails(struct io_u *io_u)
                if (hdr->resid != 0) {
                        snprintf(msgchunk, MAXMSGCHUNK, "SG Driver: %d bytes out of %d not transferred. ", hdr->resid, hdr->dxfer_len);
                        strlcat(msg, msgchunk, MAXERRDETAIL);
-                       ret = msg;
                }
        }
 
-       if (!ret)
-               ret = strdup("SG Driver did not report a Host, Driver or Device check");
+       if (!(hdr->info & SG_INFO_CHECK) && !strlen(msg))
+               strncpy(msg, "SG Driver did not report a Host, Driver or Device check",
+                       MAXERRDETAIL - 1);
 
-       return ret;
+       return msg;
 }
 
 /*