[PATCH v2 1/3] mbim-common: turn __mbim_utils_str_hex into mbim_common_str_hex

Aleksander Morgado aleksander at aleksander.es
Fri Jul 28 07:51:21 UTC 2017


On 28/07/17 04:45, Ben Chan wrote:
> __mbim_utils_str_hex is a useful utility method for returning a hexadecimal
> string representation of a sequence of bytes in memory. This patch turns it
> into 'mbim_common_str_hex', which can be shared between libmbim-glib and
> mbimcli.
> ---

Pushed to git master, thanks.

>  configure.ac                                 |  7 ++++
>  src/Makefile.am                              |  2 +-
>  src/common/Makefile.am                       | 15 +++++++
>  src/common/mbim-common.c                     | 61 ++++++++++++++++++++++++++++
>  src/common/mbim-common.h                     | 31 ++++++++++++++
>  src/libmbim-glib/Makefile.am                 |  2 +
>  src/libmbim-glib/mbim-device.c               | 15 +++----
>  src/libmbim-glib/mbim-utils.c                | 36 ----------------
>  src/libmbim-glib/mbim-utils.h                |  3 --
>  src/libmbim-glib/test/Makefile.am            |  4 ++
>  src/libmbim-glib/test/test-message-builder.c |  6 +--
>  src/libmbim-glib/test/test-message-parser.c  |  6 +--
>  12 files changed, 135 insertions(+), 53 deletions(-)
>  create mode 100644 src/common/Makefile.am
>  create mode 100644 src/common/mbim-common.c
>  create mode 100644 src/common/mbim-common.h
> 
> diff --git a/configure.ac b/configure.ac
> index b05333e..b3ecb7e 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -67,6 +67,12 @@ AC_SUBST(MBIM_GLIB_LT_AGE)
>  dnl Required dependency versions
>  GLIB_MIN_VERSION=2.36
>  
> +dnl General dependencies for common
> +PKG_CHECK_MODULES(MBIM_COMMON,
> +                  glib-2.0 >= $GLIB_MIN_VERSION)
> +AC_SUBST(MBIM_COMMON_CFLAGS)
> +AC_SUBST(MBIM_COMMON_LIBS)
> +
>  dnl General dependencies for libmbim-glib
>  PKG_CHECK_MODULES(LIBMBIM_GLIB,
>                    glib-2.0 >= $GLIB_MIN_VERSION
> @@ -166,6 +172,7 @@ AC_CONFIG_FILES([Makefile
>                   data/pkg-config/Makefile
>                   data/pkg-config/mbim-glib.pc
>                   src/Makefile
> +                 src/common/Makefile
>                   src/libmbim-glib/Makefile
>                   src/libmbim-glib/mbim-version.h
>                   src/libmbim-glib/generated/Makefile
> diff --git a/src/Makefile.am b/src/Makefile.am
> index 6732c9e..068ad31 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -1,2 +1,2 @@
>  
> -SUBDIRS = libmbim-glib mbimcli mbim-proxy
> +SUBDIRS = common libmbim-glib mbimcli mbim-proxy
> diff --git a/src/common/Makefile.am b/src/common/Makefile.am
> new file mode 100644
> index 0000000..747d077
> --- /dev/null
> +++ b/src/common/Makefile.am
> @@ -0,0 +1,15 @@
> +SUBDIRS = .
> +
> +# common library, built as a noinst
> +noinst_LTLIBRARIES = libmbim-common.la
> +
> +libmbim_common_la_CPPFLAGS = \
> +	$(MBIM_COMMON_CFLAGS) \
> +	-I$(top_srcdir) \
> +	-I$(top_builddir) \
> +	-I$(top_srcdir)/src/common
> +libmbim_common_la_SOURCES = \
> +	mbim-common.h \
> +	mbim-common.c
> +libmbim_common_la_LIBADD = \
> +	$(MBIM_COMMON_LIBS)
> diff --git a/src/common/mbim-common.c b/src/common/mbim-common.c
> new file mode 100644
> index 0000000..fd9bc86
> --- /dev/null
> +++ b/src/common/mbim-common.c
> @@ -0,0 +1,61 @@
> +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
> +/*
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, write to the
> + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
> + * Boston, MA 02110-1301 USA.
> + *
> + * Copyright (C) 2013 - 2014 Aleksander Morgado <aleksander at aleksander.es>
> + * Copyright (C) 2017 Google Inc.
> + */
> +
> +#include <config.h>
> +#include <stdio.h>
> +
> +#include "mbim-common.h"
> +
> +/*****************************************************************************/
> +
> +gchar *
> +mbim_common_str_hex (gconstpointer mem,
> +                     gsize size,
> +                     gchar delimiter)
> +{
> +    const guint8 *data = mem;
> +    gsize i;
> +    gsize j;
> +    gsize new_str_length;
> +    gchar *new_str;
> +
> +    /* Get new string length. If input string has N bytes, we need:
> +     * - 1 byte for last NUL char
> +     * - 2N bytes for hexadecimal char representation of each byte...
> +     * - N-1 bytes for the separator ':'
> +     * So... a total of (1+2N+N-1) = 3N bytes are needed... */
> +    new_str_length =  3 * size;
> +
> +    /* Allocate memory for new array and initialize contents to NUL */
> +    new_str = g_malloc0 (new_str_length);
> +
> +    /* Print hexadecimal representation of each byte... */
> +    for (i = 0, j = 0; i < size; i++, j += 3) {
> +        /* Print character in output string... */
> +        snprintf (&new_str[j], 3, "%02X", data[i]);
> +        /* And if needed, add separator */
> +        if (i != (size - 1) )
> +            new_str[j + 2] = delimiter;
> +    }
> +
> +    /* Set output string */
> +    return new_str;
> +}
> diff --git a/src/common/mbim-common.h b/src/common/mbim-common.h
> new file mode 100644
> index 0000000..3b74dcd
> --- /dev/null
> +++ b/src/common/mbim-common.h
> @@ -0,0 +1,31 @@
> +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
> +/*
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, write to the
> + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
> + * Boston, MA 02110-1301 USA.
> + *
> + * Copyright (C) 2013 - 2014 Aleksander Morgado <aleksander at aleksander.es>
> + * Copyright (C) 2017 Google Inc.
> + */
> +
> +#ifndef _COMMON_MBIM_COMMON_H_
> +#define _COMMON_MBIM_COMMON_H_
> +
> +#include <glib.h>
> +
> +gchar *mbim_common_str_hex (gconstpointer mem,
> +                            gsize         size,
> +                            gchar         delimiter);
> +
> +#endif /* _COMMON_MBIM_COMMON_H_ */
> diff --git a/src/libmbim-glib/Makefile.am b/src/libmbim-glib/Makefile.am
> index d2a675d..49b2190 100644
> --- a/src/libmbim-glib/Makefile.am
> +++ b/src/libmbim-glib/Makefile.am
> @@ -8,6 +8,7 @@ libmbim_glib_core_la_CPPFLAGS = \
>  	$(GUDEV_CFLAGS) \
>  	-I$(top_srcdir) \
>  	-I$(top_builddir) \
> +	-I$(top_srcdir)/src/common \
>  	-I$(top_srcdir)/src/libmbim-glib \
>  	-I$(top_srcdir)/src/libmbim-glib/generated \
>  	-I$(top_builddir)/src/libmbim-glib \
> @@ -36,6 +37,7 @@ libmbim_glib_la_SOURCES = \
>  
>  libmbim_glib_la_LIBADD = \
>  	libmbim-glib-core.la \
> +	${top_builddir}/src/common/libmbim-common.la \
>  	${top_builddir}/src/libmbim-glib/generated/libmbim-glib-generated.la \
>  	$(LIBMBIM_GLIB_LIBS) \
>  	$(GUDEV_LIBS)
> diff --git a/src/libmbim-glib/mbim-device.c b/src/libmbim-glib/mbim-device.c
> index 612ffe1..68544af 100644
> --- a/src/libmbim-glib/mbim-device.c
> +++ b/src/libmbim-glib/mbim-device.c
> @@ -43,6 +43,7 @@
>  # include <gudev/gudev.h>
>  #endif
>  
> +#include "mbim-common.h"
>  #include "mbim-utils.h"
>  #include "mbim-device.h"
>  #include "mbim-message.h"
> @@ -495,9 +496,9 @@ process_message (MbimDevice  *self,
>      if (mbim_utils_get_traces_enabled ()) {
>          gchar *printable;
>  
> -        printable = __mbim_utils_str_hex (((GByteArray *)message)->data,
> -                                          ((GByteArray *)message)->len,
> -                                          ':');
> +        printable = mbim_common_str_hex (((GByteArray *)message)->data,
> +                                         ((GByteArray *)message)->len,
> +                                         ':');
>          g_debug ("[%s] Received message...%s\n"
>                   ">>>>>> RAW:\n"
>                   ">>>>>>   length = %u\n"
> @@ -1812,7 +1813,7 @@ device_send (MbimDevice   *self,
>      if (mbim_utils_get_traces_enabled ()) {
>          gchar *printable;
>  
> -        printable = __mbim_utils_str_hex (raw_message, raw_message_len, ':');
> +        printable = mbim_common_str_hex (raw_message, raw_message_len, ':');
>          g_debug ("[%s] Sent message...\n"
>                   "<<<<<< RAW:\n"
>                   "<<<<<<   length = %u\n"
> @@ -1847,9 +1848,9 @@ device_send (MbimDevice   *self,
>              gchar *printable_fh;
>              gchar *printable_d;
>  
> -            printable_h  = __mbim_utils_str_hex (&fragments[i].header, sizeof (fragments[i].header), ':');
> -            printable_fh = __mbim_utils_str_hex (&fragments[i].fragment_header, sizeof (fragments[i].fragment_header), ':');
> -            printable_d  = __mbim_utils_str_hex (fragments[i].data, fragments[i].data_length, ':');
> +            printable_h  = mbim_common_str_hex (&fragments[i].header, sizeof (fragments[i].header), ':');
> +            printable_fh = mbim_common_str_hex (&fragments[i].fragment_header, sizeof (fragments[i].fragment_header), ':');
> +            printable_d  = mbim_common_str_hex (fragments[i].data, fragments[i].data_length, ':');
>              g_debug ("[%s] Sent fragment (%u)...\n"
>                       "<<<<<< RAW:\n"
>                       "<<<<<<   length = %u\n"
> diff --git a/src/libmbim-glib/mbim-utils.c b/src/libmbim-glib/mbim-utils.c
> index a7541ae..f360542 100644
> --- a/src/libmbim-glib/mbim-utils.c
> +++ b/src/libmbim-glib/mbim-utils.c
> @@ -38,42 +38,6 @@
>   * with the MBIM library.
>   **/
>  
> -/*****************************************************************************/
> -
> -gchar *
> -__mbim_utils_str_hex (gconstpointer mem,
> -                      gsize size,
> -                      gchar delimiter)
> -{
> -    const guint8 *data = mem;
> -    gsize i;
> -    gsize j;
> -    gsize new_str_length;
> -    gchar *new_str;
> -
> -    /* Get new string length. If input string has N bytes, we need:
> -     * - 1 byte for last NUL char
> -     * - 2N bytes for hexadecimal char representation of each byte...
> -     * - N-1 bytes for the separator ':'
> -     * So... a total of (1+2N+N-1) = 3N bytes are needed... */
> -    new_str_length =  3 * size;
> -
> -    /* Allocate memory for new array and initialize contents to NUL */
> -    new_str = g_malloc0 (new_str_length);
> -
> -    /* Print hexadecimal representation of each byte... */
> -    for (i = 0, j = 0; i < size; i++, j += 3) {
> -        /* Print character in output string... */
> -        snprintf (&new_str[j], 3, "%02X", data[i]);
> -        /* And if needed, add separator */
> -        if (i != (size - 1) )
> -            new_str[j + 2] = delimiter;
> -    }
> -
> -    /* Set output string */
> -    return new_str;
> -}
> -
>  /*****************************************************************************/
>  gboolean
>  __mbim_user_allowed (uid_t uid,
> diff --git a/src/libmbim-glib/mbim-utils.h b/src/libmbim-glib/mbim-utils.h
> index ee5632f..77ed4ca 100644
> --- a/src/libmbim-glib/mbim-utils.h
> +++ b/src/libmbim-glib/mbim-utils.h
> @@ -39,9 +39,6 @@ void     mbim_utils_set_traces_enabled (gboolean enabled);
>  /* Other private methods */
>  
>  #if defined (LIBMBIM_GLIB_COMPILATION)
> -gchar *__mbim_utils_str_hex (gconstpointer mem,
> -                             gsize         size,
> -                             gchar         delimiter);
>  gboolean __mbim_user_allowed (uid_t uid,
>                                GError **error);
>  #endif
> diff --git a/src/libmbim-glib/test/Makefile.am b/src/libmbim-glib/test/Makefile.am
> index cddfb26..d492ed8 100644
> --- a/src/libmbim-glib/test/Makefile.am
> +++ b/src/libmbim-glib/test/Makefile.am
> @@ -69,11 +69,13 @@ test_message_parser_SOURCES = \
>  test_message_parser_CPPFLAGS = \
>  	$(LIBMBIM_GLIB_CFLAGS) \
>  	-I$(top_srcdir) \
> +	-I$(top_srcdir)/src/common \
>  	-I$(top_srcdir)/src/libmbim-glib \
>  	-I$(top_builddir)/src/libmbim-glib \
>  	-I$(top_builddir)/src/libmbim-glib/generated \
>  	-DLIBMBIM_GLIB_COMPILATION
>  test_message_parser_LDADD = \
> +	$(top_builddir)/src/common/libmbim-common.la \
>  	$(top_builddir)/src/libmbim-glib/libmbim-glib-core.la \
>  	$(top_builddir)/src/libmbim-glib/generated/libmbim-glib-generated.la \
>  	$(LIBMBIM_GLIB_LIBS)
> @@ -83,11 +85,13 @@ test_message_builder_SOURCES = \
>  test_message_builder_CPPFLAGS = \
>  	$(LIBMBIM_GLIB_CFLAGS) \
>  	-I$(top_srcdir) \
> +	-I$(top_srcdir)/src/common \
>  	-I$(top_srcdir)/src/libmbim-glib \
>  	-I$(top_builddir)/src/libmbim-glib \
>  	-I$(top_builddir)/src/libmbim-glib/generated \
>  	-DLIBMBIM_GLIB_COMPILATION
>  test_message_builder_LDADD = \
> +	$(top_builddir)/src/common/libmbim-common.la \
>  	$(top_builddir)/src/libmbim-glib/libmbim-glib-core.la \
>  	$(top_builddir)/src/libmbim-glib/generated/libmbim-glib-generated.la \
>  	$(LIBMBIM_GLIB_LIBS)
> diff --git a/src/libmbim-glib/test/test-message-builder.c b/src/libmbim-glib/test/test-message-builder.c
> index 18fd29d..c467eef 100644
> --- a/src/libmbim-glib/test/test-message-builder.c
> +++ b/src/libmbim-glib/test/test-message-builder.c
> @@ -20,7 +20,7 @@
>  #include "mbim-message-private.h"
>  #include "mbim-cid.h"
>  #include "mbim-enums.h"
> -#include "mbim-utils.h"
> +#include "mbim-common.h"
>  #include "mbim-basic-connect.h"
>  #include "mbim-ussd.h"
>  #include "mbim-auth.h"
> @@ -38,8 +38,8 @@ test_message_trace (const guint8 *computed,
>      gchar *message_str;
>      gchar *expected_str;
>  
> -    message_str = __mbim_utils_str_hex (computed, computed_size, ':');
> -    expected_str = __mbim_utils_str_hex (expected, expected_size, ':');
> +    message_str = mbim_common_str_hex (computed, computed_size, ':');
> +    expected_str = mbim_common_str_hex (expected, expected_size, ':');
>  
>      /* Dump all message contents */
>      g_print ("\n"
> diff --git a/src/libmbim-glib/test/test-message-parser.c b/src/libmbim-glib/test/test-message-parser.c
> index a71c8c5..3ba4946 100644
> --- a/src/libmbim-glib/test/test-message-parser.c
> +++ b/src/libmbim-glib/test/test-message-parser.c
> @@ -24,7 +24,7 @@
>  #include "mbim-ms-firmware-id.h"
>  #include "mbim-message.h"
>  #include "mbim-cid.h"
> -#include "mbim-utils.h"
> +#include "mbim-common.h"
>  
>  #if defined ENABLE_TEST_MESSAGE_TRACES
>  static void
> @@ -36,8 +36,8 @@ test_message_trace (const guint8 *computed,
>      gchar *message_str;
>      gchar *expected_str;
>  
> -    message_str = __mbim_utils_str_hex (computed, computed_size, ':');
> -    expected_str = __mbim_utils_str_hex (expected, expected_size, ':');
> +    message_str = mbim_common_str_hex (computed, computed_size, ':');
> +    expected_str = mbim_common_str_hex (expected, expected_size, ':');
>  
>      /* Dump all message contents */
>      g_print ("\n"
> 


-- 
Aleksander
https://aleksander.es


More information about the libmbim-devel mailing list