tracker r2631 - in trunk: . src/libtracker-common src/libtracker-data src/tracker-extract src/tracker-indexer src/tracker-indexer/modules



Author: mr
Date: Mon Dec  1 16:09:44 2008
New Revision: 2631
URL: http://svn.gnome.org/viewvc/tracker?rev=2631&view=rev

Log:
	* src/libtracker-data/tracker-data-metadata.[ch]:
	* src/libtracker-data/tracker-data-query.[ch]:
	* src/tracker-extract/tracker-extract.c:
	* src/tracker-indexer/modules/applications.c:
	* src/tracker-indexer/modules/evolution-imap.c:
	* src/tracker-indexer/modules/evolution-pop.c:
	* src/tracker-indexer/tracker-indexer.c: 
	* src/tracker-indexer/tracker-metadata-utils.c:
	* src/tracker-indexer/tracker-module-file.c: Added more variable
	checking to the tracker_data_metadata_() public API. Now all calls
	to the tracker_data_metadata_() API take a const argument and are
	copied, not inherited. This also fixes a bug where we were double
	freeing a GList.


Modified:
   trunk/ChangeLog
   trunk/src/libtracker-common/tracker-type-utils.c
   trunk/src/libtracker-common/tracker-type-utils.h
   trunk/src/libtracker-data/tracker-data-metadata.c
   trunk/src/libtracker-data/tracker-data-metadata.h
   trunk/src/libtracker-data/tracker-data-query.c
   trunk/src/libtracker-data/tracker-data-query.h
   trunk/src/tracker-extract/tracker-extract.c
   trunk/src/tracker-indexer/modules/applications.c
   trunk/src/tracker-indexer/modules/evolution-imap.c
   trunk/src/tracker-indexer/modules/evolution-pop.c
   trunk/src/tracker-indexer/tracker-indexer.c
   trunk/src/tracker-indexer/tracker-metadata-utils.c
   trunk/src/tracker-indexer/tracker-module-file.c

Modified: trunk/src/libtracker-common/tracker-type-utils.c
==============================================================================
--- trunk/src/libtracker-common/tracker-type-utils.c	(original)
+++ trunk/src/libtracker-common/tracker-type-utils.c	Mon Dec  1 16:09:44 2008
@@ -19,6 +19,8 @@
  * Boston, MA  02110-1301, USA.
  */
 
+#include "config.h"
+
 #include <string.h>
 #include <stdlib.h>
 
@@ -753,10 +755,6 @@
 	new_list = NULL;
 
 	for (l = list; l; l = l->next) {
-		if (!l->data) {
-			continue;
-		}
-
 		new_list = g_slist_prepend (new_list, g_strdup (l->data));
 	}
 
@@ -765,6 +763,27 @@
 	return new_list;
 }
 
+GList *
+tracker_glist_copy_with_string_data (GList *list)
+{
+	GList *l;
+	GList *new_list;
+
+	if (!list) {
+		return NULL;
+	}
+
+	new_list = NULL;
+
+	for (l = list; l; l = l->next) {
+		new_list = g_list_prepend (new_list, g_strdup (l->data));
+	}
+
+	new_list = g_list_reverse (new_list);
+
+	return new_list;
+}
+
 gchar *
 tracker_string_boolean_to_string_gint (const gchar *value)
 {

Modified: trunk/src/libtracker-common/tracker-type-utils.h
==============================================================================
--- trunk/src/libtracker-common/tracker-type-utils.h	(original)
+++ trunk/src/libtracker-common/tracker-type-utils.h	Mon Dec  1 16:09:44 2008
@@ -53,6 +53,7 @@
 gchar ** tracker_string_to_string_list	       (const gchar  *str);
 gchar ** tracker_gslist_to_string_list	       (GSList	     *list);
 GSList * tracker_gslist_copy_with_string_data  (GSList	     *list);
+GList *  tracker_glist_copy_with_string_data   (GList        *list);
 gchar *  tracker_string_boolean_to_string_gint (const gchar  *value);
 
 G_END_DECLS

Modified: trunk/src/libtracker-data/tracker-data-metadata.c
==============================================================================
--- trunk/src/libtracker-data/tracker-data-metadata.c	(original)
+++ trunk/src/libtracker-data/tracker-data-metadata.c	Mon Dec  1 16:09:44 2008
@@ -19,8 +19,12 @@
  * Boston, MA  02110-1301, USA.
  */
 
+#include "config.h"
+
 #include <glib.h>
+
 #include <libtracker-common/tracker-ontology.h>
+
 #include "tracker-data-metadata.h"
 
 struct TrackerDataMetadata {
@@ -78,6 +82,8 @@
 void
 tracker_data_metadata_free (TrackerDataMetadata *metadata)
 {
+	g_return_if_fail (metadata != NULL);
+
 	g_hash_table_foreach_remove (metadata->table,
 				     remove_metadata_foreach,
 				     NULL);
@@ -97,23 +103,22 @@
 void
 tracker_data_metadata_insert (TrackerDataMetadata *metadata,
 			      const gchar	  *field_name,
-			      gchar		  *value)
+			      const gchar         *value)
 {
 	TrackerField *field;
 
-	field = tracker_ontology_get_field_by_name (field_name);
+	g_return_if_fail (metadata != NULL);
+	g_return_if_fail (field_name != NULL);
+	g_return_if_fail (value != NULL);
 
-	if (!field) {
-		g_warning ("Field name '%s' has isn't described in the ontology", field_name);
-		g_free (value);
-		return;
-	}
+	field = tracker_ontology_get_field_by_name (field_name);
 
+	g_return_if_fail (TRACKER_IS_FIELD (field));
         g_return_if_fail (tracker_field_get_multiple_values (field) == FALSE);
 
 	g_hash_table_insert (metadata->table,
 			     g_object_ref (field),
-			     value);
+			     g_strdup (value));
 }
 
 /**
@@ -124,14 +129,25 @@
  *
  * Inserts a list of values into @metadata for the given @field_name.
  * The ontology has to specify that @field_name allows multiple values.
+ * 
+ * The values in @list and the list itself are copied, the caller is
+ * still responsible for the memory @list uses after calling this
+ * function. 
  **/
 void
 tracker_data_metadata_insert_values (TrackerDataMetadata *metadata,
-				     const gchar	  *field_name,
-				     GList		  *list)
+				     const gchar         *field_name,
+				     GList	         *list)
 {
 	TrackerField *field;
 
+	g_return_if_fail (metadata != NULL);
+	g_return_if_fail (field_name != NULL);
+
+	if (!list) {
+		return;
+	}
+
 	field = tracker_ontology_get_field_by_name (field_name);
 
 	g_return_if_fail (TRACKER_IS_FIELD (field));
@@ -139,7 +155,7 @@
 
 	g_hash_table_insert (metadata->table,
 			     g_object_ref (field),
-			     list);
+			     tracker_glist_copy_with_string_data (list));
 }
 
 /**
@@ -147,9 +163,11 @@
  * @metadata: A #TrackerDataMetadata
  * @field_name: Field name to look up
  *
- * Returns the value corresponding to the metadata specified by @field_name.
+ * Returns the value corresponding to the metadata specified by
+ * @field_name. 
  *
- * Returns: The value. This string is owned by @metadata and must not be modified or freed.
+ * Returns: The value. This string is owned by @metadata and must not
+ * be modified or freed. 
  **/
 G_CONST_RETURN gchar *
 tracker_data_metadata_lookup (TrackerDataMetadata *metadata,
@@ -157,6 +175,9 @@
 {
 	TrackerField *field;
 
+	g_return_if_fail (metadata != NULL);
+	g_return_if_fail (field_name != NULL);
+
 	field = tracker_ontology_get_field_by_name (field_name);
 
 	g_return_val_if_fail (TRACKER_IS_FIELD (field), NULL);
@@ -170,17 +191,22 @@
  * @metadata: A #TrackerDataMetadata
  * @field_name: Field name to look up
  *
- * Returns the value list corresponding to the metadata specified by @field_name.
+ * Returns the value list corresponding to the metadata specified by
+ * @field_name. 
  *
- * Returns: A List containing strings. Both the list and the contained strings
- *          are owned by @metadata and must not be modified or freed.
+ * Returns: A List containing strings. Both the list and the contained
+ *          strings are owned by @metadata and must not be modified or
+ *          freed. 
  **/
 G_CONST_RETURN GList *
 tracker_data_metadata_lookup_values (TrackerDataMetadata *metadata,
-				     const gchar	  *field_name)
+				     const gchar         *field_name)
 {
 	TrackerField *field;
 
+	g_return_if_fail (metadata != NULL);
+	g_return_if_fail (field_name != NULL);
+
 	field = tracker_ontology_get_field_by_name (field_name);
 
 	g_return_val_if_fail (TRACKER_IS_FIELD (field), NULL);
@@ -202,6 +228,9 @@
 			       TrackerDataMetadataForeach  func,
 			       gpointer			   user_data)
 {
+	g_return_if_fail (metadata != NULL);
+	g_return_if_fail (func != NULL);
+
 	g_hash_table_foreach (metadata->table,
 			      (GHFunc) func,
 			      user_data);
@@ -213,14 +242,17 @@
  * @func: The function to call with each metadata. 
  * @user_data: user data to pass to the function.
  *
- * Calls a function for each element in @metadata and remove the element
- * if @func returns %TRUE.
+ * Calls a function for each element in @metadata and remove the
+ * element if @func returns %TRUE. 
  **/
 void
 tracker_data_metadata_foreach_remove (TrackerDataMetadata       *metadata,
 				      TrackerDataMetadataRemove  func,
 				      gpointer		         user_data)
 {
+	g_return_if_fail (metadata != NULL);
+	g_return_if_fail (func != NULL);
+
 	g_hash_table_foreach_remove (metadata->table,
 				     (GHRFunc) func,
 				     user_data);

Modified: trunk/src/libtracker-data/tracker-data-metadata.h
==============================================================================
--- trunk/src/libtracker-data/tracker-data-metadata.h	(original)
+++ trunk/src/libtracker-data/tracker-data-metadata.h	Mon Dec  1 16:09:44 2008
@@ -39,7 +39,7 @@
 void                  tracker_data_metadata_free           (TrackerDataMetadata        *metadata);
 void                  tracker_data_metadata_insert         (TrackerDataMetadata        *metadata,
 							    const gchar                *field_name,
-							    gchar                      *value);
+							    const gchar                *value);
 void                  tracker_data_metadata_insert_values  (TrackerDataMetadata        *metadata,
 							    const gchar                *field_name,
 							    GList                      *list);

Modified: trunk/src/libtracker-data/tracker-data-query.c
==============================================================================
--- trunk/src/libtracker-data/tracker-data-query.c	(original)
+++ trunk/src/libtracker-data/tracker-data-query.c	Mon Dec  1 16:09:44 2008
@@ -318,7 +318,6 @@
 {
 	TrackerDBInterface *iface;
 	TrackerDBResultSet *result_set;
-	gchar *db_mtime_str;
 	guint db_id;
 	guint db_mtime;
 	gboolean found = FALSE;
@@ -334,6 +333,8 @@
 							     basename,
 							     NULL);
 	if (result_set) {
+		gchar *db_mtime_str;
+
 		tracker_db_result_set_get (result_set,
 					   0, &db_id,
 					   1, &db_mtime_str,
@@ -388,16 +389,13 @@
 static void
 result_set_to_metadata (TrackerDBResultSet  *result_set,
 			TrackerDataMetadata *metadata,
-			gboolean	     embedded,
-			gboolean             non_embedded)
+			gboolean	     embedded)
 {
 	TrackerField *field;
 	gint	      numeric_value;
 	gint	      metadata_id;
 	gboolean      valid = TRUE;
 
-	g_return_if_fail (non_embedded || embedded);
-
 	while (valid) {
 		GValue transform = {0, };
 		GValue value = {0, };
@@ -429,8 +427,7 @@
 			return;
 		}
 
-		if ((tracker_field_get_embedded (field) && embedded)
-		    || !tracker_field_get_embedded (field) && non_embedded) {
+		if (tracker_field_get_embedded (field) == embedded) {
 			if (tracker_field_get_multiple_values (field)) {
 				GList *new_values;
 				const GList *old_values;
@@ -439,62 +436,32 @@
 				old_values = tracker_data_metadata_lookup_values (metadata,
 										  tracker_field_get_name (field));
 				if (old_values) {
-					new_values = g_list_copy ((GList *) old_values);
+					new_values = g_list_copy ((GList*) old_values);
 				}
 
 				new_values = g_list_prepend (new_values, str);
 				tracker_data_metadata_insert_values (metadata,
 								     tracker_field_get_name (field),
 								     new_values);
+
+				g_list_free (new_values);
 			} else {
 				tracker_data_metadata_insert (metadata,
-							 tracker_field_get_name (field),
-							 str);
+							      tracker_field_get_name (field),
+							      str);
 			}
-		} else {
-			g_free (str);
 		}
 
-		valid = tracker_db_result_set_iter_next (result_set);
-	}
-}
-
-TrackerDataMetadata *
-tracker_data_query_embedded_metadata (TrackerService *service,
-				      guint32	      service_id)
-{
-	TrackerDBInterface  *iface;
-	TrackerDBResultSet  *result_set = NULL;
-	gchar		    *service_id_str;
-	TrackerDataMetadata *metadata;
-
-	metadata = tracker_data_metadata_new ();
-
-	g_return_val_if_fail (TRACKER_IS_SERVICE (service), metadata);
-
-	service_id_str = g_strdup_printf ("%d", service_id);
-	iface = tracker_db_manager_get_db_interface_by_type (tracker_service_get_name (service),
-							     TRACKER_DB_CONTENT_TYPE_METADATA);
+		g_free (str);
 
-
-	result_set = tracker_data_manager_exec_proc (iface,
-						     "GetAllMetadata", 
-						     service_id_str,
-						     service_id_str,
-						     service_id_str, NULL);
-	if (result_set) {
-		result_set_to_metadata (result_set, metadata, TRUE, FALSE);
-		g_object_unref (result_set);
+		valid = tracker_db_result_set_iter_next (result_set);
 	}
-
-	g_free (service_id_str);
-
-	return metadata;
 }
 
 TrackerDataMetadata *
-tracker_data_query_non_embedded_metadata (TrackerService *service,
-					  guint32	  service_id)
+tracker_data_query_metadata (TrackerService *service,
+			     guint32	     service_id,
+			     gboolean        embedded)
 {
 	TrackerDBInterface  *iface;
 	TrackerDBResultSet  *result_set = NULL;
@@ -516,7 +483,7 @@
 						     service_id_str,
 						     service_id_str, NULL);
 	if (result_set) {
-		result_set_to_metadata (result_set, metadata, FALSE, TRUE);
+		result_set_to_metadata (result_set, metadata, embedded);
 		g_object_unref (result_set);
 	}
 

Modified: trunk/src/libtracker-data/tracker-data-query.h
==============================================================================
--- trunk/src/libtracker-data/tracker-data-query.h	(original)
+++ trunk/src/libtracker-data/tracker-data-query.h	Mon Dec  1 16:09:44 2008
@@ -50,10 +50,9 @@
 							       const gchar         *service_type,
 							       const gchar         *service_id,
 							       gchar              **fields);
-TrackerDataMetadata *tracker_data_query_embedded_metadata     (TrackerService      *service,
-							       guint32              service_id);
-TrackerDataMetadata *tracker_data_query_non_embedded_metadata (TrackerService      *service,
-							       guint32              service_id);
+TrackerDataMetadata *tracker_data_query_metadata              (TrackerService      *service,
+							       guint32              service_id,
+							       gboolean             embedded);
 gchar *              tracker_data_query_parsed_metadata       (TrackerService      *service,
 							       guint32              service_id);
 gchar *              tracker_data_query_unparsed_metadata     (TrackerService      *service,

Modified: trunk/src/tracker-extract/tracker-extract.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract.c	(original)
+++ trunk/src/tracker-extract/tracker-extract.c	Mon Dec  1 16:09:44 2008
@@ -52,7 +52,7 @@
 #define MAX_MEM_AMD64 512
 
 
-#define DISABLE_DEBUG
+#undef DISABLE_DEBUG
 
 #ifdef G_HAVE_ISO_VARARGS
 #  ifdef DISABLE_DEBUG

Modified: trunk/src/tracker-indexer/modules/applications.c
==============================================================================
--- trunk/src/tracker-indexer/modules/applications.c	(original)
+++ trunk/src/tracker-indexer/modules/applications.c	Mon Dec  1 16:09:44 2008
@@ -106,6 +106,7 @@
 
 	if (str) {
 		tracker_data_metadata_insert (metadata, metadata_key, str);
+		g_free (str);
 	}
 }
 
@@ -136,6 +137,8 @@
 		g_free (arr);
 
 		tracker_data_metadata_insert_values (metadata, metadata_key, list);
+		g_list_foreach (list, (GFunc) g_free, NULL);
+		g_list_free (list);
 	}
 }
 
@@ -197,6 +200,7 @@
 
 	filename = g_filename_display_basename (path);
 	tracker_data_metadata_insert (metadata, METADATA_FILE_NAME, filename);
+	g_free (filename);
 
 	g_key_file_free (key_file);
 	g_free (type);

Modified: trunk/src/tracker-indexer/modules/evolution-imap.c
==============================================================================
--- trunk/src/tracker-indexer/modules/evolution-imap.c	(original)
+++ trunk/src/tracker-indexer/modules/evolution-imap.c	Mon Dec  1 16:09:44 2008
@@ -876,8 +876,9 @@
         TrackerEvolutionImapFile *self;
 	TrackerDataMetadata *metadata = NULL;
 	gchar *subject, *from, *to, *cc;
+	gchar *date;
 	gint32 i, count, flags;
-	time_t date;
+	time_t t;
 	GList *list;
 	gboolean deleted;
 
@@ -900,7 +901,7 @@
 	if (!read_summary (self->summary,
 			   SUMMARY_TYPE_UINT32, NULL,	  /* size */
 			   SUMMARY_TYPE_TIME_T, NULL,	  /* date sent */
-			   SUMMARY_TYPE_TIME_T, &date,	  /* date received */
+			   SUMMARY_TYPE_TIME_T, &t,	  /* date received */
 			   SUMMARY_TYPE_STRING, &subject, /* subject */
 			   SUMMARY_TYPE_STRING, &from,	  /* from */
 			   SUMMARY_TYPE_STRING, &to,	  /* to */
@@ -915,21 +916,32 @@
 	}
 
 	if (!deleted) {
+		gchar *date;
+
 		metadata = tracker_data_metadata_new ();
 
-		tracker_data_metadata_insert (metadata, METADATA_EMAIL_DATE,
-                                              tracker_guint_to_string (date));
+		date = tracker_guint_to_string (t);
 
+		tracker_data_metadata_insert (metadata, METADATA_EMAIL_DATE, date);
 		tracker_data_metadata_insert (metadata, METADATA_EMAIL_SENDER, from);
 		tracker_data_metadata_insert (metadata, METADATA_EMAIL_SUBJECT, subject);
 
+		g_free (date);
+
 		list = get_recipient_list (to);
 		tracker_data_metadata_insert_values (metadata, METADATA_EMAIL_SENT_TO, list);
+		g_list_foreach (list, (GFunc) g_free, NULL);
+		g_list_free (list);
 
 		list = get_recipient_list (cc);
 		tracker_data_metadata_insert_values (metadata, METADATA_EMAIL_CC, list);
+		g_list_foreach (list, (GFunc) g_free, NULL);
+		g_list_free (list);
+
 	}
 
+	g_free (subject);
+	g_free (from);
 	g_free (to);
 	g_free (cc);
 

Modified: trunk/src/tracker-indexer/modules/evolution-pop.c
==============================================================================
--- trunk/src/tracker-indexer/modules/evolution-pop.c	(original)
+++ trunk/src/tracker-indexer/modules/evolution-pop.c	Mon Dec  1 16:09:44 2008
@@ -332,25 +332,31 @@
 get_message_metadata (GMimeMessage *message)
 {
 	TrackerDataMetadata *metadata;
-	time_t date;
+	time_t t;
 	GList *list;
+	gchar *date;
 
 	metadata = tracker_data_metadata_new ();
 
-	g_mime_message_get_date (message, &date, NULL);
-	tracker_data_metadata_insert (metadata, METADATA_EMAIL_DATE,
-                                      tracker_guint_to_string (date));
-
-	tracker_data_metadata_insert (metadata, METADATA_EMAIL_SENDER,
-                                      g_strdup (g_mime_message_get_sender (message)));
-	tracker_data_metadata_insert (metadata, METADATA_EMAIL_SUBJECT,
-                                      g_strdup (g_mime_message_get_subject (message)));
+	g_mime_message_get_date (message, &t, NULL);
+
+	date = tracker_guint_to_string (t);
+
+	tracker_data_metadata_insert (metadata, METADATA_EMAIL_DATE, date);
+	tracker_data_metadata_insert (metadata, METADATA_EMAIL_SENDER, g_mime_message_get_sender (message));
+	tracker_data_metadata_insert (metadata, METADATA_EMAIL_SUBJECT, g_mime_message_get_subject (message));
+
+	g_free (date);
 
 	list = get_message_recipients (message, GMIME_RECIPIENT_TYPE_TO);
 	tracker_data_metadata_insert_values (metadata, METADATA_EMAIL_SENT_TO, list);
+	g_list_foreach (list, (GFunc) g_free, NULL);
+	g_list_free (list);
 
 	list = get_message_recipients (message, GMIME_RECIPIENT_TYPE_CC);
 	tracker_data_metadata_insert_values (metadata, METADATA_EMAIL_CC, list);
+	g_list_foreach (list, (GFunc) g_free, NULL);
+	g_list_free (list);
 
 	return metadata;
 }

Modified: trunk/src/tracker-indexer/tracker-indexer.c
==============================================================================
--- trunk/src/tracker-indexer/tracker-indexer.c	(original)
+++ trunk/src/tracker-indexer/tracker-indexer.c	Mon Dec  1 16:09:44 2008
@@ -1381,8 +1381,8 @@
 		 * 2) Remove from new metadata all non embedded properties that already have value.
 		 * 3) Save the remain new metadata.
 		 */
-		old_metadata_emb = tracker_data_query_embedded_metadata (service, id);
-		old_metadata_non_emb = tracker_data_query_non_embedded_metadata (service, id);
+		old_metadata_emb = tracker_data_query_metadata (service, id, TRUE);
+		old_metadata_non_emb = tracker_data_query_metadata (service, id, FALSE);
 
 		unindex_metadata (indexer, id, service, old_metadata_emb);
 		
@@ -1493,11 +1493,12 @@
 
 	/* Get 'source' ID */
 	if (!tracker_data_query_service_exists (service,
-				       dirname,
-				       basename,
-				       &id,
-				       NULL)) {
+						dirname,
+						basename,
+						&id,
+						NULL)) {
 		g_message ("Source file '%s' not found in database to move", path);
+
 		g_free (path);
 		g_free (other_path);
 
@@ -1509,7 +1510,7 @@
 	/*
 	 *  Updating what changes in move event (Path related properties)
 	 */
-	old_metadata = tracker_data_query_embedded_metadata (service, id);
+	old_metadata = tracker_data_query_metadata (service, id, TRUE);
 
 	tracker_data_metadata_foreach_remove (old_metadata,
 					      filter_invalid_after_move_properties,
@@ -1520,18 +1521,20 @@
 	new_metadata = tracker_data_metadata_new ();
 
 	tracker_file_get_path_and_name (other_path, &new_path, &new_name);
+
 	tracker_data_metadata_insert (new_metadata, METADATA_FILE_PATH, new_path);
 	tracker_data_metadata_insert (new_metadata, METADATA_FILE_NAME, new_name);
-	tracker_data_metadata_insert (new_metadata,
-				      METADATA_FILE_NAME_DELIMITED,
-				      g_strdup (other_path));
+	tracker_data_metadata_insert (new_metadata, METADATA_FILE_NAME_DELIMITED, other_path);
+
+	g_free (new_path);
+	g_free (new_name);
 
 	ext = strrchr (other_path, '.');
 	if (ext) {
-		tracker_data_metadata_insert (new_metadata, METADATA_FILE_EXT, g_strdup (ext + 1));
+		ext++;
+		tracker_data_metadata_insert (new_metadata, METADATA_FILE_EXT, ext);
 	}
 
-
 	index_metadata (indexer, id, service, new_metadata);
 
 	/* tracker_data_metadata_free frees the values */

Modified: trunk/src/tracker-indexer/tracker-metadata-utils.c
==============================================================================
--- trunk/src/tracker-indexer/tracker-metadata-utils.c	(original)
+++ trunk/src/tracker-indexer/tracker-metadata-utils.c	Mon Dec  1 16:09:44 2008
@@ -183,6 +183,26 @@
 	status = G_IO_STATUS_NORMAL;
 	line = NULL;
 
+	if (!array) {
+		/* FIXME: What do we do here? This has happened to me
+		 * before and we get warnings when we try to add to
+		 * the empty array later.
+		 */
+		g_message ("EEEEEK!!!\n"
+			   "\n"
+			   "Expected metadata array to be non-NULL!\n"
+			   "\n"
+			   "This usually means we probably got '\\n' too many times "
+			   "and closed the pipe when there is more content available "
+			   "to read\n"
+			   "\n"
+			   "Stopping main loop and this callback");
+
+		g_main_loop_quit (metadata_context->data_incoming_loop);
+
+		return FALSE;
+	}
+
 	if ((condition & G_IO_IN) || (condition & G_IO_PRI)) {
 		do {
 			status = g_io_channel_read_line (metadata_context->stdout_channel,
@@ -381,7 +401,8 @@
 			g_strfreev (values);
 
 			tracker_data_metadata_insert_values (metadata, name, list);
-
+			g_list_foreach (list, (GFunc) g_free, NULL);
+			g_list_free (list);
 		} else {
 			if (!g_utf8_validate (value, -1, NULL)) {
 				utf_value = g_locale_to_utf8 (value, -1, NULL, NULL, NULL);
@@ -389,10 +410,12 @@
 				utf_value = g_strdup (value);
 			}
 			
-			if (!utf_value)
+			if (!utf_value) {
 				continue;
+			}
 			
 			tracker_data_metadata_insert (metadata, name, utf_value);
+			g_free (utf_value);
 		}
 	}
 
@@ -777,7 +800,9 @@
 	TrackerDataMetadata *metadata;
 	struct stat st;
 	const gchar *ext;
-	gchar *mime_type, *path;
+	gchar *path, *mime_type;
+	gchar *dirname, *basename, *path_delimited;
+	gchar *size, *mtime, *atime;
 
 	path = g_file_get_path (file);
 
@@ -791,19 +816,23 @@
 
 	if (ext) {
 		ext++;
-		tracker_data_metadata_insert (metadata, METADATA_FILE_EXT, g_strdup (ext));
+		tracker_data_metadata_insert (metadata, METADATA_FILE_EXT, ext);
 	}
 
 	mime_type = tracker_file_get_mime_type (path);
 
-	tracker_data_metadata_insert (metadata, METADATA_FILE_NAME,
-				      g_filename_display_basename (path));
-	tracker_data_metadata_insert (metadata, METADATA_FILE_PATH,
-				      g_path_get_dirname (path));
-	tracker_data_metadata_insert (metadata, METADATA_FILE_NAME_DELIMITED,
-				      g_filename_to_utf8 (path, -1, NULL, NULL, NULL));
-	tracker_data_metadata_insert (metadata, METADATA_FILE_MIMETYPE,
-				      mime_type);
+	dirname = g_path_get_dirname (path);
+	basename = g_filename_display_basename (path);
+	path_delimited = g_filename_to_utf8 (path, -1, NULL, NULL, NULL);
+
+	tracker_data_metadata_insert (metadata, METADATA_FILE_NAME, basename);
+	tracker_data_metadata_insert (metadata, METADATA_FILE_PATH, dirname);
+	tracker_data_metadata_insert (metadata, METADATA_FILE_NAME_DELIMITED, path_delimited);
+	tracker_data_metadata_insert (metadata, METADATA_FILE_MIMETYPE, mime_type);
+
+	g_free (path_delimited);
+	g_free (basename);
+	g_free (dirname);
 
 	if (mime_type) {
 		gchar *uri;
@@ -815,23 +844,33 @@
 
 	if (S_ISLNK (st.st_mode)) {
 		gchar *link_path;
+		gchar *link_path_delimited;
 
 		link_path = g_file_read_link (path, NULL);
-		tracker_data_metadata_insert (metadata, METADATA_FILE_LINK,
-					      g_filename_to_utf8 (link_path, -1, NULL, NULL, NULL));
+		link_path_delimited = g_filename_to_utf8 (link_path, -1, NULL, NULL, NULL);
+
+		tracker_data_metadata_insert (metadata, METADATA_FILE_LINK, link_path_delimited);
+
+		g_free (link_path_delimited);
 		g_free (link_path);
 	}
 
 	/* FIXME: These should be dealt directly as integer/times/whatever, not strings */
-	tracker_data_metadata_insert (metadata, METADATA_FILE_SIZE,
-				      tracker_guint_to_string (st.st_size));
-	tracker_data_metadata_insert (metadata, METADATA_FILE_MODIFIED,
-				      tracker_date_to_string (st.st_mtime));
-	tracker_data_metadata_insert (metadata, METADATA_FILE_ACCESSED,
-				      tracker_date_to_string (st.st_atime));
+	size = tracker_guint_to_string (st.st_size);
+	mtime = tracker_date_to_string (st.st_mtime);
+	atime = tracker_date_to_string (st.st_atime);
+
+	tracker_data_metadata_insert (metadata, METADATA_FILE_SIZE, size);
+	tracker_data_metadata_insert (metadata, METADATA_FILE_MODIFIED, mtime);
+	tracker_data_metadata_insert (metadata, METADATA_FILE_ACCESSED, atime);
+
+	g_free (atime);
+	g_free (mtime);
+	g_free (size);
 
 	metadata_utils_get_embedded (path, mime_type, metadata);
 
+	g_free (mime_type);
 	g_free (path);
 
 	return metadata;

Modified: trunk/src/tracker-indexer/tracker-module-file.c
==============================================================================
--- trunk/src/tracker-indexer/tracker-module-file.c	(original)
+++ trunk/src/tracker-indexer/tracker-module-file.c	Mon Dec  1 16:09:44 2008
@@ -216,7 +216,9 @@
 
                 tracker_data_metadata_insert (metadata, METADATA_FILE_PATH, dirname);
                 tracker_data_metadata_insert (metadata, METADATA_FILE_NAME, basename);
-
+                
+                g_free (dirname);
+                g_free (basename);
                 g_free (uri);
         }
 



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