From 8e1bdb88552984fb22d2546b3fcbf9296ae41454 Mon Sep 17 00:00:00 2001 From: Erik Boasson Date: Mon, 9 Jul 2018 11:22:31 +0200 Subject: [PATCH] add a function to get the address and size of serialised data Signed-off-by: Erik Boasson --- src/core/ddsi/include/ddsi/ddsi_ser.h | 2 ++ src/core/ddsi/src/ddsi_ser.c | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/core/ddsi/include/ddsi/ddsi_ser.h b/src/core/ddsi/include/ddsi/ddsi_ser.h index d8f4506..5ac849d 100644 --- a/src/core/ddsi/include/ddsi/ddsi_ser.h +++ b/src/core/ddsi/include/ddsi/ddsi_ser.h @@ -189,4 +189,6 @@ void * ddsi_serstate_append (serstate_t st, size_t n); void * ddsi_serstate_append_align (serstate_t st, size_t a); void * ddsi_serstate_append_aligned (serstate_t st, size_t n, size_t a); +OSAPI_EXPORT void ddsi_serdata_getblob (void **raw, size_t *sz, serdata_t serdata); + #endif diff --git a/src/core/ddsi/src/ddsi_ser.c b/src/core/ddsi/src/ddsi_ser.c index eef360e..2fe02c5 100644 --- a/src/core/ddsi/src/ddsi_ser.c +++ b/src/core/ddsi/src/ddsi_ser.c @@ -140,6 +140,21 @@ uint32_t ddsi_serdata_size (const struct serdata *serdata) return (uint32_t) (sizeof (struct CDRHeader) + st->pos); } +void ddsi_serdata_getblob (void **raw, size_t *sz, serdata_t serdata) +{ + const struct serstate *st = serdata->v.st; + if (serdata->v.st->kind == STK_EMPTY) + { + *sz = 0; + *raw = NULL; + } + else + { + *sz = sizeof (struct CDRHeader) + st->pos; + *raw = &serdata->hdr; + } +} + int ddsi_serdata_is_key (const struct serdata * serdata) { return serdata->v.st->kind == STK_KEY;