]> sigrok.org Git - libsigrok.git/commitdiff
sr_driver_scan(): Improve checks.
authorUwe Hermann <redacted>
Mon, 28 Jan 2013 19:00:54 +0000 (20:00 +0100)
committerUwe Hermann <redacted>
Tue, 29 Jan 2013 11:56:02 +0000 (12:56 +0100)
Check the relevant arguments for != NULL before calling the actual
driver-specific function, so that the driver can safely assume those
arguments are non-NULL. This removes the need to duplicate these
checks in every driver.

Also, do some minor whitespace and consistency improvements.

13 files changed:
hardware/asix-sigma/asix-sigma.c
hardware/chronovu-la8/api.c
hardware/colead-slm/api.c
hardware/demo/demo.c
hardware/hantek-dso/api.c
hardware/lascar-el-usb/api.c
hardware/nexus-osciprime/api.c
hardware/openbench-logic-sniffer/api.c
hardware/rigol-ds1xx2/api.c
hardware/tondaj-sl-814/api.c
hardware/victor-dmm/api.c
hardware/zeroplus-logic-cube/zeroplus.c
hwdriver.c

index ec50a2b257ee734ee84804f4519fc6784c76d089..d40c911b347c1a572398d1c469f3f73343356aa2 100644 (file)
@@ -448,7 +448,9 @@ static GSList *hw_scan(GSList *options)
        (void)options;
 
        drvc = di->priv;
+
        devices = NULL;
+
        clear_instances();
 
        if (!(devc = g_try_malloc(sizeof(struct dev_context)))) {
index 478f0a1c95b1763de0893a25b1adb6b4065b3f62..2a97440f013a21d3cf8e4cfa2ef7fa90aaae221e 100644 (file)
@@ -96,6 +96,7 @@ static GSList *hw_scan(GSList *options)
        (void)options;
 
        drvc = di->priv;
+
        devices = NULL;
 
        /* Allocate memory for our private device context. */
@@ -169,8 +170,6 @@ static GSList *hw_scan(GSList *options)
        devices = g_slist_append(devices, sdi);
        drvc->instances = g_slist_append(drvc->instances, sdi);
 
-       sr_spew("Device init successful.");
-
        /* Close device. We'll reopen it again when we need it. */
        (void) la8_close(devc); /* Log, but ignore errors. */
 
index fd6112d86b80b6042e3cf8c2b7414daaa68a2f53..39e557a676ee2106fd9d232e82e6c154f0edcab7 100644 (file)
@@ -97,10 +97,11 @@ static GSList *hw_scan(GSList *options)
        GSList *devices, *l;
        const char *conn, *serialcomm;
 
-       devices = NULL;
        drvc = di->priv;
        drvc->instances = NULL;
 
+       devices = NULL;
+
        conn = serialcomm = NULL;
        for (l = options; l; l = l->next) {
                src = l->data;
@@ -123,7 +124,7 @@ static GSList *hw_scan(GSList *options)
                return NULL;
 
        if (!(devc = g_try_malloc0(sizeof(struct dev_context)))) {
-               sr_dbg("failed to malloc devc");
+               sr_dbg("Device context malloc failed.");
                return NULL;
        }
 
index b20239a1d137e5b13364f691c2f64ab666911ac5..923d20a9b60acdd256e3dfba8e2e64faa0b5feed 100644 (file)
@@ -172,6 +172,7 @@ static GSList *hw_scan(GSList *options)
        (void)options;
 
        drvc = di->priv;
+
        devices = NULL;
 
        sdi = sr_dev_inst_new(0, SR_ST_ACTIVE, DEMONAME, NULL, NULL);
index 7c2eaa954f00471e223dfac021be341f22468d90..acb6d815b786446d629f0fb90825cbf3a6169537 100644 (file)
@@ -285,11 +285,12 @@ static GSList *hw_scan(GSList *options)
 
        (void)options;
 
-       devcnt = 0;
-       devices = 0;
        drvc = di->priv;
        drvc->instances = NULL;
 
+       devcnt = 0;
+       devices = 0;
+
        clear_instances();
 
        /* Find all Hantek DSO devices and upload firmware to all of them. */
index 762853885032683a267bb57d89f3fff694b0abe3..1804f2d54793b1ea4e450a2661b8a2db2051b78b 100644 (file)
@@ -95,10 +95,7 @@ static GSList *hw_scan(GSList *options)
 
        (void)options;
 
-       if (!(drvc = di->priv)) {
-               sr_err("Driver was not initialized.");
-               return NULL;
-       }
+       drvc = di->priv;
 
        /* USB scan is always authoritative. */
        clear_instances();
index c35e2cfb9b84c7c6b99a44daa24572d9207ff87e..1b8d8083858a45fce348636d55d07410a7993894 100644 (file)
@@ -167,10 +167,7 @@ static GSList *hw_scan(GSList *options)
 
        (void)options;
 
-       if (!(drvc = di->priv)) {
-               sr_err("Driver was not initialized.");
-               return NULL;
-       }
+       drvc = di->priv;
 
        /* USB scan is always authoritative. */
        clear_instances();
index c7e1e687c9018ab7f1d7213dc3a4fe86609ffb58..6da0eab25eaea28f8ee5b1edb10f5c0969e8ea2e 100644 (file)
@@ -85,7 +85,9 @@ static GSList *hw_scan(GSList *options)
        char buf[8];
 
        (void)options;
+
        drvc = di->priv;
+
        devices = NULL;
 
        conn = serialcomm = NULL;
index 7cb579126dc83370d485553c488d954f34f95767..894f5afc01343c24a489449a8f188fe94b400ac1 100644 (file)
@@ -188,10 +188,11 @@ static GSList *hw_scan(GSList *options)
 
        (void)options;
 
-       devices = NULL;
        drvc = di->priv;
        drvc->instances = NULL;
 
+       devices = NULL;
+
        dir = g_dir_open("/sys/class/usb/", 0, NULL);
 
        if (dir == NULL)
index 9edc441bdbd809aa1ea1a375652563630745a100..c621eeb8cf3042033c3fe21ac628447b89fd0014 100644 (file)
@@ -93,10 +93,11 @@ static GSList *hw_scan(GSList *options)
        GSList *devices, *l;
        const char *conn, *serialcomm;
 
-       devices = NULL;
        drvc = di->priv;
        drvc->instances = NULL;
 
+       devices = NULL;
+
        conn = serialcomm = NULL;
        for (l = options; l; l = l->next) {
                if (!(src = l->data)) {
index d6bc5a34a671591efb27fb62de8d83d9b347043c..0edd79e4c650fc374a4d4fe181ad3af337edfb5c 100644 (file)
@@ -100,10 +100,7 @@ static GSList *hw_scan(GSList *options)
 
        (void)options;
 
-       if (!(drvc = di->priv)) {
-               sr_err("Driver was not initialized.");
-               return NULL;
-       }
+       drvc = di->priv;
 
        /* USB scan is always authoritative. */
        clear_instances();
index f8cf81f8bc73c2d6ed4d677a403cb30c8340d185..8ccd40f164fc27e15ab01d6699f729d504f310eb 100644 (file)
@@ -317,6 +317,7 @@ static GSList *hw_scan(GSList *options)
        (void)options;
 
        drvc = di->priv;
+
        devices = NULL;
 
        clear_instances();
index 364d97bd471a72141a0de46ec11c882e88d1b12c..d8748e93b27bedda303c1ca9847750bd7141438b 100644 (file)
@@ -289,21 +289,39 @@ SR_API int sr_driver_init(struct sr_context *ctx, struct sr_dev_driver *driver)
  * The order in which the system is scanned for devices is not specified. The
  * caller should not assume or rely on any specific order.
  *
- * @param driver The driver.
- * @param options A list of struct sr_hwopt options to pass to the driver's
- *             scanner.
+ * Before calling sr_driver_scan(), the user must have previously initialized
+ * the driver by calling sr_driver_init().
  *
- * @return A GSList * of struct sr_dev_inst, or NULL if no devices were found.
- * This list must be freed by the caller, but without freeing the data
- * pointed to in the list.
+ * @param driver The driver that should scan. This must be a pointer to one of
+ *               the entries returned by sr_driver_list(). Must not be NULL.
+ * @param options A list of 'struct sr_hwopt' options to pass to the driver's
+ *                scanner. Can be NULL/empty.
+ *
+ * @return A GSList * of 'struct sr_dev_inst', or NULL if no devices were
+ *         found (or errors were encountered). This list must be freed by the
+ *         caller using g_slist_free(), but without freeing the data pointed
+ *         to in the list.
  */
 SR_API GSList *sr_driver_scan(struct sr_dev_driver *driver, GSList *options)
 {
+       GSList *l;
 
-       if (driver->scan)
-               return driver->scan(options);
+       if (!driver) {
+               sr_err("Invalid driver, can't scan for devices.");
+               return NULL;
+       }
 
-       return NULL;
+       if (!driver->priv) {
+               sr_err("Driver not initialized, can't scan for devices.");
+               return NULL;
+       }
+
+       l = driver->scan(options);
+
+       sr_spew("Scan of '%s' found %d devices.", driver->name,
+               g_slist_length(l));
+
+       return l;
 }
 
 /** @private */