diff --git a/libfprint/async.c b/libfprint/async.c index f469a36f..35da8758 100644 --- a/libfprint/async.c +++ b/libfprint/async.c @@ -47,11 +47,15 @@ void fpi_drvcb_open_complete(struct fp_dev *dev, int status) API_EXPORTED int fp_async_dev_open(struct fp_dscv_dev *ddev, fp_dev_open_cb callback, void *user_data) { - struct fp_driver *drv = ddev->drv; + struct fp_driver *drv; struct fp_dev *dev; libusb_device_handle *udevh; int r; + g_return_val_if_fail(ddev != NULL, -ENODEV); + + drv = ddev->drv; + G_DEBUG_HERE(); r = libusb_open(ddev->udev, &udevh); if (r < 0) { @@ -104,7 +108,11 @@ void fpi_drvcb_close_complete(struct fp_dev *dev) API_EXPORTED void fp_async_dev_close(struct fp_dev *dev, fp_operation_stop_cb callback, void *user_data) { - struct fp_driver *drv = dev->drv; + struct fp_driver *drv; + + g_return_if_fail (dev != NULL); + + drv = dev->drv; if (g_slist_index(opened_devices, (gconstpointer) dev) == -1) fp_err("device %p not in opened list!", dev); @@ -152,9 +160,13 @@ void fpi_drvcb_enroll_started(struct fp_dev *dev, int status) API_EXPORTED int fp_async_enroll_start(struct fp_dev *dev, fp_enroll_stage_cb callback, void *user_data) { - struct fp_driver *drv = dev->drv; + struct fp_driver *drv; int r; + g_return_val_if_fail(dev != NULL, -ENODEV); + + drv = dev->drv; + if (!dev->nr_enroll_stages || !drv->enroll_start) { fp_err("driver %s has 0 enroll stages or no enroll func", drv->name); @@ -214,9 +226,13 @@ void fpi_drvcb_enroll_stopped(struct fp_dev *dev) API_EXPORTED int fp_async_enroll_stop(struct fp_dev *dev, fp_operation_stop_cb callback, void *user_data) { - struct fp_driver *drv = dev->drv; + struct fp_driver *drv; int r; + g_return_val_if_fail(dev != NULL, -ENODEV); + + drv = dev->drv; + G_DEBUG_HERE(); if (!drv->enroll_start) return -ENOTSUP; @@ -252,9 +268,13 @@ API_EXPORTED int fp_async_enroll_stop(struct fp_dev *dev, API_EXPORTED int fp_async_verify_start(struct fp_dev *dev, struct fp_print_data *data, fp_img_operation_cb callback, void *user_data) { - struct fp_driver *drv = dev->drv; + struct fp_driver *drv; int r; + g_return_val_if_fail(dev != NULL, -ENODEV); + + drv = dev->drv; + G_DEBUG_HERE(); if (!drv->verify_start) return -ENOTSUP; @@ -328,10 +348,14 @@ void fpi_drvcb_verify_stopped(struct fp_dev *dev) API_EXPORTED int fp_async_verify_stop(struct fp_dev *dev, fp_operation_stop_cb callback, void *user_data) { - struct fp_driver *drv = dev->drv; + struct fp_driver *drv; gboolean iterating = (dev->state == DEV_STATE_VERIFYING); int r; + g_return_val_if_fail(dev != NULL, -ENODEV); + + drv = dev->drv; + G_DEBUG_HERE(); BUG_ON(dev->state != DEV_STATE_ERROR && dev->state != DEV_STATE_VERIFYING @@ -370,9 +394,13 @@ API_EXPORTED int fp_async_verify_stop(struct fp_dev *dev, API_EXPORTED int fp_async_identify_start(struct fp_dev *dev, struct fp_print_data **gallery, fp_identify_cb callback, void *user_data) { - struct fp_driver *drv = dev->drv; + struct fp_driver *drv; int r; + g_return_val_if_fail(dev != NULL, -ENODEV); + + drv = dev->drv; + G_DEBUG_HERE(); if (!drv->identify_start) return -ENOTSUP; @@ -436,10 +464,14 @@ void fpi_drvcb_report_identify_result(struct fp_dev *dev, int result, API_EXPORTED int fp_async_identify_stop(struct fp_dev *dev, fp_operation_stop_cb callback, void *user_data) { - struct fp_driver *drv = dev->drv; + struct fp_driver *drv; gboolean iterating = (dev->state == DEV_STATE_IDENTIFYING); int r; + g_return_val_if_fail(dev != NULL, -ENODEV); + + drv = dev->drv; + G_DEBUG_HERE(); BUG_ON(dev->state != DEV_STATE_IDENTIFYING && dev->state != DEV_STATE_IDENTIFY_DONE); @@ -488,9 +520,13 @@ void fpi_drvcb_identify_stopped(struct fp_dev *dev) API_EXPORTED int fp_async_capture_start(struct fp_dev *dev, int unconditional, fp_img_operation_cb callback, void *user_data) { - struct fp_driver *drv = dev->drv; + struct fp_driver *drv; int r; + g_return_val_if_fail(dev != NULL, -ENODEV); + + drv = dev->drv; + G_DEBUG_HERE(); if (!drv->capture_start) return -ENOTSUP; @@ -563,9 +599,13 @@ void fpi_drvcb_capture_stopped(struct fp_dev *dev) API_EXPORTED int fp_async_capture_stop(struct fp_dev *dev, fp_operation_stop_cb callback, void *user_data) { - struct fp_driver *drv = dev->drv; + struct fp_driver *drv; int r; + g_return_val_if_fail(dev != NULL, -ENODEV); + + drv = dev->drv; + G_DEBUG_HERE(); BUG_ON(dev->state != DEV_STATE_ERROR && dev->state != DEV_STATE_CAPTURING