libmm-common: new common uint/int/str parsers

This commit is contained in:
Aleksander Morgado
2012-03-18 17:28:14 +01:00
parent 3046059aff
commit 46d16d5c99
6 changed files with 166 additions and 148 deletions
+96
View File
@@ -14,6 +14,8 @@
*/
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <gio/gio.h>
#include <ModemManager.h>
@@ -500,3 +502,97 @@ mm_common_parse_key_value_string (const gchar *str,
return TRUE;
}
/*****************************************************************************/
gboolean
mm_get_int_from_str (const gchar *str,
gint *out)
{
glong num;
errno = 0;
num = strtol (str, NULL, 10);
if (!errno && num >= G_MININT && num <= G_MAXINT) {
*out = (gint)num;
return TRUE;
}
return FALSE;
}
gboolean
mm_get_int_from_match_info (GMatchInfo *match_info,
guint32 match_index,
gint *out)
{
gchar *s;
gboolean ret;
s = g_match_info_fetch (match_info, match_index);
g_return_val_if_fail (s != NULL, FALSE);
ret = mm_get_int_from_str (s, out);
g_free (s);
return ret;
}
gboolean
mm_get_uint_from_str (const gchar *str,
guint *out)
{
gulong num;
errno = 0;
num = strtoul (str, NULL, 10);
if (!errno && num <= G_MAXUINT) {
*out = (guint)num;
return TRUE;
}
return FALSE;
}
gboolean
mm_get_uint_from_match_info (GMatchInfo *match_info,
guint32 match_index,
guint *out)
{
gchar *s;
gboolean ret;
s = g_match_info_fetch (match_info, match_index);
g_return_val_if_fail (s != NULL, FALSE);
ret = mm_get_uint_from_str (s, out);
g_free (s);
return ret;
}
gchar *
mm_get_string_unquoted_from_match_info (GMatchInfo *match_info,
guint32 match_index)
{
gchar *str;
gsize len;
str = g_match_info_fetch (match_info, match_index);
if (!str)
return NULL;
len = strlen (str);
/* Unquote the item if needed */
if ((len >= 2) && (str[0] == '"') && (str[len - 1] == '"')) {
str[0] = ' ';
str[len - 1] = ' ';
str = g_strstrip (str);
}
if (!str[0]) {
g_free (str);
return NULL;
}
return str;
}
+15 -1
View File
@@ -10,7 +10,8 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details:
*
* Copyright (C) 2011 - Google, Inc.
* Copyright (C) 2011 - 2012 Google, Inc.
* Copyright (C) 2012 Aleksander Morgado <aleksander@gnu.org>
*/
#include <glib.h>
@@ -56,5 +57,18 @@ gboolean mm_common_parse_key_value_string (const gchar *str,
MMParseKeyValueForeachFn callback,
gpointer user_data);
/* Common parsers */
gboolean mm_get_int_from_str (const gchar *str,
gint *out);
gboolean mm_get_int_from_match_info (GMatchInfo *match_info,
guint32 match_index,
gint *out);
gboolean mm_get_uint_from_str (const gchar *str,
guint *out);
gboolean mm_get_uint_from_match_info (GMatchInfo *match_info,
guint32 match_index,
guint *out);
gchar *mm_get_string_unquoted_from_match_info (GMatchInfo *match_info,
guint32 match_index);
#endif /* MM_COMMON_HELPERS_H */