]> sigrok.org Git - libsigrok.git/blobdiff - src/scpi/scpi.c
Introduce standard cleanup helper
[libsigrok.git] / src / scpi / scpi.c
index 9b5b1ea91685716d0b5e2f1bd6cc180ad7d1a96a..9f5dba43ae493a5b4558b1970186c07ddd69b417 100644 (file)
@@ -110,12 +110,16 @@ static struct sr_dev_inst *sr_scpi_scan_resource(struct drv_context *drvc,
                return NULL;
        };
 
-       if ((sdi = probe_device(scpi)))
-               return sdi;
+       sdi = probe_device(scpi);
 
        sr_scpi_close(scpi);
-       sr_scpi_free(scpi);
-       return NULL;
+
+       if (sdi)
+               sdi->status = SR_ST_INACTIVE;
+       else
+               sr_scpi_free(scpi);
+
+       return sdi;
 }
 
 SR_PRIV GSList *sr_scpi_scan(struct drv_context *drvc, GSList *options,
@@ -210,7 +214,7 @@ SR_PRIV struct sr_scpi_dev_inst *scpi_dev_inst_new(struct drv_context *drvc,
  */
 SR_PRIV int sr_scpi_open(struct sr_scpi_dev_inst *scpi)
 {
-       return scpi->open(scpi->priv);
+       return scpi->open(scpi);
 }
 
 /**
@@ -292,8 +296,10 @@ SR_PRIV int sr_scpi_send_variadic(struct sr_scpi_dev_inst *scpi,
        va_end(args_copy);
 
        /* Allocate buffer and write out command. */
-       buf = g_malloc(len + 1);
+       buf = g_malloc0(len + 2);
        vsprintf(buf, format, args);
+       if (buf[len - 1] != '\n')
+               buf[len] = '\n';
 
        /* Send command. */
        ret = scpi->send(scpi->priv, buf);
@@ -352,7 +358,7 @@ SR_PRIV int sr_scpi_read_complete(struct sr_scpi_dev_inst *scpi)
  */
 SR_PRIV int sr_scpi_close(struct sr_scpi_dev_inst *scpi)
 {
-       return scpi->close(scpi->priv);
+       return scpi->close(scpi);
 }
 
 /**
@@ -575,7 +581,7 @@ SR_PRIV int sr_scpi_get_opc(struct sr_scpi_dev_inst *scpi)
        unsigned int i;
        gboolean opc;
 
-       for (i = 0; i < SCPI_READ_RETRIES; ++i) {
+       for (i = 0; i < SCPI_READ_RETRIES; i++) {
                sr_scpi_get_bool(scpi, SCPI_CMD_OPC, &opc);
                if (opc)
                        return SR_OK;
@@ -607,7 +613,6 @@ SR_PRIV int sr_scpi_get_floatv(struct sr_scpi_dev_inst *scpi,
        gchar **ptr, **tokens;
        GArray *response_array;
 
-       ret = SR_OK;
        response = NULL;
        tokens = NULL;
 
@@ -664,7 +669,6 @@ SR_PRIV int sr_scpi_get_uint8v(struct sr_scpi_dev_inst *scpi,
        gchar **ptr, **tokens;
        GArray *response_array;
 
-       ret = SR_OK;
        response = NULL;
        tokens = NULL;