mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2026-03-11 05:33:58 -04:00
bluez5: clean up LTV writing
Add ltv_writer that checks bounds, and use it. Simplify code a bit.
This commit is contained in:
parent
f9f08f7f5c
commit
bf801f4f7f
5 changed files with 118 additions and 96 deletions
|
|
@ -8,6 +8,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <bluetooth/bluetooth.h>
|
||||
|
||||
#include <spa/utils/string.h>
|
||||
#include <spa/utils/cleanup.h>
|
||||
|
||||
|
|
@ -100,6 +102,52 @@ bool media_codec_check_caps(const struct media_codec *codec, unsigned int codec_
|
|||
return ((size_t)res == caps_size);
|
||||
}
|
||||
|
||||
void ltv_writer_data(struct ltv_writer *w, uint8_t type, void* value, size_t len)
|
||||
{
|
||||
struct ltv *ltv;
|
||||
size_t sz = (size_t)w->size + sizeof(struct ltv) + len;
|
||||
|
||||
if (!w->buf || sz > w->max_size || (uint16_t)sz != sz) {
|
||||
w->buf = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
ltv = SPA_PTROFF(w->buf, w->size, struct ltv);
|
||||
ltv->len = len + 1;
|
||||
ltv->type = type;
|
||||
memcpy(ltv->value, value, len);
|
||||
|
||||
w->size = sz;
|
||||
}
|
||||
|
||||
void ltv_writer_uint8(struct ltv_writer *w, uint8_t type, uint8_t v)
|
||||
{
|
||||
ltv_writer_data(w, type, &v, sizeof(v));
|
||||
}
|
||||
|
||||
void ltv_writer_uint16(struct ltv_writer *w, uint8_t type, uint16_t value)
|
||||
{
|
||||
uint16_t v = htobs(value);
|
||||
|
||||
ltv_writer_data(w, type, &v, sizeof(v));
|
||||
}
|
||||
|
||||
void ltv_writer_uint32(struct ltv_writer *w, uint8_t type, uint32_t value)
|
||||
{
|
||||
uint32_t v = htobl(value);
|
||||
|
||||
ltv_writer_data(w, type, &v, sizeof(v));
|
||||
}
|
||||
|
||||
int ltv_writer_end(struct ltv_writer *w)
|
||||
{
|
||||
if (!w->buf)
|
||||
return -ENOSPC;
|
||||
|
||||
w->buf = NULL;
|
||||
return w->size;
|
||||
}
|
||||
|
||||
#ifdef CODEC_PLUGIN
|
||||
|
||||
struct impl {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue