On Fri, Feb 28, 2014 at 08:47:45PM +0100, Jacob Erlbeck wrote:
Good morning Jacob,
as usual thank you very much for your work.
This function works like osmo_hexdump() and return a static buffer
^ returns
containing hex bytes along with markes for the layers.
^ markers
+/*! \brief Return (static) buffer containing a hexdump of the msg
^ Return "a"
+const char *msgb_hexdump(const struct msgb *msg) +{
- static char buf[4100];
- int buf_offs = 0;
- int nchars;
- const unsigned char *start = msg->data;
- const unsigned char *lxhs[4];
- int i;
- lxhs[0] = msg->l1h;
- lxhs[1] = msg->l2h;
- lxhs[2] = msg->l3h;
- lxhs[3] = msg->l4h;
- for (i = 0; i < ARRAY_SIZE(lxhs); i++) {
if (lxhs[i]) {
if (!lxhs[i]) continue;
This avoids having the show at three levels of indention in.
nchars = snprintf(buf + buf_offs, sizeof(buf) - buf_offs,"%s[L%d]> ",osmo_hexdump(start, lxhs[i] - start),i+1);
- nchars = snprintf(buf + buf_offs, sizeof(buf) - buf_offs,
"%s", osmo_hexdump(start, msg->tail - start));- nchars = snprintf(buf, sizeof(buf) - buf_offs,
"!!! L%d out of range", i+1);
So sizeof(buf) - buf_offs can only be 0 when the output is already null terminated?
kind regards holger