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

Reply via email to