X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Frmr%2Fcommon%2Fsrc%2Fmbuf_api.c;h=58225c457e54fc419fa38312b3f14f4877d6dcc4;hb=c8e651e15839411c85e105d16fd2ffc14c1cc1dd;hp=029dd741a8aff4496d97aa9757b0f57a642a49b3;hpb=69d7bfd7bbe046dda3afa50e0362448d60301258;p=ric-plt%2Flib%2Frmr.git diff --git a/src/rmr/common/src/mbuf_api.c b/src/rmr/common/src/mbuf_api.c index 029dd74..58225c4 100644 --- a/src/rmr/common/src/mbuf_api.c +++ b/src/rmr/common/src/mbuf_api.c @@ -40,6 +40,10 @@ #include "rmr.h" // things the users see #include "rmr_agnostic.h" // agnostic things (must be included before private) +#include "rmr_logging.h" + +//#define BUF_TOOLS_ONLY 1 +#include "tools_static.c" // ---------- some wrappers need explicit copy-in functions, also header field setters ----- @@ -280,6 +284,10 @@ extern unsigned char* rmr_get_meid( rmr_mbuf_t* mbuf, unsigned char* dest ) { The return value is the number of bytes actually coppied. If 0 bytes are coppied errno should indicate the reason. If 0 is returned and errno is 0, then size passed was 0. The state in the message is left UNCHANGED. + + Regardless of action taken (actual realloc or not) the caller's reference to mbuf + is still valid follwing the call and will point to the correct spot (same tp + buffer if no realloc needed, or the new one if there was). */ extern int rmr_set_trace( rmr_mbuf_t* msg, unsigned const char* data, int size ) { uta_mhdr_t* hdr; @@ -308,7 +316,7 @@ extern int rmr_set_trace( rmr_mbuf_t* msg, unsigned const char* data, int size ) if( len != size ) { // different sized trace data, must realloc the buffer nm = rmr_realloc_msg( msg, size ); // realloc with changed trace size - old_tp_buf = msg->tp_buf; + old_tp_buf = msg->tp_buf; // hold to repoint new mbuf at small buffer old_hdr = msg->header; msg->tp_buf = nm->tp_buf; // reference the reallocated buffer @@ -317,7 +325,7 @@ extern int rmr_set_trace( rmr_mbuf_t* msg, unsigned const char* data, int size ) msg->xaction = nm->xaction; msg->payload = nm->payload; - nm->tp_buf = old_tp_buf; // set to free + nm->tp_buf = old_tp_buf; // set to free; point to the small buffer nm->header = old_hdr; // nano frees on hdr, so must set both rmr_free_msg( nm ); @@ -429,7 +437,7 @@ extern unsigned char* rmr_get_src( rmr_mbuf_t* msg, unsigned char* dest ) { if( dest != NULL ) { hdr = msg->header; - strncpy( dest, hdr->src, RMR_MAX_SRC ); + zt_buf_fill( dest, hdr->src, RMR_MAX_SRC ); } return dest; @@ -453,11 +461,11 @@ extern unsigned char* rmr_get_srcip( rmr_mbuf_t* msg, unsigned char* dest ) { hdr = msg->header; if( HDR_VERSION( msg->header ) > 2 ) { // src ip was not present in hdr until ver 3 errno = 0; - strncpy( dest, hdr->srcip, RMR_MAX_SRC ); + zt_buf_fill( dest, hdr->srcip, RMR_MAX_SRC ); rstr = dest; } else { errno = 0; - strncpy( dest, hdr->src, RMR_MAX_SRC ); // reutrn the name:port for old messages + zt_buf_fill( dest, hdr->src, RMR_MAX_SRC ); // reutrn the name:port for old messages rstr = dest; } }