[geany/geany-plugins] d1793b: Make temporarily modifying wordchars more efficient by avoiding full string copy

Enrico Tröger git-noreply at xxxxx
Sat Jan 9 15:18:06 UTC 2016


Branch:      refs/heads/master
Author:      Enrico Tröger <enrico.troeger at uvena.de>
Committer:   Enrico Tröger <enrico.troeger at uvena.de>
Date:        Sat, 09 Jan 2016 15:18:06 UTC
Commit:      d1793bc04d64d7ef78ad5e54ea830629fe01e132
             https://github.com/geany/geany-plugins/commit/d1793bc04d64d7ef78ad5e54ea830629fe01e132

Log Message:
-----------
Make temporarily modifying wordchars more efficient by avoiding full string copy


Modified Paths:
--------------
    spellcheck/src/speller.c

Modified: spellcheck/src/speller.c
20 lines changed, 10 insertions(+), 10 deletions(-)
===================================================================
@@ -205,7 +205,7 @@ gint sc_speller_process_line(GeanyDocument *doc, gint line_number, const gchar *
 	gint wstart, wend;
 	gint suggestions_found = 0;
 	gint wordchars_len;
-	gchar *wordchars_orig;
+	gchar *wordchars;
 	GString *str;
 
 	g_return_val_if_fail(sc_speller_dict != NULL, 0);
@@ -215,14 +215,13 @@ gint sc_speller_process_line(GeanyDocument *doc, gint line_number, const gchar *
 	/* add ' (single quote) temporarily to wordchars
 	 * to be able to check for "doesn't", "isn't" and similar */
 	wordchars_len = scintilla_send_message(doc->editor->sci, SCI_GETWORDCHARS, 0, 0);
-	wordchars_orig = g_malloc0(wordchars_len + 1);
-	scintilla_send_message(doc->editor->sci, SCI_GETWORDCHARS, 0, (sptr_t)wordchars_orig);
-	if (! strchr(wordchars_orig, '\''))
+	wordchars = g_malloc0(wordchars_len + 2); /* 2 = temporarily added "'" and "\0" */
+	scintilla_send_message(doc->editor->sci, SCI_GETWORDCHARS, 0, (sptr_t)wordchars);
+	if (! strchr(wordchars, '\''))
 	{
-		GString *wordchars_new = g_string_new(wordchars_orig);
-		g_string_append_c(wordchars_new, '\'');
-		scintilla_send_message(doc->editor->sci, SCI_SETWORDCHARS, 0, (sptr_t)wordchars_new->str);
-		g_string_free(wordchars_new, TRUE);
+		/* temporarily add "'" to the wordchars */
+		wordchars[wordchars_len] = '\'';
+		scintilla_send_message(doc->editor->sci, SCI_SETWORDCHARS, 0, (sptr_t)wordchars);
 	}
 
 	str = g_string_sized_new(256);
@@ -249,9 +248,10 @@ gint sc_speller_process_line(GeanyDocument *doc, gint line_number, const gchar *
 	}
 
 	/* reset wordchars for the current document */
-	scintilla_send_message(doc->editor->sci, SCI_SETWORDCHARS, 0, (sptr_t)wordchars_orig);
+	wordchars[wordchars_len] = '\0';
+	scintilla_send_message(doc->editor->sci, SCI_SETWORDCHARS, 0, (sptr_t)wordchars);
 
-	g_free(wordchars_orig);
+	g_free(wordchars);
 	g_string_free(str, TRUE);
 	return suggestions_found;
 }



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Plugins-Commits mailing list