mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 03:35:21 +00:00
bytewriter: Add guards to the inlined get_pos/get_remaining/get_size/etc functions
This commit is contained in:
parent
c41c2f7964
commit
10c18151d2
2 changed files with 60 additions and 33 deletions
|
@ -179,9 +179,7 @@ gst_byte_reader_set_pos (GstByteReader * reader, guint pos)
|
|||
guint
|
||||
gst_byte_reader_get_pos (const GstByteReader * reader)
|
||||
{
|
||||
g_return_val_if_fail (reader != NULL, 0);
|
||||
|
||||
return reader->byte;
|
||||
return _gst_byte_reader_get_pos_inline (reader);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -197,8 +195,6 @@ gst_byte_reader_get_pos (const GstByteReader * reader)
|
|||
guint
|
||||
gst_byte_reader_get_remaining (const GstByteReader * reader)
|
||||
{
|
||||
g_return_val_if_fail (reader != NULL, 0);
|
||||
|
||||
return _gst_byte_reader_get_remaining_inline (reader);
|
||||
}
|
||||
|
||||
|
@ -215,8 +211,6 @@ gst_byte_reader_get_remaining (const GstByteReader * reader)
|
|||
guint
|
||||
gst_byte_reader_get_size (const GstByteReader * reader)
|
||||
{
|
||||
g_return_val_if_fail (reader != NULL, 0);
|
||||
|
||||
return _gst_byte_reader_get_size_inline (reader);
|
||||
}
|
||||
|
||||
|
@ -237,8 +231,6 @@ gst_byte_reader_get_size (const GstByteReader * reader)
|
|||
gboolean
|
||||
gst_byte_reader_skip (GstByteReader * reader, guint nbytes)
|
||||
{
|
||||
g_return_val_if_fail (reader != NULL, FALSE);
|
||||
|
||||
return _gst_byte_reader_skip_inline (reader, nbytes);
|
||||
}
|
||||
|
||||
|
@ -711,18 +703,12 @@ gst_byte_reader_skip (GstByteReader * reader, guint nbytes)
|
|||
gboolean \
|
||||
gst_byte_reader_get_##name (GstByteReader * reader, type * val) \
|
||||
{ \
|
||||
g_return_val_if_fail (reader != NULL, FALSE); \
|
||||
g_return_val_if_fail (val != NULL, FALSE); \
|
||||
\
|
||||
return _gst_byte_reader_get_##name##_inline (reader, val); \
|
||||
} \
|
||||
\
|
||||
gboolean \
|
||||
gst_byte_reader_peek_##name (GstByteReader * reader, type * val) \
|
||||
{ \
|
||||
g_return_val_if_fail (reader != NULL, FALSE); \
|
||||
g_return_val_if_fail (val != NULL, FALSE); \
|
||||
\
|
||||
return _gst_byte_reader_peek_##name##_inline (reader, val); \
|
||||
}
|
||||
|
||||
|
@ -881,9 +867,6 @@ gboolean
|
|||
gst_byte_reader_get_data (GstByteReader * reader, guint size,
|
||||
const guint8 ** val)
|
||||
{
|
||||
g_return_val_if_fail (reader != NULL, FALSE);
|
||||
g_return_val_if_fail (val != NULL, FALSE);
|
||||
|
||||
return _gst_byte_reader_get_data_inline (reader, size, val);
|
||||
}
|
||||
|
||||
|
@ -906,9 +889,6 @@ gboolean
|
|||
gst_byte_reader_peek_data (GstByteReader * reader, guint size,
|
||||
const guint8 ** val)
|
||||
{
|
||||
g_return_val_if_fail (reader != NULL, FALSE);
|
||||
g_return_val_if_fail (val != NULL, FALSE);
|
||||
|
||||
return _gst_byte_reader_peek_data_inline (reader, size, val);
|
||||
}
|
||||
|
||||
|
@ -929,9 +909,6 @@ gst_byte_reader_peek_data (GstByteReader * reader, guint size,
|
|||
gboolean
|
||||
gst_byte_reader_dup_data (GstByteReader * reader, guint size, guint8 ** val)
|
||||
{
|
||||
g_return_val_if_fail (reader != NULL, FALSE);
|
||||
g_return_val_if_fail (val != NULL, FALSE);
|
||||
|
||||
return _gst_byte_reader_dup_data_inline (reader, size, val);
|
||||
}
|
||||
|
||||
|
|
|
@ -169,7 +169,6 @@ guint gst_byte_reader_masked_scan_uint32 (GstByteReader * reader,
|
|||
|
||||
|
||||
/* unchecked variants */
|
||||
|
||||
static inline void
|
||||
gst_byte_reader_skip_unchecked (GstByteReader * reader, guint nbytes)
|
||||
{
|
||||
|
@ -250,39 +249,68 @@ gst_byte_reader_dup_data_unchecked (GstByteReader * reader, guint size)
|
|||
return g_memdup (gst_byte_reader_get_data_unchecked (reader, size), size);
|
||||
}
|
||||
|
||||
/* inlined variants (do not use directly) */
|
||||
/* Unchecked variants that should not be used */
|
||||
static inline guint
|
||||
_gst_byte_reader_get_pos_unchecked (const GstByteReader * reader)
|
||||
{
|
||||
return reader->byte;
|
||||
}
|
||||
|
||||
static inline guint
|
||||
_gst_byte_reader_get_remaining_inline (const GstByteReader * reader)
|
||||
_gst_byte_reader_get_remaining_unchecked (const GstByteReader * reader)
|
||||
{
|
||||
return reader->size - reader->byte;
|
||||
}
|
||||
|
||||
static inline guint
|
||||
_gst_byte_reader_get_size_inline (const GstByteReader * reader)
|
||||
_gst_byte_reader_get_size_unchecked (const GstByteReader * reader)
|
||||
{
|
||||
return reader->size;
|
||||
}
|
||||
|
||||
/* inlined variants (do not use directly) */
|
||||
|
||||
static inline guint
|
||||
_gst_byte_reader_get_remaining_inline (const GstByteReader * reader)
|
||||
{
|
||||
g_return_val_if_fail (reader != NULL, 0);
|
||||
|
||||
return _gst_byte_reader_get_remaining_unchecked (reader);
|
||||
}
|
||||
|
||||
static inline guint
|
||||
_gst_byte_reader_get_size_inline (const GstByteReader * reader)
|
||||
{
|
||||
g_return_val_if_fail (reader != NULL, 0);
|
||||
|
||||
return _gst_byte_reader_get_size_unchecked (reader);
|
||||
}
|
||||
|
||||
#define __GST_BYTE_READER_GET_PEEK_BITS_INLINE(bits,type,name) \
|
||||
\
|
||||
static inline gboolean \
|
||||
_gst_byte_reader_peek_##name##_inline (GstByteReader * reader, type * val) \
|
||||
{ \
|
||||
if (_gst_byte_reader_get_remaining_inline (reader) < (bits / 8)) \
|
||||
g_return_val_if_fail (reader != NULL, FALSE); \
|
||||
g_return_val_if_fail (val != NULL, FALSE); \
|
||||
\
|
||||
if (_gst_byte_reader_get_remaining_unchecked (reader) < (bits / 8)) \
|
||||
return FALSE; \
|
||||
\
|
||||
*val = gst_byte_reader_peek_##name##_unchecked (reader); \
|
||||
*val = gst_byte_reader_peek_##name##_unchecked (reader); \
|
||||
return TRUE; \
|
||||
} \
|
||||
\
|
||||
static inline gboolean \
|
||||
_gst_byte_reader_get_##name##_inline (GstByteReader * reader, type * val) \
|
||||
{ \
|
||||
if (_gst_byte_reader_get_remaining_inline (reader) < (bits / 8)) \
|
||||
g_return_val_if_fail (reader != NULL, FALSE); \
|
||||
g_return_val_if_fail (val != NULL, FALSE); \
|
||||
\
|
||||
if (_gst_byte_reader_get_remaining_unchecked (reader) < (bits / 8)) \
|
||||
return FALSE; \
|
||||
\
|
||||
*val = gst_byte_reader_get_##name##_unchecked (reader); \
|
||||
*val = gst_byte_reader_get_##name##_unchecked (reader); \
|
||||
return TRUE; \
|
||||
}
|
||||
|
||||
|
@ -324,6 +352,9 @@ __GST_BYTE_READER_GET_PEEK_BITS_INLINE(64,gdouble,float64_be)
|
|||
#define gst_byte_reader_get_size(reader) \
|
||||
_gst_byte_reader_get_size_inline(reader)
|
||||
|
||||
#define gst_byte_reader_get_pos(reader) \
|
||||
_gst_byte_reader_get_pos_inline(reader)
|
||||
|
||||
/* we use defines here so we can add the G_LIKELY() */
|
||||
#define gst_byte_reader_get_uint8(reader,val) \
|
||||
G_LIKELY(_gst_byte_reader_get_uint8_inline(reader,val))
|
||||
|
@ -421,6 +452,9 @@ __GST_BYTE_READER_GET_PEEK_BITS_INLINE(64,gdouble,float64_be)
|
|||
static inline gboolean
|
||||
_gst_byte_reader_dup_data_inline (GstByteReader * reader, guint size, guint8 ** val)
|
||||
{
|
||||
g_return_val_if_fail (reader != NULL, FALSE);
|
||||
g_return_val_if_fail (val != NULL, FALSE);
|
||||
|
||||
if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_inline (reader) < size))
|
||||
return FALSE;
|
||||
|
||||
|
@ -431,6 +465,9 @@ _gst_byte_reader_dup_data_inline (GstByteReader * reader, guint size, guint8 **
|
|||
static inline gboolean
|
||||
_gst_byte_reader_get_data_inline (GstByteReader * reader, guint size, const guint8 ** val)
|
||||
{
|
||||
g_return_val_if_fail (reader != NULL, FALSE);
|
||||
g_return_val_if_fail (val != NULL, FALSE);
|
||||
|
||||
if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_inline (reader) < size))
|
||||
return FALSE;
|
||||
|
||||
|
@ -441,6 +478,9 @@ _gst_byte_reader_get_data_inline (GstByteReader * reader, guint size, const guin
|
|||
static inline gboolean
|
||||
_gst_byte_reader_peek_data_inline (GstByteReader * reader, guint size, const guint8 ** val)
|
||||
{
|
||||
g_return_val_if_fail (reader != NULL, FALSE);
|
||||
g_return_val_if_fail (val != NULL, FALSE);
|
||||
|
||||
if (G_UNLIKELY (size > reader->size || _gst_byte_reader_get_remaining_inline (reader) < size))
|
||||
return FALSE;
|
||||
|
||||
|
@ -448,10 +488,20 @@ _gst_byte_reader_peek_data_inline (GstByteReader * reader, guint size, const gui
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static inline guint
|
||||
_gst_byte_reader_get_pos_inline (const GstByteReader * reader)
|
||||
{
|
||||
g_return_val_if_fail (reader != NULL, 0);
|
||||
|
||||
return _gst_byte_reader_get_pos_unchecked (reader);
|
||||
}
|
||||
|
||||
static inline gboolean
|
||||
_gst_byte_reader_skip_inline (GstByteReader * reader, guint nbytes)
|
||||
{
|
||||
if (G_UNLIKELY (_gst_byte_reader_get_remaining_inline (reader) < nbytes))
|
||||
g_return_val_if_fail (reader != NULL, FALSE);
|
||||
|
||||
if (G_UNLIKELY (_gst_byte_reader_get_remaining_unchecked (reader) < nbytes))
|
||||
return FALSE;
|
||||
|
||||
reader->byte += nbytes;
|
||||
|
|
Loading…
Reference in a new issue