mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2026-06-10 18:24:19 +00:00
fpi-byte-reader: Add support to read and get/peek GBytes
This commit is contained in:
committed by
Marco Trevisan
parent
14763d29cf
commit
dc48ab8b40
@@ -139,8 +139,10 @@ fpi_assemble_lines
|
||||
<TITLE>FpiByteReader</TITLE>
|
||||
FpiByteReader
|
||||
fpi_byte_reader_new
|
||||
fpi_byte_reader_new_bytes
|
||||
fpi_byte_reader_free
|
||||
fpi_byte_reader_init
|
||||
fpi_byte_reader_init_bytes
|
||||
fpi_byte_reader_peek_sub_reader
|
||||
fpi_byte_reader_get_sub_reader
|
||||
fpi_byte_reader_set_pos
|
||||
@@ -148,6 +150,8 @@ fpi_byte_reader_get_pos
|
||||
fpi_byte_reader_get_remaining
|
||||
fpi_byte_reader_get_size
|
||||
fpi_byte_reader_skip
|
||||
fpi_byte_reader_get_bytes
|
||||
fpi_byte_reader_peek_bytes
|
||||
fpi_byte_reader_get_uint8
|
||||
fpi_byte_reader_get_int8
|
||||
fpi_byte_reader_peek_uint8
|
||||
|
||||
@@ -65,6 +65,31 @@ fpi_byte_reader_new (const guint8 * data, guint size)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* fpi_byte_reader_new_bytes: (skip)
|
||||
* @bytes: (in) (transfer none): a #GBytes instance from which the
|
||||
* #FpiByteReader should read
|
||||
*
|
||||
* Create a new #FpiByteReader instance, which will read from @bytes.
|
||||
*
|
||||
* Free-function: fpi_byte_reader_free
|
||||
*
|
||||
* Returns: (transfer full): a new #FpiByteReader instance
|
||||
*/
|
||||
FpiByteReader *
|
||||
fpi_byte_reader_new_bytes (GBytes * bytes)
|
||||
{
|
||||
const guint8 *data;
|
||||
gsize size = 0;
|
||||
|
||||
g_return_val_if_fail (bytes != NULL, NULL);
|
||||
|
||||
data = g_bytes_get_data (bytes, &size);
|
||||
g_return_val_if_fail (size <= G_MAXUINT, NULL);
|
||||
|
||||
return fpi_byte_reader_new (data, (guint) size);
|
||||
}
|
||||
|
||||
/**
|
||||
* fpi_byte_reader_free:
|
||||
* @reader: (in) (transfer full): a #FpiByteReader instance
|
||||
@@ -100,6 +125,30 @@ fpi_byte_reader_init (FpiByteReader * reader, const guint8 * data, guint size)
|
||||
reader->byte = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* fpi_byte_reader_init_bytes:
|
||||
* @reader: a #FpiByteReader instance
|
||||
* @bytes: (in) (transfer none): a #GBytes instance from which
|
||||
* the #FpiByteReader should read
|
||||
*
|
||||
* Initializes a #FpiByteReader instance to read from @bytes. This function
|
||||
* can be called on already initialized instances.
|
||||
*/
|
||||
FpiByteReader *
|
||||
fpi_byte_reader_init_bytes (FpiByteReader * reader, GBytes * bytes)
|
||||
{
|
||||
g_return_val_if_fail (reader != NULL, NULL);
|
||||
g_return_val_if_fail (bytes != NULL, NULL);
|
||||
|
||||
gsize size = 0;
|
||||
const guint8 *data = g_bytes_get_data (bytes, &size);
|
||||
|
||||
g_return_val_if_fail (size <= G_MAXUINT, NULL);
|
||||
fpi_byte_reader_init (reader, data, (guint) size);
|
||||
|
||||
return reader;
|
||||
}
|
||||
|
||||
/**
|
||||
* fpi_byte_reader_peek_sub_reader: (skip)
|
||||
* @reader: an existing and initialized #FpiByteReader instance
|
||||
|
||||
@@ -50,6 +50,7 @@ typedef struct {
|
||||
|
||||
FpiByteReader * fpi_byte_reader_new (const guint8 *data, guint size) G_GNUC_MALLOC;
|
||||
|
||||
FpiByteReader * fpi_byte_reader_new_bytes (GBytes *bytes) G_GNUC_MALLOC;
|
||||
|
||||
void fpi_byte_reader_free (FpiByteReader *reader);
|
||||
|
||||
@@ -57,6 +58,9 @@ void fpi_byte_reader_free (FpiByteReader *reader);
|
||||
void fpi_byte_reader_init (FpiByteReader *reader, const guint8 *data, guint size);
|
||||
|
||||
|
||||
FpiByteReader * fpi_byte_reader_init_bytes (FpiByteReader *reader, GBytes *bytes);
|
||||
|
||||
|
||||
gboolean fpi_byte_reader_peek_sub_reader (FpiByteReader * reader,
|
||||
FpiByteReader * sub_reader,
|
||||
guint size);
|
||||
@@ -220,6 +224,13 @@ gboolean fpi_byte_reader_get_data (FpiByteReader * reader, guint s
|
||||
|
||||
gboolean fpi_byte_reader_peek_data (const FpiByteReader * reader, guint size, const guint8 ** val);
|
||||
|
||||
|
||||
GBytes * fpi_byte_reader_get_bytes (FpiByteReader *reader, guint size);
|
||||
|
||||
|
||||
GBytes * fpi_byte_reader_peek_bytes (const FpiByteReader *reader, guint size);
|
||||
|
||||
|
||||
#define fpi_byte_reader_dup_string(reader,str) \
|
||||
fpi_byte_reader_dup_string_utf8(reader,str)
|
||||
|
||||
@@ -642,6 +653,34 @@ fpi_byte_reader_peek_data_inline (const FpiByteReader * reader, guint size, cons
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static inline GBytes *
|
||||
fpi_byte_reader_peek_bytes_inline (const FpiByteReader *reader, guint size)
|
||||
{
|
||||
const guint8 *data;
|
||||
|
||||
g_return_val_if_fail (reader != NULL, NULL);
|
||||
|
||||
if (G_UNLIKELY (size > reader->size || fpi_byte_reader_get_remaining_unchecked (reader) < size))
|
||||
return NULL;
|
||||
|
||||
data = fpi_byte_reader_peek_data_unchecked (reader);
|
||||
return g_bytes_new_static (data, size);
|
||||
}
|
||||
|
||||
static inline GBytes *
|
||||
fpi_byte_reader_get_bytes_inline (FpiByteReader *reader, guint size)
|
||||
{
|
||||
const guint8 *data;
|
||||
|
||||
g_return_val_if_fail (reader != NULL, NULL);
|
||||
|
||||
if (G_UNLIKELY (size > reader->size || fpi_byte_reader_get_remaining_unchecked (reader) < size))
|
||||
return NULL;
|
||||
|
||||
data = fpi_byte_reader_get_data_unchecked (reader, size);
|
||||
return g_bytes_new_static (data, size);
|
||||
}
|
||||
|
||||
static inline guint
|
||||
fpi_byte_reader_get_pos_inline (const FpiByteReader * reader)
|
||||
{
|
||||
@@ -672,6 +711,10 @@ fpi_byte_reader_skip_inline (FpiByteReader * reader, guint nbytes)
|
||||
G_LIKELY(fpi_byte_reader_peek_data_inline(reader,size,val))
|
||||
#define fpi_byte_reader_skip(reader,nbytes) \
|
||||
G_LIKELY(fpi_byte_reader_skip_inline(reader,nbytes))
|
||||
#define fpi_byte_reader_get_bytes(reader,size) \
|
||||
fpi_byte_reader_get_bytes_inline(reader,size)
|
||||
#define fpi_byte_reader_peek_bytes(reader,size) \
|
||||
fpi_byte_reader_peek_bytes_inline(reader,size)
|
||||
|
||||
#endif /* FPI_BYTE_READER_DISABLE_INLINES */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user