diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-07-06 08:43:49 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-07-06 09:52:22 +0200 |
commit | b3f6aab153ebdbd88ff7202dc9b116f603105599 (patch) | |
tree | 5816bb01e3912ebc9718d5e37d70560ebb99292f /libqmi-glib/qmi-utils.c | |
parent | 5aaca4c4db46331afd7af83b1b6c5e6f9fb2200d (diff) |
qmi-codegen: allow specifying a 'fixed-size' for the string variables
String variables with the 'fixed-size' configuration will not require additional
heap allocations, they will be included directly in the input/output bundle
structure.
Diffstat (limited to 'libqmi-glib/qmi-utils.c')
-rw-r--r-- | libqmi-glib/qmi-utils.c | 45 |
1 files changed, 39 insertions, 6 deletions
diff --git a/libqmi-glib/qmi-utils.c b/libqmi-glib/qmi-utils.c index 39cf285..bc171fa 100644 --- a/libqmi-glib/qmi-utils.c +++ b/libqmi-glib/qmi-utils.c @@ -389,10 +389,27 @@ qmi_utils_read_string_from_buffer (guint8 **buffer, } void -qmi_utils_write_string_to_buffer (guint8 **buffer, - guint16 *buffer_size, - gboolean length_prefix, - gchar **in) +qmi_utils_read_fixed_size_string_from_buffer (guint8 **buffer, + guint16 *buffer_size, + guint16 fixed_size, + gchar *out) +{ + g_assert (out != NULL); + g_assert (buffer != NULL); + g_assert (buffer_size != NULL); + g_assert (fixed_size > 0); + + memcpy (out, *buffer, fixed_size); + + *buffer = &((*buffer)[fixed_size]); + *buffer_size = (*buffer_size) - fixed_size; +} + +void +qmi_utils_write_string_to_buffer (guint8 **buffer, + guint16 *buffer_size, + gboolean length_prefix, + const gchar *in) { guint16 len; @@ -400,7 +417,7 @@ qmi_utils_write_string_to_buffer (guint8 **buffer, g_assert (buffer != NULL); g_assert (buffer_size != NULL); - len = (guint16) strlen (*in); + len = (guint16) strlen (in); if (length_prefix) { guint8 len_8; @@ -410,7 +427,23 @@ qmi_utils_write_string_to_buffer (guint8 **buffer, qmi_utils_write_guint8_to_buffer (buffer, buffer_size, &len_8); } - memcpy (*buffer, *in, len); + memcpy (*buffer, in, len); *buffer = &((*buffer)[len]); *buffer_size = (*buffer_size) - len; } + +void +qmi_utils_write_fixed_size_string_to_buffer (guint8 **buffer, + guint16 *buffer_size, + guint16 fixed_size, + const gchar *in) +{ + g_assert (in != NULL); + g_assert (buffer != NULL); + g_assert (buffer_size != NULL); + g_assert (fixed_size > 0); + + memcpy (*buffer, in, fixed_size); + *buffer = &((*buffer)[fixed_size]); + *buffer_size = (*buffer_size) - fixed_size; +} |