tracker r1129 - in trunk: . src/trackerd
- From: carlosg svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1129 - in trunk: . src/trackerd
- Date: Thu, 14 Feb 2008 18:11:32 +0000 (GMT)
Author: carlosg
Date: Thu Feb 14 18:11:32 2008
New Revision: 1129
URL: http://svn.gnome.org/viewvc/tracker?rev=1129&view=rev
Log:
2008-02-14 Carlos Garnacho <carlos imendio com>
* src/trackerd/tracker-metadata.c (tracker_metadata_get_embedded):
Rewrite function so it's less indented, and copies a bit less memory
around. Bug #513688.
Modified:
trunk/ChangeLog
trunk/src/trackerd/tracker-metadata.c
Modified: trunk/src/trackerd/tracker-metadata.c
==============================================================================
--- trunk/src/trackerd/tracker-metadata.c (original)
+++ trunk/src/trackerd/tracker-metadata.c Thu Feb 14 18:11:32 2008
@@ -369,11 +369,15 @@
return thumbnail;
}
-
void
tracker_metadata_get_embedded (const char *uri, const char *mime, GHashTable *table)
{
MetadataFileType meta_type;
+ gboolean success;
+ char *argv[4];
+ char *output;
+ char **values;
+ gint i;
if (!uri || !mime || !table) {
return;
@@ -381,111 +385,74 @@
meta_type = tracker_get_metadata_type (mime);
- if (meta_type == DOC_METADATA || meta_type == IMAGE_METADATA || meta_type == AUDIO_METADATA || meta_type == VIDEO_METADATA) {
- char *argv[4];
- char *value;
-
- /* we extract metadata out of process using pipes */
-
- argv[0] = g_strdup ("tracker-extract");
- argv[1] = g_filename_from_utf8 (uri, -1, NULL, NULL, NULL);
- argv[2] = g_locale_from_utf8 (mime, -1, NULL, NULL, NULL);
- argv[3] = NULL;
-
- if (!argv[1] || !argv[2]) {
- tracker_error ("ERROR: uri or mime could not be converted to locale format");
-
- g_free (argv[0]);
-
- if (argv[1]) {
- g_free (argv[1]);
- }
-
- if (argv[2]) {
- g_free (argv[2]);
- }
-
- return;
- }
-
- if (tracker_spawn (argv, 10, &value, NULL)) {
-
- /* parse returned stdout (value) and extract keys and associated metadata values */
-
- if (value && strchr (value, '=') && strchr (value, ';')) {
- char **values, **values_p;
-
- values = g_strsplit_set (value, ";", -1);
-
- for (values_p = values; *values_p; values_p++) {
- char *meta_data, *sep;
-
- meta_data = g_strdup (g_strstrip (*values_p));
-
- sep = strchr (meta_data, '=');
-
- if (sep) {
- char *meta_name;
-
- meta_name = g_strndup (meta_data, sep - meta_data);
-
- if (meta_name) {
- char *meta_value;
-
- meta_value = g_strdup (sep + 1);
-
- if (meta_value) {
- char *st;
-
- //tracker_log ("testing %s = %s", meta_name, meta_value);
- st = g_hash_table_lookup (table, meta_name);
-
- if (st == NULL) {
- char *utf_value;
-
- if (!g_utf8_validate (meta_value, -1, NULL)) {
-
- utf_value = g_locale_to_utf8 (meta_value, -1, NULL, NULL, NULL);
- } else {
- utf_value = g_strdup (meta_value);
- }
-
- if (utf_value) {
- guint32 length = strlen (utf_value);
+ if (! (meta_type == DOC_METADATA || meta_type == IMAGE_METADATA || meta_type == AUDIO_METADATA || meta_type == VIDEO_METADATA))
+ return;
- if ((length > 0) && (length >= strlen (meta_value))) {
+ /* we extract metadata out of process using pipes */
+ argv[0] = g_strdup ("tracker-extract");
+ argv[1] = g_filename_from_utf8 (uri, -1, NULL, NULL, NULL);
+ argv[2] = g_locale_from_utf8 (mime, -1, NULL, NULL, NULL);
+ argv[3] = NULL;
+
+ if (!argv[1] || !argv[2]) {
+ tracker_error ("ERROR: uri or mime could not be converted to locale format");
+
+ g_free (argv[0]);
+ g_free (argv[1]);
+ g_free (argv[2]);
- tracker_debug ("%s = %s", meta_name, utf_value);
- tracker_add_metadata_to_table (table, g_strdup (meta_name), utf_value);
- } else {
- g_free (utf_value);
- }
- }
- }
+ return;
+ }
- g_free (meta_value);
- }
+ success = tracker_spawn (argv, 10, &output, NULL);
- g_free (meta_name);
- }
- }
+ g_free (argv[0]);
+ g_free (argv[1]);
+ g_free (argv[2]);
- g_free (meta_data);
- }
+ if (!success || !output)
+ return;
- g_strfreev (values);
- }
+ /* parse returned stdout and extract keys and associated metadata values */
- if (value) {
- g_free (value);
- }
+ values = g_strsplit_set (output, ";", -1);
- g_free (argv[0]);
- g_free (argv[1]);
- g_free (argv[2]);
+ for (i = 0; values[i]; i++) {
+ char *meta_data, *sep;
+ const char *name, *value;
+ char *utf_value;
+
+ meta_data = g_strstrip (values[i]);
+ sep = strchr (meta_data, '=');
+
+ if (!sep)
+ continue;
+
+ /* zero out the separator, so we get
+ * NULL-terminated name and value
+ */
+ sep[0] = '\0';
+ name = meta_data;
+ value = sep + 1;
+
+ if (!name || !value)
+ continue;
+
+ if (g_hash_table_lookup (table, name))
+ continue;
+
+ if (!g_utf8_validate (value, -1, NULL)) {
+ utf_value = g_locale_to_utf8 (value, -1, NULL, NULL, NULL);
+ } else {
+ utf_value = g_strdup (value);
}
- }
-}
+ if (!utf_value)
+ continue;
+ tracker_add_metadata_to_table (table, g_strdup (name), utf_value);
+ }
+ g_strfreev (values);
+ g_free (output);
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]