/* * Copyright © 2014 Red Hat, Inc * Copyright © 2021 Joshua Lee * Copyright © 2021 Emmanuel Fleury * Copyright © 2021 Nelson Ben * Copyright © 2021 Peter Bloomfield * Copyright © 2021 Collabora Ltd. * Copyright 2023 Igalia * * This program 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, see . */ #include "config.h" #include #include "glib-backports.h" #if !GLIB_CHECK_VERSION (2, 68, 0) /* All this code is backported directly from glib */ guint g_string_replace (GString *string, const gchar *find, const gchar *replace, guint limit) { gsize f_len, r_len, pos; gchar *cur, *next; guint n = 0; g_return_val_if_fail (string != NULL, 0); g_return_val_if_fail (find != NULL, 0); g_return_val_if_fail (replace != NULL, 0); f_len = strlen (find); r_len = strlen (replace); cur = string->str; while ((next = strstr (cur, find)) != NULL) { pos = next - string->str; g_string_erase (string, pos, f_len); g_string_insert (string, pos, replace); cur = string->str + pos + r_len; n++; /* Only match the empty string once at any given position, to * avoid infinite loops */ if (f_len == 0) { if (cur[0] == '\0') break; else cur++; } if (n == limit) break; } return n; } #endif /* GLIB_CHECK_VERSION (2, 68, 0) */