diff options
author | Marco Trevisan (Treviño) <mail@3v1n0.net> | 2024-02-20 05:04:52 +0100 |
---|---|---|
committer | Marco Trevisan (Treviño) <mail@3v1n0.net> | 2024-02-20 17:57:46 +0100 |
commit | 28c26c7d7e8ab03898a54352c4ae82c357373812 (patch) | |
tree | d38d823ffbb0b31a63ad7d8cfbfb8f6f91258f04 | |
parent | dd5a71695fdf7cbb60337b3984b0de79d648f666 (diff) |
egismoc: Use FpiByteReader to read the enrolled IDs
-rw-r--r-- | libfprint/drivers/egismoc/egismoc.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/libfprint/drivers/egismoc/egismoc.c b/libfprint/drivers/egismoc/egismoc.c index 00e922b..4bf4fda 100644 --- a/libfprint/drivers/egismoc/egismoc.c +++ b/libfprint/drivers/egismoc/egismoc.c @@ -457,17 +457,29 @@ egismoc_list_fill_enrolled_ids_cb (FpDevice *device, g_clear_pointer (&self->enrolled_ids, g_ptr_array_unref); self->enrolled_ids = g_ptr_array_new_with_free_func (g_free); + FpiByteReader reader; + gboolean read = TRUE; + + fpi_byte_reader_init (&reader, buffer_in, length_in); + + read &= fpi_byte_reader_set_pos (&reader, EGISMOC_LIST_RESPONSE_PREFIX_SIZE); + /* * Each fingerprint ID will be returned in this response as a 32 byte array * The other stuff in the payload is 16 bytes long, so if there is at least 1 * print then the length should be at least 16+32=48 bytes long */ - for (int pos = EGISMOC_LIST_RESPONSE_PREFIX_SIZE; - pos < length_in - EGISMOC_LIST_RESPONSE_SUFFIX_SIZE; - pos += EGISMOC_FINGERPRINT_DATA_SIZE) + while (read) { - g_autofree gchar *print_id = g_strndup ((gchar *) buffer_in + pos, - EGISMOC_FINGERPRINT_DATA_SIZE); + const guint8 *data; + g_autofree gchar *print_id = NULL; + + read &= fpi_byte_reader_get_data (&reader, EGISMOC_FINGERPRINT_DATA_SIZE, + &data); + if (!read) + break; + + print_id = g_strndup ((gchar *) data, EGISMOC_FINGERPRINT_DATA_SIZE); fp_dbg ("Device fingerprint %0d: %.*s", self->enrolled_ids->len + 1, EGISMOC_FINGERPRINT_DATA_SIZE, print_id); g_ptr_array_add (self->enrolled_ids, g_steal_pointer (&print_id)); |