scpi: style nits in sr_scpi_scan(), prefer common helper
authorGerhard Sittig <gerhard.sittig@gmx.net>
Sat, 22 May 2021 10:53:34 +0000 (12:53 +0200)
committerGerhard Sittig <gerhard.sittig@gmx.net>
Tue, 1 Jun 2021 06:20:59 +0000 (08:20 +0200)
Improve readability and simplify maintenance of the sr_scpi_scan()
routine.

Move initial assignment and subsequent update of variables in closer
proximity, don't hide assignments in declaration blocks. Use common
helper code where available. Split complex conditions into individual
terms which are easier to review and reason about. Don't mix calls and
value checks and flow control in the same statement.

src/scpi/scpi.c

index ec0ddc555c73b37b6cdec6799ecf9573fee3534c..0e74b32901f10e21b4a657d2ddebd57dbd401957 100644 (file)
@@ -315,33 +315,32 @@ SR_PRIV GSList *sr_scpi_scan(struct drv_context *drvc, GSList *options,
 {
        GSList *resources, *l, *devices;
        struct sr_dev_inst *sdi;
-       const char *resource = NULL;
-       const char *serialcomm = NULL;
+       const char *resource, *conn;
+       const char *serialcomm, *comm;
        gchar **res;
        unsigned i;
 
-       for (l = options; l; l = l->next) {
-               struct sr_config *src = l->data;
-               switch (src->key) {
-               case SR_CONF_CONN:
-                       resource = g_variant_get_string(src->data, NULL);
-                       break;
-               case SR_CONF_SERIALCOMM:
-                       serialcomm = g_variant_get_string(src->data, NULL);
-                       break;
-               }
-       }
+       resource = NULL;
+       serialcomm = NULL;
+       (void)sr_serial_extract_options(options, &resource, &serialcomm);
 
        devices = NULL;
        for (i = 0; i < ARRAY_SIZE(scpi_devs); i++) {
-               if ((resource && strcmp(resource, scpi_devs[i]->prefix))
-                   || !scpi_devs[i]->scan)
+               if (resource && strcmp(resource, scpi_devs[i]->prefix) != 0)
+                       continue;
+               if (!scpi_devs[i]->scan)
                        continue;
                resources = scpi_devs[i]->scan(drvc);
                for (l = resources; l; l = l->next) {
                        res = g_strsplit(l->data, ":", 2);
-                       if (res[0] && (sdi = sr_scpi_scan_resource(drvc, res[0],
-                                      serialcomm ? serialcomm : res[1], probe_device))) {
+                       if (!res[0]) {
+                               g_strfreev(res);
+                               continue;
+                       }
+                       conn = res[0];
+                       comm = serialcomm ? : res[1];
+                       sdi = sr_scpi_scan_resource(drvc, conn, comm, probe_device);
+                       if (sdi) {
                                devices = g_slist_append(devices, sdi);
                                sdi->connection_id = g_strdup(l->data);
                        }