[vlc-devel] [PATCH 2/2] Print(Color)Msg: display 32bits ID

Rémi Denis-Courmont remi at remlab.net
Mon Nov 18 19:05:44 CET 2013


Le lundi 18 novembre 2013, 18:58:03 Rafaël Carré a écrit :
> Use simple CRC to have a unique 32bits ID even with x86_64 pointers

And when running a debugger, we get the object pointers how?

> ---
>  src/misc/messages.c | 31 +++++++++++++++++++++++++++----
>  1 file changed, 27 insertions(+), 4 deletions(-)
> 
> diff --git a/src/misc/messages.c b/src/misc/messages.c
> index 4272f1d..4f3b30b 100644
> --- a/src/misc/messages.c
> +++ b/src/misc/messages.c
> @@ -204,8 +204,29 @@ static const char msg_type[4][9] = { "", " error", "
> warning", " debug" }; #define GRAY    "\033[0m"
>  static const char msg_color[4][8] = { WHITE, RED, YELLOW, GRAY };
> 
> -/* Display size of a pointer */
> -static const int ptr_width = 2 * /* hex digits */ sizeof(uintptr_t);
> +/*
> + * crc_octets() was lamely copied from rfc 2440
> + * Copyright (C) The Internet Society (1998).  All Rights Reserved.

AFAIK, copyright on code from old RFCs is (L)GPL-icompatible.

> + */
> +#define CRC24_INIT 0xB704CEL
> +#define CRC24_POLY 0x1864CFBL
> +
> +static uint32_t crc_octets( uint8_t *octets, size_t len )
> +{
> +    uint32_t crc = CRC24_INIT;
> +    int i;
> +    while (len--)
> +    {
> +        crc ^= (*octets++) << 16;
> +        for (i = 0; i < 8; i++)
> +        {
> +            crc <<= 1;
> +            if (crc & 0x1000000)
> +                crc ^= CRC24_POLY;
> +        }
> +    }
> +    return crc & 0xFFFFFFL;
> +}
> 
>  static void PrintColorMsg (void *d, int type, const vlc_log_t *p_item,
>                             const char *format, va_list ap)
> @@ -216,10 +237,11 @@ static void PrintColorMsg (void *d, int type, const
> vlc_log_t *p_item, if (verbose < 0 || verbose < (type - VLC_MSG_ERR))
>          return;
> 
> +    uint32_t id = crc_octets((uint8_t*)&p_item->i_object_id,
> sizeof(p_item->i_object_id)); int canc = vlc_savecancel ();
> 
>      flockfile (stream);
> -    fprintf (stream, "["GREEN"%0*"PRIxPTR""GRAY"] ", ptr_width,
> p_item->i_object_id); +    fprintf (stream, "["GREEN"%08x"GRAY"] ", id);
>      if (p_item->psz_header != NULL)
>          utf8_fprintf (stream, "[%s] ", p_item->psz_header);
>      utf8_fprintf (stream, "%s %s%s: %s", p_item->psz_module,
> @@ -242,10 +264,11 @@ static void PrintMsg (void *d, int type, const
> vlc_log_t *p_item, if (verbose < 0 || verbose < (type - VLC_MSG_ERR))
>          return;
> 
> +    uint32_t id = crc_octets((uint8_t*)&p_item->i_object_id,
> sizeof(p_item->i_object_id)); int canc = vlc_savecancel ();
> 
>      flockfile (stream);
> -    fprintf (stream, "[%0*"PRIxPTR"] ", ptr_width, p_item->i_object_id);
> +    fprintf (stream, "[%08d] ", id);
>      if (p_item->psz_header != NULL)
>          utf8_fprintf (stream, "[%s] ", p_item->psz_header);
>      utf8_fprintf (stream, "%s %s%s: ", p_item->psz_module,

-- 
Rémi Denis-Courmont
http://www.remlab.net/




More information about the vlc-devel mailing list