[glib/wip/3v1n0/regex-pcre2-flags-fixes: 2/7] gregex: Avoid re-allocating if we have no size change
- From: Marco Trevisan <marcotrevi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib/wip/3v1n0/regex-pcre2-flags-fixes: 2/7] gregex: Avoid re-allocating if we have no size change
- Date: Fri, 9 Sep 2022 16:34:46 +0000 (UTC)
commit c3baca0b25ab70d5f4693bd14e3f13bfac9dfe72
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date: Tue Sep 6 18:56:39 2022 +0200
gregex: Avoid re-allocating if we have no size change
This is handled by the syscall underneath, but we can just avoid a call
cheaply.
glib/gregex.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
---
diff --git a/glib/gregex.c b/glib/gregex.c
index 84c4245753..cf86f0fe0d 100644
--- a/glib/gregex.c
+++ b/glib/gregex.c
@@ -832,6 +832,7 @@ recalc_match_offsets (GMatchInfo *match_info,
GError **error)
{
PCRE2_SIZE *ovector;
+ uint32_t pre_n_offset;
uint32_t i;
if (pcre2_get_ovector_count (match_info->match_data) > G_MAXUINT32 / 2)
@@ -842,11 +843,17 @@ recalc_match_offsets (GMatchInfo *match_info,
return FALSE;
}
+ pre_n_offset = match_info->n_offsets;
match_info->n_offsets = pcre2_get_ovector_count (match_info->match_data) * 2;
ovector = pcre2_get_ovector_pointer (match_info->match_data);
- match_info->offsets = g_realloc_n (match_info->offsets,
- match_info->n_offsets,
- sizeof (gint));
+
+ if (match_info->n_offsets != pre_n_offset)
+ {
+ match_info->offsets = g_realloc_n (match_info->offsets,
+ match_info->n_offsets,
+ sizeof (gint));
+ }
+
for (i = 0; i < match_info->n_offsets; i++)
{
match_info->offsets[i] = (int) ovector[i];
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]