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>
|
<TITLE>FpiByteReader</TITLE>
|
||||||
FpiByteReader
|
FpiByteReader
|
||||||
fpi_byte_reader_new
|
fpi_byte_reader_new
|
||||||
|
fpi_byte_reader_new_bytes
|
||||||
fpi_byte_reader_free
|
fpi_byte_reader_free
|
||||||
fpi_byte_reader_init
|
fpi_byte_reader_init
|
||||||
|
fpi_byte_reader_init_bytes
|
||||||
fpi_byte_reader_peek_sub_reader
|
fpi_byte_reader_peek_sub_reader
|
||||||
fpi_byte_reader_get_sub_reader
|
fpi_byte_reader_get_sub_reader
|
||||||
fpi_byte_reader_set_pos
|
fpi_byte_reader_set_pos
|
||||||
@@ -148,6 +150,8 @@ fpi_byte_reader_get_pos
|
|||||||
fpi_byte_reader_get_remaining
|
fpi_byte_reader_get_remaining
|
||||||
fpi_byte_reader_get_size
|
fpi_byte_reader_get_size
|
||||||
fpi_byte_reader_skip
|
fpi_byte_reader_skip
|
||||||
|
fpi_byte_reader_get_bytes
|
||||||
|
fpi_byte_reader_peek_bytes
|
||||||
fpi_byte_reader_get_uint8
|
fpi_byte_reader_get_uint8
|
||||||
fpi_byte_reader_get_int8
|
fpi_byte_reader_get_int8
|
||||||
fpi_byte_reader_peek_uint8
|
fpi_byte_reader_peek_uint8
|
||||||
|
|||||||
@@ -65,6 +65,31 @@ fpi_byte_reader_new (const guint8 * data, guint size)
|
|||||||
return ret;
|
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:
|
* fpi_byte_reader_free:
|
||||||
* @reader: (in) (transfer full): a #FpiByteReader instance
|
* @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;
|
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)
|
* fpi_byte_reader_peek_sub_reader: (skip)
|
||||||
* @reader: an existing and initialized #FpiByteReader instance
|
* @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 (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);
|
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);
|
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,
|
gboolean fpi_byte_reader_peek_sub_reader (FpiByteReader * reader,
|
||||||
FpiByteReader * sub_reader,
|
FpiByteReader * sub_reader,
|
||||||
guint size);
|
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);
|
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) \
|
#define fpi_byte_reader_dup_string(reader,str) \
|
||||||
fpi_byte_reader_dup_string_utf8(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;
|
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
|
static inline guint
|
||||||
fpi_byte_reader_get_pos_inline (const FpiByteReader * reader)
|
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))
|
G_LIKELY(fpi_byte_reader_peek_data_inline(reader,size,val))
|
||||||
#define fpi_byte_reader_skip(reader,nbytes) \
|
#define fpi_byte_reader_skip(reader,nbytes) \
|
||||||
G_LIKELY(fpi_byte_reader_skip_inline(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 */
|
#endif /* FPI_BYTE_READER_DISABLE_INLINES */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user