}
/**
+ * g_string_replace:
+ * @string: a #GString
+ * @find: the string to find in @string
+ * @replace: the string to insert in place of @find
+ * @limit: the maximum instances of @find to replace with @replace, or `0` for
+ * no limit
+ *
+ * Replaces the string @find with the string @replace in a #GString up to
+ * @limit times. If the number of instances of @find in the #GString is
+ * less than @limit, all instances are replaced. If the number of
+ * instances is `0`, all instances of @find are replaced.
+ *
+ * Returns: the number of find and replace operations performed.
+ *
+ * Since: 2.68
+ */
+guint
+g_string_replace (GString *string,
+ const gchar *find,
+ const gchar *replace,
+ guint limit)
+{
+ gsize f_len, r_len, pos;
+ gchar *cur, *next;
+ gint 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++;
+ if (n == limit)
+ break;
+ }
+
+ return n;
+}
+
+/**
* g_string_ascii_down:
* @string: a GString
*