mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2025-11-15 07:38:12 +00:00
cocci: Add spatch/coccinelle patches for driver porting
This is an impartial set of transformations to help port the drivers to the new interfaces.
This commit is contained in:
344
cocci/06-libusb-callback-1.cocci
Normal file
344
cocci/06-libusb-callback-1.cocci
Normal file
@@ -0,0 +1,344 @@
|
||||
@ usb_transfer_cb @
|
||||
typedef FpUsbTransfer;
|
||||
typedef FpSsm;
|
||||
identifier func;
|
||||
identifier transfer;
|
||||
identifier dev;
|
||||
identifier ssm;
|
||||
@@
|
||||
(
|
||||
-void func(FpUsbTransfer *transfer)
|
||||
+void func(FpUsbTransfer *transfer,
|
||||
+ FpDevice *device,
|
||||
+ gpointer user_data,
|
||||
+ GError *error)
|
||||
{
|
||||
...
|
||||
}
|
||||
|
|
||||
// this is weird, one function in uru4000 didn't get the types
|
||||
// converted by earlier rules. But, this does not seem to work either.
|
||||
-void func(\(FpUsbTransfer*\|struct libusb_transfer*\) transfer,
|
||||
- \(FpDevice*\|struct fp_dev*\) dev,
|
||||
- \(FpSsm*\|fpi_ssm*\) ssm,
|
||||
- void* user_data)
|
||||
+void func(FpUsbTransfer *transfer,
|
||||
+ FpDevice *dev,
|
||||
+ gpointer user_data,
|
||||
+ GError *error)
|
||||
{
|
||||
+ FpSsm *ssm = transfer->ssm;
|
||||
...
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@ errors_generic_1 @
|
||||
identifier usb_transfer_cb.func;
|
||||
identifier usb_transfer_cb.transfer;
|
||||
@@
|
||||
func(...)
|
||||
{
|
||||
<...
|
||||
(
|
||||
- (transfer->status != LIBUSB_TRANSFER_COMPLETED)
|
||||
+ error
|
||||
|
|
||||
- (transfer->status == LIBUSB_TRANSFER_COMPLETED)
|
||||
+ !error
|
||||
|
|
||||
- (transfer->status == LIBUSB_TRANSFER_TIMED_OUT)
|
||||
+ g_error_matches (error, G_USB_DEVICE_ERROR, G_USB_DEVICE_ERROR_TIMED_OUT)
|
||||
)
|
||||
...>
|
||||
}
|
||||
|
||||
|
||||
@ errors_1 @
|
||||
identifier usb_transfer_cb.func;
|
||||
identifier usb_transfer_cb.transfer;
|
||||
expression ssm;
|
||||
statement S;
|
||||
@@
|
||||
func(...)
|
||||
{
|
||||
<...
|
||||
if (error) {
|
||||
(
|
||||
...
|
||||
- fpi_ssm_mark_failed (ssm, ...)
|
||||
+ fp_ssm_mark_failed (ssm, error)
|
||||
...
|
||||
|
|
||||
...
|
||||
- fpi_imgdev_session_error (...)
|
||||
+ _fp_image_device_session_error (FP_IMAGE_DEVICE (device), error)
|
||||
...
|
||||
)
|
||||
}
|
||||
...>
|
||||
}
|
||||
|
||||
@ errors_1_alt @
|
||||
identifier usb_transfer_cb.func;
|
||||
identifier usb_transfer_cb.transfer;
|
||||
expression ssm;
|
||||
statement S;
|
||||
@@
|
||||
func(...)
|
||||
{
|
||||
<...
|
||||
if (!error) { ... }
|
||||
else {
|
||||
(
|
||||
...
|
||||
- fpi_ssm_mark_failed (ssm, ...)
|
||||
+ fp_ssm_mark_failed (ssm, error)
|
||||
...
|
||||
|
|
||||
...
|
||||
- fpi_imgdev_session_error (...)
|
||||
+ _fp_image_device_session_error (FP_IMAGE_DEVICE (device), error)
|
||||
...
|
||||
)
|
||||
}
|
||||
...>
|
||||
}
|
||||
|
||||
@ errors_2 @
|
||||
identifier usb_transfer_cb.func;
|
||||
identifier usb_transfer_cb.transfer;
|
||||
expression ssm;
|
||||
@@
|
||||
func(...)
|
||||
{
|
||||
<...
|
||||
if (transfer->length != transfer->actual_length) {
|
||||
+ _Pragma("GCC warning \"Driver should probably set short_is_error instead!\"");
|
||||
...
|
||||
(
|
||||
- fpi_ssm_mark_failed (ssm, ...);
|
||||
+ fp_ssm_mark_failed (ssm, g_error_new (G_USB_DEVICE_ERROR,
|
||||
+ G_USB_DEVICE_ERROR_IO,
|
||||
+ "Short USB transfer!"));
|
||||
|
|
||||
- fpi_imgdev_session_error (...);
|
||||
+ _fp_image_device_session_error (FP_IMAGE_DEVICE (device),
|
||||
+ g_error_new (G_USB_DEVICE_ERROR,
|
||||
+ G_USB_DEVICE_ERROR_IO,
|
||||
+ "Short USB transfer!"));
|
||||
)
|
||||
...
|
||||
}
|
||||
...>
|
||||
}
|
||||
|
||||
@ not_useful_error_prints @
|
||||
identifier usb_transfer_cb.func;
|
||||
@@
|
||||
func(...)
|
||||
{
|
||||
<...
|
||||
- fp_err (...);
|
||||
...
|
||||
(
|
||||
fp_ssm_mark_failed (...);
|
||||
|
|
||||
_fp_image_device_session_error (...);
|
||||
)
|
||||
...>
|
||||
}
|
||||
|
||||
@ error_or_wrong_length @
|
||||
identifier usb_transfer_cb.func;
|
||||
identifier usb_transfer_cb.transfer;
|
||||
expression ssm;
|
||||
@@
|
||||
func(...)
|
||||
{
|
||||
<...
|
||||
- if (error || (transfer->length != transfer->actual_length))
|
||||
+ if (error)
|
||||
{
|
||||
+ _Pragma("GCC warning \"Driver needs to set short_is_error for this branch to be taken!\"");
|
||||
<...
|
||||
(
|
||||
- fpi_ssm_mark_failed (ssm, ...);
|
||||
+ fp_ssm_mark_failed (ssm, error);
|
||||
|
|
||||
- fpi_imgdev_session_error (...);
|
||||
+ _fp_image_device_session_error (FP_IMAGE_DEVICE (device), error);
|
||||
)
|
||||
...>
|
||||
}
|
||||
...>
|
||||
}
|
||||
|
||||
@ error_or_wrong_length_2 @
|
||||
identifier usb_transfer_cb.func;
|
||||
identifier usb_transfer_cb.transfer;
|
||||
expression ssm;
|
||||
@@
|
||||
func(...)
|
||||
{
|
||||
<...
|
||||
- if (!error && (transfer->length == transfer->actual_length))
|
||||
+ if (!error)
|
||||
{ ... }
|
||||
else {
|
||||
+ _Pragma("GCC warning \"Driver needs to set short_is_error for this branch to be taken!\"");
|
||||
<...
|
||||
(
|
||||
- fpi_ssm_mark_failed (ssm, ...);
|
||||
+ fp_ssm_mark_failed (ssm, error);
|
||||
|
|
||||
- fpi_imgdev_session_error (...);
|
||||
+ _fp_image_device_session_error (FP_IMAGE_DEVICE (device), error);
|
||||
)
|
||||
...>
|
||||
}
|
||||
...>
|
||||
}
|
||||
|
||||
|
||||
@@
|
||||
identifier usb_transfer_cb.func;
|
||||
identifier usb_transfer_cb.transfer;
|
||||
identifier out;
|
||||
@@
|
||||
func(...)
|
||||
{
|
||||
<...
|
||||
- goto out;
|
||||
+ return;
|
||||
...>
|
||||
-out:
|
||||
(
|
||||
- g_free(transfer->buffer);
|
||||
|
|
||||
)
|
||||
- libusb_free_transfer (transfer);
|
||||
}
|
||||
|
||||
@@
|
||||
identifier usb_transfer_cb.func;
|
||||
identifier usb_transfer_cb.transfer;
|
||||
@@
|
||||
func(...)
|
||||
{
|
||||
<...
|
||||
(
|
||||
- g_free(transfer->buffer);
|
||||
|
|
||||
)
|
||||
- libusb_free_transfer (transfer);
|
||||
...
|
||||
return;
|
||||
...>
|
||||
}
|
||||
|
||||
|
||||
@@
|
||||
identifier usb_transfer_cb.func;
|
||||
identifier usb_transfer_cb.transfer;
|
||||
@@
|
||||
func(...)
|
||||
{
|
||||
<...
|
||||
- transfer->user_data
|
||||
+ user_data
|
||||
...>
|
||||
}
|
||||
|
||||
@@
|
||||
typedef gint;
|
||||
identifier usb_transfer_cb.func;
|
||||
identifier usb_transfer_cb.transfer;
|
||||
@@
|
||||
func(...)
|
||||
{
|
||||
<...
|
||||
(
|
||||
fp_dbg
|
||||
|
|
||||
fp_warn
|
||||
|
|
||||
fp_err
|
||||
)
|
||||
(...,
|
||||
- transfer->length
|
||||
+ (gint) transfer->length
|
||||
, ...);
|
||||
...>
|
||||
}
|
||||
|
||||
@@
|
||||
typedef gint;
|
||||
identifier usb_transfer_cb.func;
|
||||
identifier usb_transfer_cb.transfer;
|
||||
@@
|
||||
func(...)
|
||||
{
|
||||
<...
|
||||
(
|
||||
fp_dbg
|
||||
|
|
||||
fp_warn
|
||||
|
|
||||
fp_err
|
||||
)
|
||||
(...,
|
||||
- transfer->actual_length
|
||||
+ (gint) transfer->actual_length
|
||||
, ...);
|
||||
...>
|
||||
}
|
||||
|
||||
@@
|
||||
identifier usb_transfer_cb.func;
|
||||
identifier usb_transfer_cb.transfer;
|
||||
identifier ssm_var;
|
||||
gpointer user_data;
|
||||
@@
|
||||
func(...)
|
||||
{
|
||||
...
|
||||
(
|
||||
- FpSsm *ssm_var = (FpSsm*) user_data;
|
||||
|
|
||||
- FpSsm *ssm_var = user_data;
|
||||
)
|
||||
<...
|
||||
- ssm_var
|
||||
+ transfer->ssm
|
||||
...>
|
||||
}
|
||||
|
||||
// A lot of drivers abuse the SSM user_data for the driver
|
||||
// Convert FpImageDevice usage to simple cast
|
||||
@@
|
||||
identifier usb_transfer_cb.func;
|
||||
identifier dev;
|
||||
@@
|
||||
func(...)
|
||||
{
|
||||
-FpImageDevice *dev = ...;
|
||||
+FpImageDevice *dev = FP_IMAGE_DEVICE (device);
|
||||
...
|
||||
}
|
||||
|
||||
// A lot of drivers abuse the SSM user_data for the driver
|
||||
// Remove FpDevice getter and use argument
|
||||
@@
|
||||
identifier usb_transfer_cb.func;
|
||||
identifier arg;
|
||||
identifier dev;
|
||||
@@
|
||||
func(..., FpDevice *arg, ...)
|
||||
{
|
||||
-FpDevice *dev = ...;
|
||||
<...
|
||||
-dev
|
||||
+arg
|
||||
...>
|
||||
}
|
||||
Reference in New Issue
Block a user