tracker r1328 - in branches/indexer-split: . src/libtracker-common src/trackerd
- From: mr svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1328 - in branches/indexer-split: . src/libtracker-common src/trackerd
- Date: Wed, 30 Apr 2008 10:29:05 +0100 (BST)
Author: mr
Date: Wed Apr 30 09:29:05 2008
New Revision: 1328
URL: http://svn.gnome.org/viewvc/tracker?rev=1328&view=rev
Log:
* src/libtracker-common/Makefile.am:
* src/libtracker-common/tracker-os-dependant-unix.c:
* src/libtracker-common/tracker-os-dependant-win.c:
* src/libtracker-common/tracker-os-dependant.h: Moved to
libtracker-common from trackerd.
* src/trackerd/Makefile.am:
* src/trackerd/tracker-db-sqlite.c:
* src/trackerd/tracker-db.c:
* src/trackerd/tracker-dbus-files.c:
* src/trackerd/tracker-email-evolution.c:
* src/trackerd/tracker-email-kmail.c:
* src/trackerd/tracker-inotify.c:
* src/trackerd/tracker-metadata.c:
* src/trackerd/tracker-os-dependant-unix.c:
* src/trackerd/tracker-os-dependant-win.c:
* src/trackerd/tracker-os-dependant.h:
* src/trackerd/tracker-process-files.c:
* src/trackerd/tracker-utils.c:
* src/trackerd/tracker-utils.h: Moved file utility functions to
libtracker-common.
Added:
branches/indexer-split/src/libtracker-common/tracker-os-dependant-unix.c
- copied, changed from r1327, /branches/indexer-split/src/trackerd/tracker-os-dependant-unix.c
branches/indexer-split/src/libtracker-common/tracker-os-dependant-win.c
- copied, changed from r1327, /branches/indexer-split/src/trackerd/tracker-os-dependant-win.c
branches/indexer-split/src/libtracker-common/tracker-os-dependant.h
- copied, changed from r1327, /branches/indexer-split/src/trackerd/tracker-os-dependant.h
Removed:
branches/indexer-split/src/trackerd/tracker-os-dependant-unix.c
branches/indexer-split/src/trackerd/tracker-os-dependant-win.c
branches/indexer-split/src/trackerd/tracker-os-dependant.h
Modified:
branches/indexer-split/ChangeLog
branches/indexer-split/src/libtracker-common/Makefile.am
branches/indexer-split/src/libtracker-common/tracker-utils.c
branches/indexer-split/src/libtracker-common/tracker-utils.h
branches/indexer-split/src/trackerd/Makefile.am
branches/indexer-split/src/trackerd/tracker-db-sqlite.c
branches/indexer-split/src/trackerd/tracker-db.c
branches/indexer-split/src/trackerd/tracker-dbus-files.c
branches/indexer-split/src/trackerd/tracker-email-evolution.c
branches/indexer-split/src/trackerd/tracker-email-kmail.c
branches/indexer-split/src/trackerd/tracker-email-modest.c
branches/indexer-split/src/trackerd/tracker-inotify.c
branches/indexer-split/src/trackerd/tracker-metadata.c
branches/indexer-split/src/trackerd/tracker-process-files.c
branches/indexer-split/src/trackerd/tracker-utils.c
branches/indexer-split/src/trackerd/tracker-utils.h
branches/indexer-split/src/trackerd/trackerd.c
Modified: branches/indexer-split/src/libtracker-common/Makefile.am
==============================================================================
--- branches/indexer-split/src/libtracker-common/Makefile.am (original)
+++ branches/indexer-split/src/libtracker-common/Makefile.am Wed Apr 30 09:29:05 2008
@@ -1,10 +1,18 @@
INCLUDES = \
$(GLIB2_CFLAGS) \
- -DSHAREDIR=\""$(datadir)"\"
+ -DSHAREDIR=\""$(datadir)"\" \
+ -I$(top_srcdir)/src
noinst_LTLIBRARIES = libtracker-common.la
+if OS_WIN32
+os_sources = tracker-os-dependant-win.c
+else
+os_sources = tracker-os-dependant-unix.c
+endif
+
libtracker_common_la_SOURCES = \
+ $(os_sources) \
tracker-configuration.c \
tracker-configuration.h \
tracker-config.c \
@@ -13,8 +21,11 @@
tracker-language.h \
tracker-log.c \
tracker-log.h \
+ tracker-os-dependant.h \
tracker-type-utils.c \
tracker-type-utils.h \
+ tracker-file-utils.c \
+ tracker-file-utils.h \
tracker-utils.c \
tracker-utils.h
Copied: branches/indexer-split/src/libtracker-common/tracker-os-dependant-unix.c (from r1327, /branches/indexer-split/src/trackerd/tracker-os-dependant-unix.c)
==============================================================================
--- /branches/indexer-split/src/trackerd/tracker-os-dependant-unix.c (original)
+++ branches/indexer-split/src/libtracker-common/tracker-os-dependant-unix.c Wed Apr 30 09:29:05 2008
@@ -20,33 +20,36 @@
#include <errno.h>
#include <unistd.h>
#include <sys/resource.h>
+
#include <glib.h>
#include <glib/gspawn.h>
#include <glib/gstring.h>
+#include "tracker-log.h"
#include "tracker-os-dependant.h"
-
-#define MAX_MEM 128
+#define MAX_MEM 128
#define MAX_MEM_AMD64 512
-
gboolean
tracker_check_uri (const gchar *uri)
{
return uri && uri[0] == G_DIR_SEPARATOR;
}
-
gboolean
-tracker_spawn (gchar **argv, gint timeout, gchar **tmp_stdout, gint *exit_status)
+tracker_spawn (gchar **argv,
+ gint timeout,
+ gchar **tmp_stdout,
+ gint *exit_status)
{
GSpawnFlags flags;
+ flags = G_SPAWN_SEARCH_PATH |
+ G_SPAWN_STDERR_TO_DEV_NULL;
+
if (!tmp_stdout) {
- flags = G_SPAWN_SEARCH_PATH | G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL;
- } else {
- flags = G_SPAWN_SEARCH_PATH | G_SPAWN_STDERR_TO_DEV_NULL;
+ flags = flags | G_SPAWN_STDOUT_TO_DEV_NULL;
}
return g_spawn_sync (NULL,
@@ -61,14 +64,13 @@
NULL);
}
-
gchar *
tracker_create_permission_string (struct stat finfo)
{
- gchar *str;
- gint n, bit;
+ gchar *str;
+ gint n, bit;
- /* create permissions string */
+ /* Create permissions string */
str = g_strdup ("?rwxrwxrwx");
switch (finfo.st_mode & S_IFMT) {
@@ -102,17 +104,20 @@
return str;
}
-
static gboolean
set_memory_rlimits (void)
{
- struct rlimit rl;
- gboolean fail = FALSE;
+ struct rlimit rl;
+ gboolean fail = FALSE;
/* We want to limit the max virtual memory
- * most extractors use mmap() so only virtual memory can be effectively limited */
+ * most extractors use mmap() so only virtual memory can be
+ * effectively limited.
+ */
#ifdef __x86_64__
- /* many extractors on AMD64 require 512M of virtual memory, so we limit heap too */
+ /* Many extractors on AMD64 require 512M of virtual memory, so
+ * we limit heap too.
+ */
getrlimit (RLIMIT_AS, &rl);
rl.rlim_cur = MAX_MEM_AMD64 * 1024 * 1024;
fail |= setrlimit (RLIMIT_AS, &rl);
@@ -121,47 +126,52 @@
rl.rlim_cur = MAX_MEM * 1024 * 1024;
fail |= setrlimit (RLIMIT_DATA, &rl);
#else
- /* on other architectures, 128M of virtual memory seems to be enough */
+ /* On other architectures, 128M of virtual memory seems to be
+ * enough.
+ */
getrlimit (RLIMIT_AS, &rl);
rl.rlim_cur = MAX_MEM * 1024 * 1024;
fail |= setrlimit (RLIMIT_AS, &rl);
#endif
if (fail) {
- g_printerr ("Error trying to set memory limit\n");
+ tracker_error ("Error trying to set memory limit");
}
return !fail;
}
-
void
tracker_child_cb (gpointer user_data)
{
- struct rlimit cpu_limit;
- gint timeout = GPOINTER_TO_INT (user_data);
+ struct rlimit cpu_limit;
+ gint timeout = GPOINTER_TO_INT (user_data);
/* set cpu limit */
getrlimit (RLIMIT_CPU, &cpu_limit);
cpu_limit.rlim_cur = timeout;
- cpu_limit.rlim_max = timeout+1;
+ cpu_limit.rlim_max = timeout + 1;
if (setrlimit (RLIMIT_CPU, &cpu_limit) != 0) {
- g_printerr ("ERROR: trying to set resource limit for cpu\n");
+ tracker_error ("Failed to set resource limit for CPU");
}
set_memory_rlimits ();
/* Set child's niceness to 19 */
errno = 0;
- /* nice() uses attribute "warn_unused_result" and so complains if we do not check its
- returned value. But it seems that since glibc 2.2.4, nice() can return -1 on a
- successful call so we have to check value of errno too. Stupid... */
+
+ /* nice() uses attribute "warn_unused_result" and so complains
+ * if we do not check its returned value. But it seems that
+ * since glibc 2.2.4, nice() can return -1 on a successful call
+ * so we have to check value of errno too. Stupid...
+ */
if (nice (19) == -1 && errno) {
- g_printerr ("ERROR: trying to set nice value\n");
+ tracker_error ("Failed to set nice value");
}
- /* have this as a precaution in cases where cpu limit has not been reached due to spawned app sleeping */
- alarm (timeout+2);
-
+ /* Have this as a precaution in cases where cpu limit has not
+ * been reached due to spawned app sleeping.
+ */
+ alarm (timeout + 2);
}
Copied: branches/indexer-split/src/libtracker-common/tracker-os-dependant-win.c (from r1327, /branches/indexer-split/src/trackerd/tracker-os-dependant-win.c)
==============================================================================
--- /branches/indexer-split/src/trackerd/tracker-os-dependant-win.c (original)
+++ branches/indexer-split/src/libtracker-common/tracker-os-dependant-win.c Wed Apr 30 09:29:05 2008
@@ -1,4 +1,5 @@
-/* Tracker - indexer and metadata database engine
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
* Copyright (C) 2007, Mr Jamie McCracken (jamiemcc gnome org)
*
* This library is free software; you can redistribute it and/or
@@ -23,25 +24,29 @@
#include "mingw-compat.h"
#include "tracker-os-dependant.h"
-
gboolean
tracker_check_uri (const gchar *uri)
{
return uri != NULL;
}
-
gboolean
-tracker_spawn (gchar **argv, gint timeout, gchar **tmp_stdout, gint *exit_status)
+tracker_spawn (gchar **argv,
+ gint timeout,
+ gchar **tmp_stdout,
+ gint *exit_status)
{
- gint length;
- gint i;
+ GSpawnFlags flags;
+ GError *error = NULL;
+ gchar **new_argv;
+ gboolean status;
+ gint length;
+ gint i;
- for (i = 0; argv[i]; i++)
- ;
+ for (i = 0; argv[i]; i++);
length = i;
- gchar **new_argv = g_new0 (gchar *, length + 3);
+ new_argv = g_new0 (gchar*, length + 3);
new_argv[0] = "cmd.exe";
new_argv[1] = "/c";
@@ -50,25 +55,23 @@
new_argv[i + 2] = argv[i];
}
- GSpawnFlags flags;
- GError *error = NULL;
+ flags = G_SPAWN_SEARCH_PATH |
+ G_SPAWN_STDERR_TO_DEV_NULL;
if (!tmp_stdout) {
- flags = G_SPAWN_SEARCH_PATH | G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL;
- } else {
- flags = G_SPAWN_SEARCH_PATH | G_SPAWN_STDERR_TO_DEV_NULL;
+ flags = flags | G_SPAWN_STDOUT_TO_DEV_NULL;
}
- gboolean status = g_spawn_sync (NULL,
- new_argv,
- NULL,
- flags,
- NULL,
- GINT_TO_POINTER (timeout),
- tmp_stdout,
- NULL,
- exit_status,
- &error);
+ status = g_spawn_sync (NULL,
+ new_argv,
+ NULL,
+ flags,
+ NULL,
+ GINT_TO_POINTER (timeout),
+ tmp_stdout,
+ NULL,
+ exit_status,
+ &error);
if (!status) {
tracker_log (error->message);
@@ -80,14 +83,18 @@
return status;
}
+void
+tracker_child_cb (gpointer user_data)
+{
+}
gchar *
tracker_create_permission_string (struct stat finfo)
{
- gchar *str;
- gint n, bit;
+ gchar *str;
+ gint n, bit;
- /* create permissions string */
+ /* Create permissions string */
str = g_strdup ("?rwxrwxrwx");
for (bit = 0400, n = 1; bit; bit >>= 1, ++n) {
@@ -111,8 +118,3 @@
return str;
}
-
-void
-tracker_child_cb (gpointer user_data)
-{
-}
Copied: branches/indexer-split/src/libtracker-common/tracker-os-dependant.h (from r1327, /branches/indexer-split/src/trackerd/tracker-os-dependant.h)
==============================================================================
--- /branches/indexer-split/src/trackerd/tracker-os-dependant.h (original)
+++ branches/indexer-split/src/libtracker-common/tracker-os-dependant.h Wed Apr 30 09:29:05 2008
@@ -1,5 +1,7 @@
-/* Tracker - indexer and metadata database engine
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
* Copyright (C) 2007, Mr Jamie McCracken (jamiemcc gnome org)
+ * Copyright (C) 2008, Nokia
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
@@ -17,16 +19,18 @@
* Boston, MA 02110-1301, USA.
*/
-#ifndef _TRACKER_OS_DEPENDANT_H_
-#define _TRACKER_OS_DEPENDANT_H_
+#ifndef __TRACKER_OS_DEPENDANT_H__
+#define __TRACKER_OS_DEPENDANT_H__
#include <glib.h>
#include <glib/gstdio.h>
-gboolean tracker_check_uri (const gchar *uri);
-gboolean tracker_spawn (gchar **argv, gint timeout, gchar **tmp_stdout, gint *exit_status);
-void tracker_child_cb (gpointer user_data);
+gboolean tracker_check_uri (const gchar *uri);
+gboolean tracker_spawn (gchar **argv,
+ gint timeout,
+ gchar **tmp_stdout,
+ gint *exit_status);
+void tracker_child_cb (gpointer user_data);
+gchar * tracker_create_permission_string (struct stat finfo);
-gchar * tracker_create_permission_string (struct stat finfo);
-
-#endif
+#endif /* __TRACKER_OS_DEPENDANT_H__ */
Modified: branches/indexer-split/src/libtracker-common/tracker-utils.c
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-utils.c (original)
+++ branches/indexer-split/src/libtracker-common/tracker-utils.c Wed Apr 30 09:29:05 2008
@@ -19,6 +19,8 @@
* Boston, MA 02110-1301, USA.
*/
+#include <string.h>
+
#include <glib.h>
inline gboolean
@@ -26,3 +28,33 @@
{
return str == NULL || str[0] == '\0';
}
+
+gchar *
+tracker_string_replace (const gchar *haystack,
+ gchar *needle,
+ gchar *replacement)
+{
+ GString *str;
+ gint pos, needle_len;
+
+ g_return_val_if_fail (haystack != NULL, NULL);
+ g_return_val_if_fail (needle != NULL, NULL);
+
+ needle_len = strlen (needle);
+
+ str = g_string_new ("");
+
+ for (pos = 0; haystack[pos]; pos++) {
+ if (strncmp (&haystack[pos], needle, needle_len) == 0) {
+ if (replacement) {
+ str = g_string_append (str, replacement);
+ }
+
+ pos += needle_len - 1;
+ } else {
+ str = g_string_append_c (str, haystack[pos]);
+ }
+ }
+
+ return g_string_free (str, FALSE);
+}
Modified: branches/indexer-split/src/libtracker-common/tracker-utils.h
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-utils.h (original)
+++ branches/indexer-split/src/libtracker-common/tracker-utils.h Wed Apr 30 09:29:05 2008
@@ -22,6 +22,9 @@
#ifndef __TRACKER_UTILS_H__
#define __TRACKER_UTILS_H__
-gboolean tracker_is_empty_string (const char *str);
+gboolean tracker_is_empty_string (const char *str);
+gchar * tracker_string_replace (const gchar *haystack,
+ gchar *needle,
+ gchar *replacement);
-#endif /* __TRACKER_DBUS_UTILS_H__ */
+#endif /* __TRACKER_UTILS_H__ */
Modified: branches/indexer-split/src/trackerd/Makefile.am
==============================================================================
--- branches/indexer-split/src/trackerd/Makefile.am (original)
+++ branches/indexer-split/src/trackerd/Makefile.am Wed Apr 30 09:29:05 2008
@@ -32,12 +32,6 @@
endif
endif
-if OS_WIN32
-win_sources = tracker-os-dependant-win.c
-else
-unix_sources = tracker-os-dependant-unix.c
-endif
-
if HAVE_HAL
hal_sources = \
tracker-hal.c \
Modified: branches/indexer-split/src/trackerd/tracker-db-sqlite.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-db-sqlite.c (original)
+++ branches/indexer-split/src/trackerd/tracker-db-sqlite.c Wed Apr 30 09:29:05 2008
@@ -45,6 +45,7 @@
#include <libtracker-common/tracker-log.h>
#include <libtracker-common/tracker-config.h>
+#include <libtracker-common/tracker-file-utils.h>
#include <libtracker-common/tracker-type-utils.h>
#include <libtracker-common/tracker-utils.h>
@@ -3266,8 +3267,8 @@
name = g_path_get_basename (info->uri);
path = g_path_get_dirname (info->uri);
} else {
- name = tracker_get_vfs_name (info->uri);
- path = tracker_get_vfs_path (info->uri);
+ name = tracker_file_get_vfs_name (info->uri);
+ path = tracker_file_get_vfs_path (info->uri);
}
Modified: branches/indexer-split/src/trackerd/tracker-db.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-db.c (original)
+++ branches/indexer-split/src/trackerd/tracker-db.c Wed Apr 30 09:29:05 2008
@@ -27,12 +27,13 @@
#include <libtracker-common/tracker-log.h>
#include <libtracker-common/tracker-config.h>
+#include <libtracker-common/tracker-file-utils.h>
#include <libtracker-common/tracker-type-utils.h>
+#include <libtracker-common/tracker-os-dependant.h>
#include "tracker-db.h"
#include "tracker-email.h"
#include "tracker-metadata.h"
-#include "tracker-os-dependant.h"
#include "tracker-service-manager.h"
#include "tracker-process-files.h"
@@ -73,8 +74,8 @@
name = g_path_get_basename (uri);
path = g_path_get_dirname (uri);
} else {
- name = tracker_get_vfs_name (uri);
- path = tracker_get_vfs_path (uri);
+ name = tracker_file_get_vfs_name (uri);
+ path = tracker_file_get_vfs_path (uri);
}
result_set = tracker_exec_proc (db_con, "GetServiceID", path, name, NULL);
@@ -96,7 +97,7 @@
return FALSE;
}
- if (index_time < (gint32) tracker_get_file_mtime (uri)) {
+ if (index_time < (gint32) tracker_file_get_mtime (uri)) {
return FALSE;
}
@@ -118,8 +119,8 @@
name = g_path_get_basename (uri);
path = g_path_get_dirname (uri);
} else {
- name = tracker_get_vfs_name (uri);
- path = tracker_get_vfs_path (uri);
+ name = tracker_file_get_vfs_name (uri);
+ path = tracker_file_get_vfs_path (uri);
}
result_set = tracker_exec_proc (db_con->index, "GetServiceID", path, name, NULL);
@@ -955,8 +956,8 @@
/* check for backup user defined metadata */
if (info->is_new) {
TrackerDBResultSet *result_set;
- char *name = tracker_get_vfs_name (info->uri);
- char *path = tracker_get_vfs_path (info->uri);
+ char *name = tracker_file_get_vfs_name (info->uri);
+ char *path = tracker_file_get_vfs_path (info->uri);
result_set = tracker_exec_proc (db_con->common, "GetBackupMetadata", path, name, NULL);
@@ -1075,7 +1076,7 @@
info->mime = g_strdup ("Folder");
info->file_size = 0;
} else {
- info->mime = tracker_get_mime_type (info->uri);
+ info->mime = tracker_file_get_mime_type (info->uri);
if (!info->mime) {
info->mime = g_strdup ("unknown");
@@ -1233,7 +1234,7 @@
g_free (service_name);
if (attachment_uri ) {
- tracker_unlink (info->uri);
+ tracker_file_unlink (info->uri);
}
tracker_dec_info_ref (info);
Modified: branches/indexer-split/src/trackerd/tracker-dbus-files.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-dbus-files.c (original)
+++ branches/indexer-split/src/trackerd/tracker-dbus-files.c Wed Apr 30 09:29:05 2008
@@ -26,6 +26,7 @@
#include <libtracker-common/tracker-log.h>
#include <libtracker-common/tracker-utils.h>
+#include <libtracker-common/tracker-file-utils.h>
#include <libtracker-common/tracker-type-utils.h>
#include "tracker-dbus.h"
@@ -182,7 +183,7 @@
info->mime = g_strdup ("unknown");
service = g_strdup ("Files");
} else {
- info->mime = tracker_get_mime_type (uri);
+ info->mime = tracker_file_get_mime_type (uri);
service = tracker_service_manager_get_service_type_for_mime (info->mime);
info = tracker_get_file_info (info);
}
@@ -251,8 +252,8 @@
name = g_path_get_basename (info->uri);
path = g_path_get_dirname (info->uri);
} else {
- name = tracker_get_vfs_name (info->uri);
- path = tracker_get_vfs_path (info->uri);
+ name = tracker_file_get_vfs_name (info->uri);
+ path = tracker_file_get_vfs_path (info->uri);
}
service = tracker_service_manager_get_service_type_for_mime (mime);
@@ -365,8 +366,8 @@
name = g_path_get_basename (uri);
path = g_path_get_dirname (uri);
} else {
- name = tracker_get_vfs_name (uri);
- path = tracker_get_vfs_path (uri);
+ name = tracker_file_get_vfs_name (uri);
+ path = tracker_file_get_vfs_path (uri);
}
is_directory = FALSE;
@@ -604,8 +605,8 @@
name = g_path_get_basename (uri);
path = g_path_get_dirname (uri);
} else {
- name = tracker_get_vfs_name (uri);
- path = tracker_get_vfs_path (uri);
+ name = tracker_file_get_vfs_name (uri);
+ path = tracker_file_get_vfs_path (uri);
}
max_length_str = tracker_int_to_string (max_length);
@@ -836,8 +837,8 @@
name = g_path_get_basename (uri);
path = g_path_get_dirname (uri);
} else {
- name = tracker_get_vfs_name (uri);
- path = tracker_get_vfs_path (uri);
+ name = tracker_file_get_vfs_name (uri);
+ path = tracker_file_get_vfs_path (uri);
}
result_set = tracker_exec_proc (db_con,
Modified: branches/indexer-split/src/trackerd/tracker-email-evolution.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-email-evolution.c (original)
+++ branches/indexer-split/src/trackerd/tracker-email-evolution.c Wed Apr 30 09:29:05 2008
@@ -33,7 +33,9 @@
#include <libtracker-common/tracker-log.h>
#include <libtracker-common/tracker-config.h>
+#include <libtracker-common/tracker-file-utils.h>
#include <libtracker-common/tracker-type-utils.h>
+#include <libtracker-common/tracker-utils.h>
#include "tracker-email-utils.h"
#include "tracker-db-email.h"
@@ -338,7 +340,7 @@
dir_path = dir->data;
if (g_str_has_prefix (info->uri, dir_path)) {
- mime = tracker_get_mime_type (info->uri);
+ mime = tracker_file_get_mime_type (info->uri);
result = (strcmp (mime, "message/rfc822") == 0);
g_free (mime);
@@ -355,7 +357,7 @@
dir_path = dir->data;
if (g_str_has_prefix (info->uri, dir_path)) {
- mime = tracker_get_mime_type (info->uri);
+ mime = tracker_file_get_mime_type (info->uri);
result = (strcmp (mime, "message/rfc822") == 0);
g_free (mime);
Modified: branches/indexer-split/src/trackerd/tracker-email-kmail.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-email-kmail.c (original)
+++ branches/indexer-split/src/trackerd/tracker-email-kmail.c Wed Apr 30 09:29:05 2008
@@ -27,7 +27,9 @@
#include <libtracker-common/tracker-log.h>
#include <libtracker-common/tracker-utils.h>
+#include <libtracker-common/tracker-file-utils.h>
#include <libtracker-common/tracker-type-utils.h>
+#include <libtracker-common/tracker-utils.h>
#include "tracker-email-utils.h"
#include "tracker-db-email.h"
@@ -664,7 +666,7 @@
/* if we are in a maildir directory, we will only index emails in directory "cur" */
gchar *dir_cur = g_build_filename (dir_path, "cur", NULL);
- if (tracker_is_directory (dir_cur)) {
+ if (tracker_file_is_directory (dir_cur)) {
dirs = g_slist_prepend (dirs, g_strdup (dir_cur));
}
g_free (dir_cur);
@@ -738,7 +740,7 @@
mail_msg->uri = g_strdup (mail_msg->path);
mail_msg->store = store;
- mail_msg->mtime = tracker_get_file_mtime (mail_msg->path);
+ mail_msg->mtime = tracker_file_get_mtime (mail_msg->path);
tracker_db_email_save_email (db_con, mail_msg, MAIL_APP_KMAIL);
email_free_mail_file (mail_msg->parent_mail_file);
Modified: branches/indexer-split/src/trackerd/tracker-email-modest.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-email-modest.c (original)
+++ branches/indexer-split/src/trackerd/tracker-email-modest.c Wed Apr 30 09:29:05 2008
@@ -22,9 +22,6 @@
#define _GNU_SOURCE
#endif
-#include <libtracker-common/tracker-log.h>
-#include <libtracker-common/tracker-config.h>
-
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
@@ -34,6 +31,11 @@
#include <glib/gstdio.h>
#include <dirent.h>
+#include <libtracker-common/tracker-log.h>
+#include <libtracker-common/tracker-config.h>
+#include <libtracker-common/tracker-file-utils.h>
+#include <libtracker-common/tracker-utils.h>
+
#include "tracker-email-modest.h"
#include "tracker-email-utils.h"
#include "tracker-db-email.h"
Modified: branches/indexer-split/src/trackerd/tracker-inotify.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-inotify.c (original)
+++ branches/indexer-split/src/trackerd/tracker-inotify.c Wed Apr 30 09:29:05 2008
@@ -34,6 +34,7 @@
#include <glib/gstdio.h>
#include <libtracker-common/tracker-log.h>
+#include <libtracker-common/tracker-file-utils.h>
#include <libtracker-common/tracker-utils.h>
#include "tracker-watch.h"
@@ -175,7 +176,7 @@
tracker->grace_period = 2;
tracker->request_waiting = TRUE;
- if (!tracker_is_directory (moved_to_info->uri)) {
+ if (!tracker_file_is_directory (moved_to_info->uri)) {
tracker_db_insert_pending_file (main_thread_db_con, moved_from_info->file_id, moved_from_info->uri, moved_to_info->uri, moved_from_info->mime, 0, TRACKER_ACTION_FILE_MOVED_FROM, FALSE, TRUE, -1);
// tracker_db_move_file (main_thread_db_con, moved_from_info->uri, moved_to_info->uri);
@@ -192,7 +193,7 @@
/* matching pair not found so treat as a create action */
tracker_debug ("no matching pair found for inotify move event for %s", info->uri);
- if (tracker_is_directory (info->uri)) {
+ if (tracker_file_is_directory (info->uri)) {
info->action = TRACKER_ACTION_DIRECTORY_CREATED;
} else {
info->action = TRACKER_ACTION_WRITABLE_FILE_CLOSED;
@@ -411,7 +412,7 @@
action_type == TRACKER_ACTION_DIRECTORY_MOVED_FROM) &&
tracker_process_files_should_be_crawled (tracker, str) &&
tracker_process_files_should_be_watched (tracker->config, str)) {
- process_event (str, tracker_is_directory (str), action_type, cookie);
+ process_event (str, tracker_file_is_directory (str), action_type, cookie);
} else {
tracker_debug ("ignoring action %d on file %s", action_type, str);
}
Modified: branches/indexer-split/src/trackerd/tracker-metadata.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-metadata.c (original)
+++ branches/indexer-split/src/trackerd/tracker-metadata.c Wed Apr 30 09:29:05 2008
@@ -32,6 +32,7 @@
#include <glib/gstdio.h>
#include <libtracker-common/tracker-log.h>
+#include <libtracker-common/tracker-file-utils.h>
#include "tracker-metadata.h"
#include "tracker-utils.h"
Modified: branches/indexer-split/src/trackerd/tracker-process-files.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-process-files.c (original)
+++ branches/indexer-split/src/trackerd/tracker-process-files.c Wed Apr 30 09:29:05 2008
@@ -32,6 +32,8 @@
#include <libtracker-common/tracker-config.h>
#include <libtracker-common/tracker-log.h>
+#include <libtracker-common/tracker-os-dependant.h>
+#include <libtracker-common/tracker-file-utils.h>
#include <libtracker-common/tracker-type-utils.h>
#include <libtracker-common/tracker-utils.h>
@@ -45,7 +47,6 @@
#include "tracker-email.h"
#include "tracker-hal.h"
#include "tracker-indexer.h"
-#include "tracker-os-dependant.h"
#include "tracker-watch.h"
#include "tracker-service.h"
#include "tracker-status.h"
@@ -160,7 +161,7 @@
continue;
}
- if (!dir_only || tracker_is_directory (built_filename)) {
+ if (!dir_only || tracker_file_is_directory (built_filename)) {
if (tracker_process_files_should_be_watched (tracker->config, built_filename)) {
files = g_slist_prepend (files, built_filename);
} else {
@@ -246,7 +247,7 @@
continue;
}
- if (!tracker_is_directory (dir)) {
+ if (!tracker_file_is_directory (dir)) {
g_free (dir);
continue;
}
@@ -314,7 +315,7 @@
/* Keep mainloop responsive */
process_my_yield ();
- if (!tracker_is_directory (uri)) {
+ if (!tracker_file_is_directory (uri)) {
tracker_db_insert_pending_file (tracker->index_db, 0, uri, NULL, "unknown", 0,
TRACKER_ACTION_CHECK, 0, FALSE, -1);
} else {
@@ -364,7 +365,7 @@
g_return_if_fail (tracker->index_db);
g_return_if_fail (tracker_check_uri (uri));
- g_return_if_fail (tracker_is_directory (uri));
+ g_return_if_fail (tracker_file_is_directory (uri));
/* Keep mainloop responsive */
process_my_yield ();
@@ -624,7 +625,7 @@
}
g_return_if_fail (tracker_check_uri (uri));
- g_return_if_fail (tracker_is_directory (uri));
+ g_return_if_fail (tracker_file_is_directory (uri));
files = process_get_files (tracker, uri, FALSE, TRUE, NULL);
tracker_debug ("Checking %s for %d files", uri, g_slist_length (files));
Modified: branches/indexer-split/src/trackerd/tracker-utils.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-utils.c (original)
+++ branches/indexer-split/src/trackerd/tracker-utils.c Wed Apr 30 09:29:05 2008
@@ -17,12 +17,6 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
-
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
-
#include "config.h"
#include <sys/time.h>
@@ -52,19 +46,19 @@
#include <libtracker-common/tracker-log.h>
#include <libtracker-common/tracker-config.h>
+#include <libtracker-common/tracker-os-dependant.h>
+#include <libtracker-common/tracker-file-utils.h>
#include <libtracker-common/tracker-utils.h>
-#include "../xdgmime/xdgmime.h"
+
#include "tracker-dbus.h"
#include "tracker-utils.h"
#include "tracker-indexer.h"
#include "tracker-process-files.h"
-#include "tracker-os-dependant.h"
extern Tracker *tracker;
#define ZLIBBUFSIZ 8192
-#define TEXT_SNIFF_SIZE 4096
#define MAX_INDEX_FILE_SIZE 2000000000
static int info_allocated = 0;
@@ -410,31 +404,6 @@
}
-gint32
-tracker_get_file_mtime (const char *uri)
-{
- struct stat finfo;
- char *uri_in_locale;
-
- uri_in_locale = g_filename_from_utf8 (uri, -1, NULL, NULL, NULL);
-
- if (uri_in_locale) {
- if (g_lstat (uri_in_locale, &finfo) == -1) {
- g_free (uri_in_locale);
-
- return 0;
- }
-
- } else {
- tracker_error ("ERROR: uri could not be converted to locale format");
-
- return 0;
- }
-
- g_free (uri_in_locale);
-
- return (gint32) finfo.st_mtime;
-}
FileInfo *
@@ -525,7 +494,9 @@
void
tracker_add_service_path (const char *service, const char *path)
{
- if (!service || !path || !tracker_file_is_valid (path)) {
+ if (!service ||
+ !path ||
+ !tracker_file_is_valid (path)) {
return;
}
@@ -586,303 +557,6 @@
return result;
}
-
-gboolean
-tracker_file_is_valid (const char *uri)
-{
- gboolean convert_ok;
- char *uri_in_locale;
-
- uri_in_locale = g_filename_from_utf8 (uri, -1, NULL, NULL, NULL);
-
- if (!uri_in_locale) {
- tracker_error ("ERROR: uri could not be converted to locale format");
- g_free (uri_in_locale);
- return FALSE;
- }
-
- /* g_file_test(file,G_FILE_TEST_EXISTS) uses the access() system call and so needs locale filenames. */
- convert_ok = (tracker_check_uri (uri) && g_file_test (uri_in_locale, G_FILE_TEST_IS_REGULAR|G_FILE_TEST_IS_DIR|G_FILE_TEST_IS_SYMLINK));
-
- g_free (uri_in_locale);
-
- return convert_ok;
-}
-
-
-gboolean
-tracker_file_is_indexable (const char *uri)
-{
- char *uri_in_locale;
- struct stat finfo;
- gboolean convert_ok;
-
- uri_in_locale = g_filename_from_utf8 (uri, -1, NULL, NULL, NULL);
-
- if (!uri_in_locale) {
- tracker_error ("ERROR: uri could not be converted to locale format");
- return FALSE;
- }
-
- g_lstat (uri_in_locale, &finfo);
-
- g_free (uri_in_locale);
-
- convert_ok = (!S_ISDIR (finfo.st_mode) && S_ISREG (finfo.st_mode));
-
- if (convert_ok) {
- tracker_debug ("file %s is indexable", uri);
- } else {
- tracker_debug ("file %s is *not* indexable", uri);
- }
-
- return convert_ok;
-}
-
-
-static inline gboolean
-is_utf8 (const gchar *buffer, gint buffer_length)
-{
- gchar *end;
-
- /* code in this function modified from gnome-vfs */
-
- if (g_utf8_validate ((gchar *)buffer, buffer_length, (const gchar**)&end)) {
- return TRUE;
- } else {
- /* Check whether the string was truncated in the middle of
- * a valid UTF8 char, or if we really have an invalid
- * UTF8 string
- */
- gint remaining_bytes = buffer_length;
-
- remaining_bytes -= (end-((gchar *)buffer));
-
- if (remaining_bytes > 4) {
- return FALSE;
- }
-
- if (g_utf8_get_char_validated (end, (gsize) remaining_bytes) == (gunichar) -2) {
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-
-static gboolean
-is_text_file (const gchar *uri)
-{
- char buffer[TEXT_SNIFF_SIZE];
- int buffer_length = 0;
- GError *err = NULL;
- int fd;
-
- fd = tracker_file_open (uri, FALSE);
-
- buffer_length = read (fd, buffer, TEXT_SNIFF_SIZE);
-
- if (buffer_length < 3) {
- goto return_false;
- }
-
- /* Don't allow embedded zeros in textfiles. */
- if (memchr (buffer, 0, buffer_length) != NULL) {
- goto return_false;
- }
-
- if (is_utf8 (buffer, buffer_length)) {
- goto return_true;
- } else {
- gchar *tmp = g_locale_to_utf8 (buffer, buffer_length, NULL, NULL, &err);
- g_free (tmp);
-
- if (err) {
- gboolean result = FALSE;
-
- if (err->code != G_CONVERT_ERROR_ILLEGAL_SEQUENCE && err->code != G_CONVERT_ERROR_FAILED && err->code != G_CONVERT_ERROR_NO_CONVERSION) {
- result = TRUE;
- }
-
- g_error_free (err);
-
- if (result) goto return_true;
-
- }
- }
-
-return_false:
- tracker_file_close (fd, TRUE);
- return FALSE;
-
-return_true:
- tracker_file_close (fd, FALSE);
- return TRUE;
-}
-
-
-char *
-tracker_get_mime_type (const char *uri)
-{
- struct stat finfo;
- char *uri_in_locale;
- const char *result;
- char *mime;
-
- if (!tracker_file_is_valid (uri)) {
- tracker_log ("WARNING: file %s is no longer valid", uri);
- return g_strdup ("unknown");
- }
-
- uri_in_locale = g_filename_from_utf8 (uri, -1, NULL, NULL, NULL);
-
- if (!uri_in_locale) {
- tracker_error ("ERROR: uri could not be converted to locale format");
- return g_strdup ("unknown");
- }
-
- g_lstat (uri_in_locale, &finfo);
-
- if (S_ISLNK (finfo.st_mode) && S_ISDIR (finfo.st_mode)) {
- g_free (uri_in_locale);
- return g_strdup ("symlink");
- }
-
-
- /* handle iso files as they can be mistaken for video files */
-
- if (g_str_has_suffix (uri, ".iso")) {
- return g_strdup ("application/x-cd-image");
- }
-
- result = xdg_mime_get_mime_type_for_file (uri, NULL);
-
- if (!result || (result == XDG_MIME_TYPE_UNKNOWN)) {
-
- if (is_text_file (uri_in_locale)) {
- mime = g_strdup ("text/plain");
- } else {
- mime = g_strdup ("unknown");
- }
- } else {
- mime = g_strdup (result);
- }
-
- g_free (uri_in_locale);
-
- return mime;
-}
-
-
-char *
-tracker_get_vfs_path (const char* uri)
-{
- if (uri != NULL && strchr (uri, G_DIR_SEPARATOR) != NULL) {
- char *p;
- int len;
-
- len = strlen (uri);
- p = (char *) (uri + (len - 1));
-
- /* Skip trailing slash */
- if (p != uri && *p == G_DIR_SEPARATOR) {
- p--;
- }
-
- /* Search backwards to the next slash. */
- while (p != uri && *p != G_DIR_SEPARATOR) {
- p--;
- }
-
- if (p[0] != '\0') {
-
- char *new_uri_text;
- int length;
-
- length = p - uri;
-
- if (length == 0) {
- new_uri_text = g_strdup (G_DIR_SEPARATOR_S);
- } else {
- new_uri_text = g_malloc (length + 1);
- memcpy (new_uri_text, uri, length);
- new_uri_text[length] = '\0';
- }
-
- return new_uri_text;
- } else {
- return g_strdup (G_DIR_SEPARATOR_S);
- }
- }
-
- return NULL;
-}
-
-
-char *
-tracker_get_vfs_name (const char* uri)
-{
- if (uri != NULL && strchr (uri, G_DIR_SEPARATOR) != NULL) {
- char *p, *res, *tmp, *result;
- int len;
-
- len = strlen (uri);
-
- tmp = g_strdup (uri);
-
- p = (tmp + (len - 1));
-
- /* Skip trailing slash */
- if (p != tmp && *p == G_DIR_SEPARATOR) {
- *p = '\0';
- }
-
- /* Search backwards to the next slash. */
- while (p != tmp && *p != G_DIR_SEPARATOR) {
- p--;
- }
-
- res = p+1;
-
- if (res && res[0] != '\0') {
- result = g_strdup (res);
- g_free (tmp);
-
- return result;
- }
-
- g_free (tmp);
-
- }
-
- return g_strdup (" ");
-}
-
-
-gboolean
-tracker_is_directory (const char *dir)
-{
- char *dir_in_locale;
-
- dir_in_locale = g_filename_from_utf8 (dir, -1, NULL, NULL, NULL);
-
- if (dir_in_locale) {
- struct stat finfo;
-
- g_lstat (dir_in_locale, &finfo);
-
- g_free (dir_in_locale);
-
- return S_ISDIR (finfo.st_mode);
-
- } else {
- tracker_error ("ERROR: dir could not be converted to locale format");
- }
-
- return FALSE;
-}
-
void
tracker_throttle (int multiplier)
{
@@ -1527,37 +1201,6 @@
}
}
-gchar *
-tracker_string_replace (const gchar *haystack, gchar *needle, gchar *replacement)
-{
- GString *str;
- gint pos, needle_len;
-
- g_return_val_if_fail (haystack && needle, NULL);
-
- needle_len = strlen (needle);
-
- str = g_string_new ("");
-
- for (pos = 0; haystack[pos]; pos++)
- {
- if (strncmp (&haystack[pos], needle, needle_len) == 0)
- {
- if (replacement) {
- str = g_string_append (str, replacement);
- }
-
- pos += needle_len - 1;
-
- } else {
- str = g_string_append_c (str, haystack[pos]);
- }
- }
-
- return g_string_free (str, FALSE);
-}
-
-
void
tracker_add_metadata_to_table (GHashTable *meta_table, const gchar *key, const gchar *value)
{
@@ -1604,22 +1247,6 @@
}
-gboolean
-tracker_unlink (const gchar *uri)
-{
- gchar *locale_uri = g_filename_from_utf8 (uri, -1, NULL, NULL, NULL);
-
- if (!g_file_test (locale_uri, G_FILE_TEST_EXISTS)) {
- g_free (locale_uri);
- return FALSE;
- }
-
- g_unlink (locale_uri);
-
- g_free (locale_uri);
-
- return TRUE;
-}
int
@@ -1672,59 +1299,6 @@
return 0;
}
-guint32
-tracker_file_size (const gchar *name)
-{
- struct stat finfo;
-
- if (g_lstat (name, &finfo) == -1) {
- return 0;
- } else {
- return (guint32) finfo.st_size;
- }
-}
-
-int
-tracker_file_open (const gchar *file_name, gboolean readahead)
-{
- int fd;
-
-#if defined(__linux__)
- fd = open (file_name, O_RDONLY|O_NOATIME);
-
- if (fd == -1) {
- fd = open (file_name, O_RDONLY);
- }
-#else
- fd = open (file_name, O_RDONLY);
-#endif
-
- if (fd == -1) return -1;
-
-#ifdef HAVE_POSIX_FADVISE
- if (readahead) {
- posix_fadvise (fd, 0, 0, POSIX_FADV_SEQUENTIAL);
- } else {
- posix_fadvise (fd, 0, 0, POSIX_FADV_RANDOM);
- }
-#endif
-
- return fd;
-}
-
-
-void
-tracker_file_close (int fd, gboolean no_longer_needed)
-{
-
-#ifdef HAVE_POSIX_FADVISE
- if (no_longer_needed) {
- posix_fadvise (fd, 0, 0, POSIX_FADV_DONTNEED);
- }
-#endif
- close (fd);
-}
-
void
tracker_add_io_grace (const gchar *uri)
{
@@ -1788,7 +1362,7 @@
char *file_index = g_build_filename (tracker->data_dir, "file-index.db", NULL);
- if (tracker_file_size (file_index) > MAX_INDEX_FILE_SIZE) {
+ if (tracker_file_get_size (file_index) > MAX_INDEX_FILE_SIZE) {
tracker_error ("file index is too big - discontinuing index");
g_free (file_index);
return TRUE;
@@ -1797,7 +1371,7 @@
char *email_index = g_build_filename (tracker->data_dir, "email-index.db", NULL);
- if (tracker_file_size (email_index) > MAX_INDEX_FILE_SIZE) {
+ if (tracker_file_get_size (email_index) > MAX_INDEX_FILE_SIZE) {
tracker_error ("email index is too big - discontinuing index");
g_free (email_index);
return TRUE;
@@ -1806,7 +1380,7 @@
char *file_meta = g_build_filename (tracker->data_dir, "file-meta.db", NULL);
- if (tracker_file_size (file_meta) > MAX_INDEX_FILE_SIZE) {
+ if (tracker_file_get_size (file_meta) > MAX_INDEX_FILE_SIZE) {
tracker_error ("file metadata is too big - discontinuing index");
g_free (file_meta);
return TRUE;
@@ -1815,7 +1389,7 @@
char *email_meta = g_build_filename (tracker->data_dir, "email-meta.db", NULL);
- if (tracker_file_size (email_meta) > MAX_INDEX_FILE_SIZE) {
+ if (tracker_file_get_size (email_meta) > MAX_INDEX_FILE_SIZE) {
tracker_error ("email metadata is too big - discontinuing index");
g_free (email_meta);
return TRUE;
Modified: branches/indexer-split/src/trackerd/tracker-utils.h
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-utils.h (original)
+++ branches/indexer-split/src/trackerd/tracker-utils.h Wed Apr 30 09:29:05 2008
@@ -377,10 +377,6 @@
void tracker_remove_dirs (const char *root_dir);
char * tracker_format_search_terms (const char *str, gboolean *do_bool_search);
-gint32 tracker_get_file_mtime (const char *uri);
-
-char * tracker_array_to_str (char **array, int length, char sep);
-
GSList * tracker_get_service_dirs (const char *service);
void tracker_add_service_path (const char *service, const char *path);
void tracker_del_service_path (const char *service, const char *path);
@@ -396,20 +392,6 @@
FileInfo * tracker_free_file_info (FileInfo *info);
-char * tracker_get_vfs_path (const char *uri);
-
-char * tracker_get_vfs_name (const char *uri);
-char * tracker_get_mime_type (const char *uri);
-
-gboolean tracker_file_is_valid (const char *uri);
-
-gboolean tracker_file_is_indexable (const char *uri);
-
-gboolean tracker_is_mounted (const char *dir);
-gboolean tracker_is_directory (const char *dir);
-
-void tracker_load_config_file (void);
-
GSList * tracker_get_watch_root_dirs (void);
void tracker_print_object_allocations (void);
@@ -430,20 +412,12 @@
gboolean tracker_spawn (char **argv, int timeout, char **tmp_stdout, int *exit_status);
-char* tracker_string_replace (const char *haystack, char *needle, char *replacement);
-
void tracker_add_metadata_to_table (GHashTable *meta_table, const char *key, const char *value);
void tracker_free_metadata_field (FieldData *field_data);
-gboolean tracker_unlink (const char *uri);
-
int tracker_get_memory_usage (void);
-guint32 tracker_file_size (const char *name);
-int tracker_file_open (const char *file_name, gboolean readahead);
-void tracker_file_close (int fd, gboolean no_longer_needed);
-
void tracker_add_io_grace (const char *uri);
void free_file_change (FileChange **user_data);
Modified: branches/indexer-split/src/trackerd/trackerd.c
==============================================================================
--- branches/indexer-split/src/trackerd/trackerd.c (original)
+++ branches/indexer-split/src/trackerd/trackerd.c Wed Apr 30 09:29:05 2008
@@ -45,6 +45,7 @@
#include <libtracker-common/tracker-config.h>
#include <libtracker-common/tracker-language.h>
#include <libtracker-common/tracker-log.h>
+#include <libtracker-common/tracker-file-utils.h>
#include "tracker-dbus.h"
#include "tracker-email.h"
@@ -674,7 +675,7 @@
/* Set up the log */
log_filename = g_build_filename (tracker->root_dir, "tracker.log", NULL);
- tracker_unlink (log_filename);
+ tracker_file_unlink (log_filename);
tracker_log_init (log_filename,
tracker_config_get_verbosity (tracker->config),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]