X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fcommon%2Fscpi.c;fp=hardware%2Fcommon%2Fscpi.c;h=21fa6b9592032debfdaf1197a6dd789f6559f718;hb=85b69c2b64fc3f0b0478063a983c1920bf0e30a7;hp=a3101a9c3a320057fa2068ae0bdac691057eb831;hpb=8eb10b625e77a0c4eedb865eb03ada9694ce532a;p=libsigrok.git diff --git a/hardware/common/scpi.c b/hardware/common/scpi.c index a3101a9c..21fa6b95 100644 --- a/hardware/common/scpi.c +++ b/hardware/common/scpi.c @@ -89,7 +89,7 @@ static const struct sr_scpi_dev_inst *scpi_devs[] = { #endif }; -static GSList *sr_scpi_scan_resource(struct drv_context *drvc, +static struct sr_dev_inst *sr_scpi_scan_resource(struct drv_context *drvc, const char *resource, const char *serialcomm, struct sr_dev_inst *(*probe_device)(struct sr_scpi_dev_inst *scpi)) { @@ -106,7 +106,7 @@ static GSList *sr_scpi_scan_resource(struct drv_context *drvc, }; if ((sdi = probe_device(scpi))) - return g_slist_append(NULL, sdi); + return sdi; sr_scpi_close(scpi); sr_scpi_free(scpi); @@ -116,7 +116,8 @@ static GSList *sr_scpi_scan_resource(struct drv_context *drvc, SR_PRIV GSList *sr_scpi_scan(struct drv_context *drvc, GSList *options, struct sr_dev_inst *(*probe_device)(struct sr_scpi_dev_inst *scpi)) { - GSList *resources, *l, *d, *devices = NULL; + GSList *resources, *l, *devices; + struct sr_dev_inst *sdi; const char *resource = NULL; const char *serialcomm = NULL; gchar **res; @@ -134,6 +135,7 @@ SR_PRIV GSList *sr_scpi_scan(struct drv_context *drvc, GSList *options, } } + devices = NULL; for (i = 0; i < ARRAY_SIZE(scpi_devs); i++) { if ((resource && strcmp(resource, scpi_devs[i]->prefix)) || !scpi_devs[i]->scan) @@ -141,22 +143,22 @@ SR_PRIV GSList *sr_scpi_scan(struct drv_context *drvc, GSList *options, resources = scpi_devs[i]->scan(drvc); for (l = resources; l; l = l->next) { res = g_strsplit(l->data, ":", 2); - if (res[0] && (d = sr_scpi_scan_resource(drvc, res[0], + if (res[0] && (sdi = sr_scpi_scan_resource(drvc, res[0], serialcomm ? serialcomm : res[1], probe_device))) - devices = g_slist_concat(devices, d); + devices = g_slist_append(devices, sdi); g_strfreev(res); } g_slist_free_full(resources, g_free); } - if (!devices && resource) - devices = sr_scpi_scan_resource(drvc, resource, serialcomm, - probe_device); + if (!devices && resource) { + sdi = sr_scpi_scan_resource(drvc, resource, serialcomm, probe_device); + devices = g_slist_append(NULL, sdi); + } /* Tack a copy of the newly found devices onto the driver list. */ if (devices) - drvc->instances = g_slist_concat(drvc->instances, - g_slist_copy(devices)); + drvc->instances = g_slist_concat(drvc->instances, g_slist_copy(devices)); return devices; }