tracker r2242 - in branches/indexer-split: . src/libtracker-common src/tracker-indexer
- From: mr svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r2242 - in branches/indexer-split: . src/libtracker-common src/tracker-indexer
- Date: Wed, 17 Sep 2008 12:14:38 +0000 (UTC)
Author: mr
Date: Wed Sep 17 12:14:38 2008
New Revision: 2242
URL: http://svn.gnome.org/viewvc/tracker?rev=2242&view=rev
Log:
* src/libtracker-common/tracker-file-utils.c:
(tracker_file_get_mime_type), (path_has_write_access): Fixed
GFileInfo memory leaks.
* src/libtracker-common/tracker-ontology.c:
(tracker_ontology_get_field_by_id): Fixed GList memory leak from
g_hash_table_get_values() call.
* src/libtracker-common/tracker-parser.c: (analyze_text),
(tracker_parser_text_to_string), (tracker_parser_text): Make sure
we check the text string is not just an empty string. Also, don't
call strlen twice in some cases.
* src/tracker-indexer/tracker-indexer-db.c:
(tracker_db_check_service), For some reason, the mtime comes back
as a string, even though it is supposed to be an integer. So we
call tracker_string_to_date() on it now.
* src/tracker-indexer/tracker-indexer.c: (item_create_or_update):
Fixed a memory leak here were the TrackerMetadata was not freed
when updating an indexed item.
* src/tracker-indexer/tracker-metadata-utils.c: Some code clean ups.
Modified:
branches/indexer-split/ChangeLog
branches/indexer-split/src/libtracker-common/tracker-file-utils.c
branches/indexer-split/src/libtracker-common/tracker-ontology.c
branches/indexer-split/src/libtracker-common/tracker-parser.c
branches/indexer-split/src/tracker-indexer/tracker-indexer-db.c
branches/indexer-split/src/tracker-indexer/tracker-indexer.c
branches/indexer-split/src/tracker-indexer/tracker-metadata-utils.c
Modified: branches/indexer-split/src/libtracker-common/tracker-file-utils.c
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-file-utils.c (original)
+++ branches/indexer-split/src/libtracker-common/tracker-file-utils.c Wed Sep 17 12:14:38 2008
@@ -259,26 +259,22 @@
info = g_file_query_info (file,
G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
G_FILE_QUERY_INFO_NONE,
- NULL, &error);
+ NULL,
+ &error);
- if (error) {
+ if (G_UNLIKELY (error)) {
g_warning ("Could not guess mimetype, %s\n",
error->message);
g_error_free (error);
-
- return g_strdup ("unknown");
+ content_type = NULL;
+ } else {
+ content_type = g_strdup (g_file_info_get_content_type (info));
}
- content_type = g_strdup (g_file_info_get_content_type (info));
-
g_object_unref (info);
g_object_unref (file);
- if (!content_type) {
- return g_strdup ("unknown");
- }
-
- return content_type;
+ return content_type ? content_type : g_strdup ("unknown");
}
static gchar *
@@ -728,7 +724,7 @@
&error);
g_object_unref (file);
- if (error) {
+ if (G_UNLIKELY (error)) {
if (error->code == G_IO_ERROR_NOT_FOUND) {
if (exists) {
*exists = FALSE;
@@ -742,14 +738,15 @@
g_error_free (error);
- return FALSE;
- }
+ writable = FALSE;
+ } else {
+ if (exists) {
+ *exists = TRUE;
+ }
- if (exists) {
- *exists = TRUE;
- }
+ writable = g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE);
+ }
- writable = g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE);
g_object_unref (info);
return writable;
Modified: branches/indexer-split/src/libtracker-common/tracker-ontology.c
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-ontology.c (original)
+++ branches/indexer-split/src/libtracker-common/tracker-ontology.c Wed Sep 17 12:14:38 2008
@@ -616,24 +616,23 @@
TrackerField *
tracker_ontology_get_field_by_id (gint id)
{
- GList *values;
- GList *l;
+ TrackerField *field = NULL;
+ GList *values;
+ GList *l;
/* TODO Create a hashtable with id -> field def. More efficient */
values = g_hash_table_get_values (field_names);
- for (l = values; l; l = l->next) {
- TrackerField *field;
-
- field = l->data;
-
- if (atoi (tracker_field_get_id (field)) == id) {
- return field;
+ for (l = values; l && !field; l = l->next) {
+ if (atoi (tracker_field_get_id (l->data)) == id) {
+ field = l->data;
}
}
- return NULL;
+ g_list_free (values);
+
+ return field;
}
gchar *
Modified: branches/indexer-split/src/libtracker-common/tracker-parser.c
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-parser.c (original)
+++ branches/indexer-split/src/libtracker-common/tracker-parser.c Wed Sep 17 12:14:38 2008
@@ -65,7 +65,6 @@
static inline TrackerParserWordType
get_word_type (gunichar c)
{
-
/* Fast ascii handling */
if (IS_ASCII (c)) {
if (IS_ASCII_ALPHA_LOWER (c)) {
@@ -95,15 +94,15 @@
if (IS_NEWLINE (c)) {
return TRACKER_PARSER_WORD_NEWLINE;
}
- } else {
+ } else {
if (g_unichar_isalpha (c)) {
if (!g_unichar_isupper (c)) {
- return TRACKER_PARSER_WORD_ALPHA_LOWER;
+ return TRACKER_PARSER_WORD_ALPHA_LOWER;
} else {
- return TRACKER_PARSER_WORD_ALPHA_HIGHER;
+ return TRACKER_PARSER_WORD_ALPHA_HIGHER;
}
} else if (g_unichar_isdigit (c)) {
- return TRACKER_PARSER_WORD_NUM;
+ return TRACKER_PARSER_WORD_NUM;
}
}
@@ -216,7 +215,7 @@
*index_word = NULL;
- if (!text) {
+ if (text == NULL || text[0] == '\0') {
return NULL;
}
@@ -234,7 +233,8 @@
c = g_utf8_get_char (p);
type = get_word_type (c);
- if (type == TRACKER_PARSER_WORD_IGNORE || type == TRACKER_PARSER_WORD_NEWLINE ||
+ if (type == TRACKER_PARSER_WORD_IGNORE ||
+ type == TRACKER_PARSER_WORD_NEWLINE ||
(delimit_hyphen &&
(type == TRACKER_PARSER_WORD_HYPHEN ||
type == TRACKER_PARSER_WORD_UNDERSCORE))) {
@@ -890,7 +890,7 @@
gchar *
-tracker_parser_text_to_string (const gchar *txt,
+tracker_parser_text_to_string (const gchar *text,
TrackerLanguage *language,
gint max_word_length,
gint min_word_length,
@@ -903,37 +903,36 @@
guint32 i = 0;
gint len;
- g_return_val_if_fail (language != NULL, NULL);
+ g_return_val_if_fail (TRACKER_IS_LANGUAGE (language), NULL);
- if (!txt) {
+ if (text == NULL || text[0] == '\0') {
return NULL;
}
- p = txt;
- len = strlen (txt);
+ p = text;
+ len = strlen (text);
len = MIN (len, 500);
- if (!g_utf8_validate (txt, len, NULL)) {
+ if (!g_utf8_validate (text, len, NULL)) {
return NULL;
}
- if (text_needs_pango (txt)) {
+ if (text_needs_pango (text)) {
/* CJK text does not need stemming or other
* treatment.
*/
PangoLogAttr *attrs;
- guint nb_bytes, str_len, word_start;
+ guint str_len, word_start;
GString *strs;
- nb_bytes = strlen (txt);
- str_len = g_utf8_strlen (txt, -1);
+ str_len = g_utf8_strlen (text, -1);
strs = g_string_new (" ");
attrs = g_new0 (PangoLogAttr, str_len + 1);
- pango_get_log_attrs (txt,
- nb_bytes,
+ pango_get_log_attrs (text,
+ len,
0,
pango_language_from_string ("C"),
attrs,
@@ -945,8 +944,8 @@
if (attrs[i].is_word_end) {
gchar *start_word, *end_word;
- start_word = g_utf8_offset_to_pointer (txt, word_start);
- end_word = g_utf8_offset_to_pointer (txt, i);
+ start_word = g_utf8_offset_to_pointer (text, word_start);
+ end_word = g_utf8_offset_to_pointer (text, i);
if (start_word != end_word) {
/* Normalize word */
@@ -1069,7 +1068,7 @@
GHashTable *
tracker_parser_text (GHashTable *word_table,
- const gchar *txt,
+ const gchar *text,
gint weight,
TrackerLanguage *language,
gint max_words_to_index,
@@ -1096,26 +1095,25 @@
total_words = g_hash_table_size (word_table);
}
- if (!txt || weight == 0) {
+ if (text == NULL || text[0] == '\0' || weight == 0) {
return word_table;
}
- p = txt;
+ p = text;
i = 0;
- if (text_needs_pango (txt)) {
+ if (text_needs_pango (text)) {
/* CJK text does not need stemming or other treatment */
PangoLogAttr *attrs;
- guint nb_bytes, str_len, word_start;
-
- nb_bytes = strlen (txt);
+ guint len, str_len, word_start;
- str_len = g_utf8_strlen (txt, -1);
+ len = strlen (text);
+ str_len = g_utf8_strlen (text, -1);
attrs = g_new0 (PangoLogAttr, str_len + 1);
- pango_get_log_attrs (txt,
- nb_bytes,
+ pango_get_log_attrs (text,
+ len,
0,
pango_language_from_string ("C"),
attrs,
@@ -1127,8 +1125,8 @@
if (attrs[i].is_word_end) {
gchar *start_word, *end_word;
- start_word = g_utf8_offset_to_pointer (txt, word_start);
- end_word = g_utf8_offset_to_pointer (txt, i);
+ start_word = g_utf8_offset_to_pointer (text, word_start);
+ end_word = g_utf8_offset_to_pointer (text, i);
if (start_word != end_word) {
gchar *str;
Modified: branches/indexer-split/src/tracker-indexer/tracker-indexer-db.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-indexer-db.c (original)
+++ branches/indexer-split/src/tracker-indexer/tracker-indexer-db.c Wed Sep 17 12:14:38 2008
@@ -151,7 +151,9 @@
{
TrackerDBInterface *iface;
TrackerDBResultSet *result_set;
- guint db_id, db_mtime;
+ gchar *db_mtime_str;
+ guint db_id;
+ guint db_mtime;
gboolean found = FALSE;
db_id = db_mtime = 0;
@@ -167,10 +169,15 @@
if (result_set) {
tracker_db_result_set_get (result_set,
0, &db_id,
- 1, &db_mtime,
+ 1, &db_mtime_str,
-1);
g_object_unref (result_set);
found = TRUE;
+
+ if (db_mtime_str) {
+ db_mtime = tracker_string_to_date (db_mtime_str);
+ g_free (db_mtime_str);
+ }
}
if (id) {
@@ -323,52 +330,59 @@
gboolean numeric,
gboolean only_embedded)
{
- gboolean valid = TRUE;
- TrackerField *field_def;
- gint metadata_id;
+ TrackerField *field;
gchar *value;
gint numeric_value;
+ gint metadata_id;
+ gboolean valid = TRUE;
while (valid) {
-
if (numeric) {
- tracker_db_result_set_get (result_set, 0, &metadata_id, 1, &numeric_value, -1);
+ tracker_db_result_set_get (result_set,
+ 0, &metadata_id,
+ 1, &numeric_value,
+ -1);
value = g_strdup_printf ("%d", numeric_value);
} else {
- tracker_db_result_set_get (result_set, 0, &metadata_id, 1, &value, -1);
+ tracker_db_result_set_get (result_set,
+ 0, &metadata_id,
+ 1, &value,
+ -1);
}
- field_def = tracker_ontology_get_field_by_id (metadata_id);
- if (!field_def) {
+ field = tracker_ontology_get_field_by_id (metadata_id);
+ if (!field) {
g_critical ("Field id %d in database but not in tracker-ontology",
metadata_id);
g_free (value);
return;
}
- if (tracker_field_get_embedded (field_def) || !only_embedded) {
+ if (tracker_field_get_embedded (field) || !only_embedded) {
+ if (tracker_field_get_multiple_values (field)) {
+ GList *new_values;
+ const GList *old_values;
- if (tracker_field_get_multiple_values (field_def)) {
-
- GList *new_values = NULL;
- const GList *old_values = NULL;
+ new_values = NULL;
old_values = tracker_metadata_lookup_multiple_values (metadata,
- tracker_field_get_name (field_def));
+ 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, g_strdup (value));
+ new_values = g_list_prepend (new_values, value);
tracker_metadata_insert_multiple_values (metadata,
- tracker_field_get_name (field_def),
+ tracker_field_get_name (field),
new_values);
-
} else {
- tracker_metadata_insert (metadata, tracker_field_get_name (field_def), g_strdup (value));
+ tracker_metadata_insert (metadata,
+ tracker_field_get_name (field),
+ value);
}
+ } else {
+ g_free (value);
}
- g_free (value);
valid = tracker_db_result_set_iter_next (result_set);
}
}
@@ -530,9 +544,9 @@
}
gchar **
-tracker_db_get_property_values (TrackerService *service_def,
- guint32 id,
- TrackerField *field_def)
+tracker_db_get_property_values (TrackerService *service_def,
+ guint32 id,
+ TrackerField *field)
{
TrackerDBInterface *iface;
TrackerDBResultSet *result_set = NULL;
@@ -543,7 +557,7 @@
iface = tracker_db_manager_get_db_interface_by_type (tracker_service_get_name (service_def),
TRACKER_DB_CONTENT_TYPE_METADATA);
metadata_key = tracker_ontology_service_get_key_metadata (tracker_service_get_name (service_def),
- tracker_field_get_name (field_def));
+ tracker_field_get_name (field));
if (metadata_key > 0) {
gchar *query;
@@ -561,12 +575,12 @@
id_str = tracker_guint32_to_string (id);
- switch (tracker_field_get_data_type (field_def)) {
+ switch (tracker_field_get_data_type (field)) {
case TRACKER_FIELD_TYPE_KEYWORD:
result_set = tracker_db_interface_execute_procedure (iface, NULL,
"GetMetadataKeyword",
id_str,
- tracker_field_get_id (field_def),
+ tracker_field_get_id (field),
NULL);
break;
case TRACKER_FIELD_TYPE_INDEX:
@@ -575,7 +589,7 @@
result_set = tracker_db_interface_execute_procedure (iface, NULL,
"GetMetadata",
id_str,
- tracker_field_get_id (field_def),
+ tracker_field_get_id (field),
NULL);
break;
case TRACKER_FIELD_TYPE_INTEGER:
@@ -583,7 +597,7 @@
result_set = tracker_db_interface_execute_procedure (iface, NULL,
"GetMetadataNumeric",
id_str,
- tracker_field_get_id (field_def),
+ tracker_field_get_id (field),
NULL);
is_numeric = TRUE;
break;
Modified: branches/indexer-split/src/tracker-indexer/tracker-indexer.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-indexer.c (original)
+++ branches/indexer-split/src/tracker-indexer/tracker-indexer.c Wed Sep 17 12:14:38 2008
@@ -924,8 +924,8 @@
tracker_db_delete_metadata (data->service, data->id, field, (gchar *)value);
}
- g_free (parsed_value);
g_strfreev (arr);
+ g_free (parsed_value);
}
static void
@@ -1274,8 +1274,8 @@
if (tracker_db_check_service (service_def, dirname, basename, &id, NULL)) {
TrackerMetadata *old_metadata;
- gchar *old_text;
- gchar *new_text;
+ gchar *old_text;
+ gchar *new_text;
/* Update case */
g_debug ("Updating file '%s'", info->file->path);
@@ -1298,6 +1298,7 @@
g_free (old_text);
g_free (new_text);
+ tracker_metadata_free (old_metadata);
return;
}
Modified: branches/indexer-split/src/tracker-indexer/tracker-metadata-utils.c
==============================================================================
--- branches/indexer-split/src/tracker-indexer/tracker-metadata-utils.c (original)
+++ branches/indexer-split/src/tracker-indexer/tracker-metadata-utils.c Wed Sep 17 12:14:38 2008
@@ -203,7 +203,8 @@
metadata_context = NULL;
}
- metadata_context = process_context_create (argv, metadata_read_cb);
+ metadata_context = process_context_create (argv,
+ metadata_read_cb);
if (!metadata_context) {
return FALSE;
@@ -286,14 +287,14 @@
static void
metadata_utils_get_embedded (const char *path,
- const char *mimetype,
+ const char *mime_type,
TrackerMetadata *metadata)
{
- gchar **values, *service_type;
- gint i;
-
- service_type = tracker_ontology_get_service_by_mime (mimetype);
+ gchar **values;
+ gchar *service_type;
+ gint i;
+ service_type = tracker_ontology_get_service_by_mime (mime_type);
if (!service_type) {
return;
}
@@ -305,7 +306,7 @@
g_free (service_type);
- values = metadata_query_file (path, mimetype);
+ values = metadata_query_file (path, mime_type);
if (!values) {
return;
@@ -568,9 +569,9 @@
path,
error->message);
g_error_free (error);
- g_object_unref (file);
+ g_string_free (s, TRUE);
g_object_unref (stream);
- g_string_free (s, TRUE);
+ g_object_unref (file);
return NULL;
}
@@ -601,8 +602,8 @@
s = g_string_truncate (s, bytes_valid);
#endif /* TRY_LOCALE_TO_UTF8_CONVERSION */
- g_object_unref (file);
g_object_unref (stream);
+ g_object_unref (file);
if (s->len < 1) {
g_string_free (s, TRUE);
@@ -681,7 +682,8 @@
argv[3] = g_strdup ("normal");
argv[4] = NULL;
- context = process_context_create ((const gchar **) argv, get_file_content_read_cb);
+ context = process_context_create ((const gchar **) argv,
+ get_file_content_read_cb)
if (!context) {
return;
@@ -746,7 +748,8 @@
g_message ("Extracting text for:'%s' using filter:'%s'", argv[1], argv[0]);
- context = process_context_create ((const gchar **) argv, get_file_content_read_cb);
+ context = process_context_create ((const gchar **) argv,
+ get_file_content_read_cb);
g_free (text_filter_file);
g_free (argv);
@@ -771,11 +774,12 @@
gchar *
tracker_metadata_utils_get_text (const gchar *path)
{
- gchar *mimetype, *service_type;
- gchar *text = NULL;
+ gchar *mime_type;
+ gchar *service_type;
+ gchar *text;
- mimetype = tracker_file_get_mime_type (path);
- service_type = tracker_ontology_get_service_by_mime (mimetype);
+ mime_type = tracker_file_get_mime_type (path);
+ service_type = tracker_ontology_get_service_by_mime (mime_type);
/* No need to filter text based files - index them directly */
if (service_type &&
@@ -783,11 +787,11 @@
strcmp (service_type, "Development") == 0)) {
text = get_file_content (path);
} else {
- text = get_file_content_by_filter (path, mimetype);
+ text = get_file_content_by_filter (path, mime_type);
}
- g_free (mimetype);
g_free (service_type);
+ g_free (mime_type);
return text;
}
@@ -798,7 +802,7 @@
TrackerMetadata *metadata;
struct stat st;
const gchar *ext;
- gchar *mimetype;
+ gchar *mime_type;
if (g_lstat (path, &st) < 0) {
return NULL;
@@ -811,20 +815,23 @@
tracker_metadata_insert (metadata, METADATA_FILE_EXT, g_strdup (ext + 1));
}
- mimetype = tracker_file_get_mime_type (path);
+ mime_type = tracker_file_get_mime_type (path);
- tracker_metadata_insert (metadata, METADATA_FILE_NAME, g_filename_display_basename (path));
- tracker_metadata_insert (metadata, METADATA_FILE_PATH, g_path_get_dirname (path));
+ tracker_metadata_insert (metadata, METADATA_FILE_NAME,
+ g_filename_display_basename (path));
+ tracker_metadata_insert (metadata, METADATA_FILE_PATH,
+ g_path_get_dirname (path));
tracker_metadata_insert (metadata, METADATA_FILE_NAME_DELIMITED,
g_filename_to_utf8 (path, -1, NULL, NULL, NULL));
- tracker_metadata_insert (metadata, METADATA_FILE_MIMETYPE, mimetype);
+ tracker_metadata_insert (metadata, METADATA_FILE_MIMETYPE,
+ mime_type);
- if (mimetype) {
+ if (mime_type) {
/* FIXME:
* We should determine here for which items we do and for which
* items we don't want to pre-create the thumbnail. */
- get_file_thumbnail (path, mimetype);
+ get_file_thumbnail (path, mime_type);
}
if (S_ISLNK (st.st_mode)) {
@@ -844,7 +851,7 @@
tracker_metadata_insert (metadata, METADATA_FILE_ACCESSED,
tracker_date_to_string (st.st_atime));
- metadata_utils_get_embedded (path, mimetype, metadata);
+ metadata_utils_get_embedded (path, mime_type, metadata);
return metadata;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]