libfprint/SOURCES/0030-fpi-ssm-Add-a-usb-tran...

72 lines
2.7 KiB
Diff

From 9902e2c4224914dc611eb2326db7322aa57ec2a2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
Date: Wed, 27 Nov 2019 19:36:24 +0100
Subject: [PATCH 030/181] fpi-ssm: Add a usb transfer callback with data as
weak pointer
Allow to pass a double-pointer to be nullified as the transfer data in order
to mark it as NULL when the transfer is done.
This is useful if we're keeping the transfer around in order to check that
no one is currently running.
---
libfprint/fpi-ssm.c | 29 +++++++++++++++++++++++++++++
libfprint/fpi-ssm.h | 6 +++++-
2 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/libfprint/fpi-ssm.c b/libfprint/fpi-ssm.c
index a614860..6a02a2c 100644
--- a/libfprint/fpi-ssm.c
+++ b/libfprint/fpi-ssm.c
@@ -413,3 +413,32 @@ fpi_ssm_usb_transfer_cb (FpiUsbTransfer *transfer, FpDevice *device,
else
fpi_ssm_next_state (transfer->ssm);
}
+
+/**
+ * fpi_ssm_usb_transfer_with_weak_pointer_cb:
+ * @transfer: a #FpiUsbTransfer
+ * @device: a #FpDevice
+ * @weak_ptr: A #gpointer pointer to nullify. You can pass a pointer to any
+ * #gpointer to nullify when the callback is completed. I.e a
+ * pointer to the current #FpiUsbTransfer.
+ * @error: The #GError or %NULL
+ *
+ * Can be used in as a #FpiUsbTransfer callback handler to automatically
+ * advance or fail a statemachine on transfer completion.
+ * Passing a #gpointer* as @weak_ptr permits to nullify it once we're done
+ * with the transfer.
+ *
+ * Make sure to set the #FpiSsm on the transfer.
+ */
+void
+fpi_ssm_usb_transfer_with_weak_pointer_cb (FpiUsbTransfer *transfer,
+ FpDevice *device, gpointer weak_ptr,
+ GError *error)
+{
+ g_return_if_fail (transfer->ssm);
+
+ if (weak_ptr)
+ g_nullify_pointer ((gpointer *) weak_ptr);
+
+ fpi_ssm_usb_transfer_cb (transfer, device, weak_ptr, error);
+}
diff --git a/libfprint/fpi-ssm.h b/libfprint/fpi-ssm.h
index 8d45162..704271d 100644
--- a/libfprint/fpi-ssm.h
+++ b/libfprint/fpi-ssm.h
@@ -91,5 +91,9 @@ void fpi_ssm_next_state_timeout_cb (FpDevice *dev,
void *data);
void fpi_ssm_usb_transfer_cb (FpiUsbTransfer *transfer,
FpDevice *device,
- gpointer user_data,
+ gpointer user_date,
GError *error);
+void fpi_ssm_usb_transfer_with_weak_pointer_cb (FpiUsbTransfer *transfer,
+ FpDevice *device,
+ gpointer weak_ptr,
+ GError *error);
--
2.24.1