mm-common-helpers: add mm_autoptr helpers for GRegex and GMatchInfo
Alias them to g_autoptr() on glib >= 2.44, otherwise re-implement.
This commit is contained in:
@@ -174,4 +174,27 @@ gboolean mm_utils_ishexstr (const gchar *hex);
|
|||||||
|
|
||||||
gboolean mm_utils_check_for_single_value (guint32 value);
|
gboolean mm_utils_check_for_single_value (guint32 value);
|
||||||
|
|
||||||
|
#if GLIB_CHECK_VERSION(2, 44, 0)
|
||||||
|
#define mm_autoptr g_autoptr
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* Re-implement for those glib that don't have it */
|
||||||
|
#define _MM_AUTOPTR_FUNC_NAME(TypeName) mm_autoptr_cleanup_##TypeName
|
||||||
|
#define _MM_AUTOPTR_TYPENAME(TypeName) TypeName##_autoptr
|
||||||
|
#define _MM_CLEANUP(func) __attribute__((cleanup(func)))
|
||||||
|
|
||||||
|
#define _MM_DEFINE_AUTOPTR_CLEANUP_FUNCS(TypeName, cleanup) \
|
||||||
|
typedef TypeName *_MM_AUTOPTR_TYPENAME(TypeName); \
|
||||||
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
|
||||||
|
static G_GNUC_UNUSED inline void _MM_AUTOPTR_FUNC_NAME(TypeName) (TypeName **_ptr) \
|
||||||
|
{ if (_ptr && *_ptr) (cleanup) (*_ptr); } \
|
||||||
|
G_GNUC_END_IGNORE_DEPRECATIONS
|
||||||
|
|
||||||
|
#define mm_autoptr(TypeName) _MM_CLEANUP(_MM_AUTOPTR_FUNC_NAME(TypeName)) _MM_AUTOPTR_TYPENAME(TypeName)
|
||||||
|
|
||||||
|
_MM_DEFINE_AUTOPTR_CLEANUP_FUNCS(GRegex, g_regex_unref)
|
||||||
|
_MM_DEFINE_AUTOPTR_CLEANUP_FUNCS(GMatchInfo, g_match_info_unref)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* MM_COMMON_HELPERS_H */
|
#endif /* MM_COMMON_HELPERS_H */
|
||||||
|
@@ -71,8 +71,8 @@ gchar *
|
|||||||
mm_altair_parse_ceer_response (const gchar *response,
|
mm_altair_parse_ceer_response (const gchar *response,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
GRegex *r;
|
g_autoptr(GRegex) r = NULL;
|
||||||
GMatchInfo *match_info = NULL;
|
g_autoptr(GMatchInfo) match_info = NULL;
|
||||||
gchar *ceer_response = NULL;
|
gchar *ceer_response = NULL;
|
||||||
|
|
||||||
|
|
||||||
@@ -93,8 +93,6 @@ mm_altair_parse_ceer_response (const gchar *response,
|
|||||||
|
|
||||||
if (!g_regex_match (r, response, 0, &match_info)) {
|
if (!g_regex_match (r, response, 0, &match_info)) {
|
||||||
g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Could not parse +CEER response");
|
g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Could not parse +CEER response");
|
||||||
g_match_info_free (match_info);
|
|
||||||
g_regex_unref (r);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,8 +102,6 @@ mm_altair_parse_ceer_response (const gchar *response,
|
|||||||
ceer_response = g_strdup ("");
|
ceer_response = g_strdup ("");
|
||||||
}
|
}
|
||||||
|
|
||||||
g_match_info_free (match_info);
|
|
||||||
g_regex_unref (r);
|
|
||||||
return ceer_response;
|
return ceer_response;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,15 +111,13 @@ mm_altair_parse_ceer_response (const gchar *response,
|
|||||||
guint
|
guint
|
||||||
mm_altair_parse_cid (const gchar *response, GError **error)
|
mm_altair_parse_cid (const gchar *response, GError **error)
|
||||||
{
|
{
|
||||||
GRegex *regex;
|
mm_autoptr(GRegex) regex = NULL;
|
||||||
GMatchInfo *match_info;
|
mm_autoptr(GMatchInfo) match_info = NULL;
|
||||||
guint cid = -1;
|
guint cid = -1;
|
||||||
|
|
||||||
regex = g_regex_new ("\\%CGINFO:\\s*(\\d+)", G_REGEX_RAW, 0, NULL);
|
regex = g_regex_new ("\\%CGINFO:\\s*(\\d+)", G_REGEX_RAW, 0, NULL);
|
||||||
g_assert (regex);
|
g_assert (regex);
|
||||||
if (!g_regex_match_full (regex, response, strlen (response), 0, 0, &match_info, error)) {
|
if (!g_regex_match_full (regex, response, strlen (response), 0, 0, &match_info, error)) {
|
||||||
g_match_info_free (match_info);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,8 +127,6 @@ mm_altair_parse_cid (const gchar *response, GError **error)
|
|||||||
MM_CORE_ERROR_FAILED,
|
MM_CORE_ERROR_FAILED,
|
||||||
"Failed to parse %%CGINFO=\"cid\",1 response");
|
"Failed to parse %%CGINFO=\"cid\",1 response");
|
||||||
|
|
||||||
g_match_info_free (match_info);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
return cid;
|
return cid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,8 +136,8 @@ mm_altair_parse_cid (const gchar *response, GError **error)
|
|||||||
MMPco *
|
MMPco *
|
||||||
mm_altair_parse_vendor_pco_info (const gchar *pco_info, GError **error)
|
mm_altair_parse_vendor_pco_info (const gchar *pco_info, GError **error)
|
||||||
{
|
{
|
||||||
GRegex *regex;
|
g_autoptr(GRegex) regex = NULL;
|
||||||
GMatchInfo *match_info;
|
g_autoptr(GMatchInfo) match_info = NULL;
|
||||||
MMPco *pco = NULL;
|
MMPco *pco = NULL;
|
||||||
gint num_matches;
|
gint num_matches;
|
||||||
|
|
||||||
@@ -163,8 +155,6 @@ mm_altair_parse_vendor_pco_info (const gchar *pco_info, GError **error)
|
|||||||
0, NULL);
|
0, NULL);
|
||||||
g_assert (regex);
|
g_assert (regex);
|
||||||
if (!g_regex_match_full (regex, pco_info, strlen (pco_info), 0, 0, &match_info, error)) {
|
if (!g_regex_match_full (regex, pco_info, strlen (pco_info), 0, 0, &match_info, error)) {
|
||||||
g_match_info_free (match_info);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,8 +165,6 @@ mm_altair_parse_vendor_pco_info (const gchar *pco_info, GError **error)
|
|||||||
MM_CORE_ERROR_FAILED,
|
MM_CORE_ERROR_FAILED,
|
||||||
"Failed to parse substrings, number of matches: %d",
|
"Failed to parse substrings, number of matches: %d",
|
||||||
num_matches);
|
num_matches);
|
||||||
g_match_info_free (match_info);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -288,8 +276,5 @@ mm_altair_parse_vendor_pco_info (const gchar *pco_info, GError **error)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_match_info_free (match_info);
|
|
||||||
g_regex_unref (regex);
|
|
||||||
|
|
||||||
return pco;
|
return pco;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user