[tracker] Fix tracker_language_stem_word().



commit 393867a68efd41b73d3d4ca29e7c170f3948d98e
Author: Carlos Garnacho <carlos lanedo com>
Date:   Fri Oct 9 14:52:47 2009 +0200

    Fix tracker_language_stem_word().
    
    the case with stemming disabled was completely broken, not taking into account
    word_length, and returning a dup'ed string as const gchar*. Made it more
    consistent by always returning a duplicated string, and taking into account
    word_length in non-stemmer case. The only caller has been updated as well.

 src/libtracker-common/tracker-language.c |   10 +++++++---
 src/libtracker-common/tracker-language.h |    2 +-
 src/libtracker-fts/tracker-parser.c      |   13 +++++--------
 3 files changed, 13 insertions(+), 12 deletions(-)
---
diff --git a/src/libtracker-common/tracker-language.c b/src/libtracker-common/tracker-language.c
index 1f51b74..a470615 100644
--- a/src/libtracker-common/tracker-language.c
+++ b/src/libtracker-common/tracker-language.c
@@ -461,7 +461,7 @@ tracker_language_set_language_code (TrackerLanguage *language,
  * Returns: a string with the processed word. This string must be
  *          freed with g_free()
  **/
-const gchar *
+gchar *
 tracker_language_stem_word (TrackerLanguage *language,
 			    const gchar     *word,
 			    gint	     word_length)
@@ -471,10 +471,14 @@ tracker_language_stem_word (TrackerLanguage *language,
 
 	g_return_val_if_fail (TRACKER_IS_LANGUAGE (language), NULL);
 
+	if (word_length < 0) {
+		word_length = strlen (word);
+	}
+
 	priv = GET_PRIV (language);
 
 	if (!priv->enable_stemmer) {
-		return g_strdup (word);
+		return g_strndup (word, word_length);
 	}
 
 	g_mutex_lock (priv->stemmer_mutex);
@@ -485,7 +489,7 @@ tracker_language_stem_word (TrackerLanguage *language,
 
 	g_mutex_unlock (priv->stemmer_mutex);
 
-	return stem_word;
+	return g_strdup (stem_word);
 }
 
 /**
diff --git a/src/libtracker-common/tracker-language.h b/src/libtracker-common/tracker-language.h
index 99878e6..5ffc1d1 100644
--- a/src/libtracker-common/tracker-language.h
+++ b/src/libtracker-common/tracker-language.h
@@ -60,7 +60,7 @@ void             tracker_language_set_enable_stemmer (TrackerLanguage *language,
 void             tracker_language_set_language_code  (TrackerLanguage *language,
 						      const gchar     *language_code);
 
-const gchar *    tracker_language_stem_word          (TrackerLanguage *language,
+gchar *          tracker_language_stem_word          (TrackerLanguage *language,
 						      const gchar     *word,
 						      gint             word_length);
 
diff --git a/src/libtracker-fts/tracker-parser.c b/src/libtracker-fts/tracker-parser.c
index 4f880fd..8cfe327 100644
--- a/src/libtracker-fts/tracker-parser.c
+++ b/src/libtracker-fts/tracker-parser.c
@@ -557,10 +557,10 @@ tracker_parser_process_word (TrackerParser *parser,
 			     gint	    length,
 			     gboolean	    do_strip)
 {
-	const gchar *stem_word;
-	gchar	    *str;
-	gchar	    *stripped_word;
-	guint	     bytes, len;
+	gchar *stem_word;
+	gchar *str;
+	gchar *stripped_word;
+	guint  bytes, len;
 
 	g_return_val_if_fail (parser != NULL, NULL);
 	g_return_val_if_fail (word != NULL, NULL);
@@ -601,12 +601,9 @@ tracker_parser_process_word (TrackerParser *parser,
 		stem_word = tracker_language_stem_word (parser->language, str, len);
 
 		if (stem_word) {
-			gchar *result;
-
-			result = g_strdup (stem_word);
 			g_free (str);
 
-			return result;
+			return stem_word;
 		}
 	}
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]