summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Trevisan (Treviño) <mail@3v1n0.net>2024-02-20 06:09:01 +0100
committerMarco Trevisan (Treviño) <mail@3v1n0.net>2024-02-20 17:57:46 +0100
commite0557810064d66db78417011a248f235d94dfc7d (patch)
tree5677d19098a79cefbd2fb39e88ef543c9bd2c2bc
parent48c8c539c75a5811af8f58efe3dac7c2168b4042 (diff)
egismoc: Use FpiByteWriter to allocate the commit payload
-rw-r--r--libfprint/drivers/egismoc/egismoc.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/libfprint/drivers/egismoc/egismoc.c b/libfprint/drivers/egismoc/egismoc.c
index 375c466..98bca26 100644
--- a/libfprint/drivers/egismoc/egismoc.c
+++ b/libfprint/drivers/egismoc/egismoc.c
@@ -1020,6 +1020,7 @@ static void
egismoc_enroll_run_state (FpiSsm *ssm,
FpDevice *device)
{
+ g_auto(FpiByteWriter) writer = {0};
FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device);
EnrollPrint *enroll_print = fpi_ssm_get_data (ssm);
g_autofree guchar *payload = NULL;
@@ -1107,14 +1108,23 @@ egismoc_enroll_run_state (FpiSsm *ssm,
device_print_id = g_strndup (user_id, EGISMOC_FINGERPRINT_DATA_SIZE);
egismoc_set_print_data (enroll_print->print, device_print_id, user_id);
- /* create new dynamic payload of cmd_new_print_prefix + device_print_id */
- payload_length = cmd_new_print_prefix_len + EGISMOC_FINGERPRINT_DATA_SIZE;
- payload = g_new0 (guchar, payload_length);
- memcpy (payload, cmd_new_print_prefix, cmd_new_print_prefix_len);
- memcpy (payload + cmd_new_print_prefix_len, device_print_id,
- EGISMOC_FINGERPRINT_DATA_SIZE);
+ fpi_byte_writer_init (&writer);
+ if (!fpi_byte_writer_put_data (&writer, cmd_new_print_prefix,
+ cmd_new_print_prefix_len))
+ {
+ fpi_ssm_mark_failed (ssm, fpi_device_error_new (FP_DEVICE_ERROR_PROTO));
+ break;
+ }
+ if (!fpi_byte_writer_put_data (&writer, (guint8 *) device_print_id,
+ EGISMOC_FINGERPRINT_DATA_SIZE))
+ {
+ fpi_ssm_mark_failed (ssm, fpi_device_error_new (FP_DEVICE_ERROR_PROTO));
+ break;
+ }
- egismoc_exec_cmd (device, g_steal_pointer (&payload), payload_length,
+ payload_length = fpi_byte_writer_get_size (&writer);
+ egismoc_exec_cmd (device, fpi_byte_writer_reset_and_get_data (&writer),
+ payload_length,
g_free, egismoc_task_ssm_next_state_cb);
break;