[Commits] [SCM] claws branch, master, updated. 3.13.2-5-ga5c8092
ticho at claws-mail.org
ticho at claws-mail.org
Sun Jan 24 00:01:55 CET 2016
The branch, master has been updated
via a5c8092f06252c6cd9b000690a8190d77a8ceed2 (commit)
from cbc36707c3f39c95ea45d83428ca15a06cc979be (commit)
Summary of changes:
src/mh.c | 99 ++++++++++++++++++++++++++++++++++-----------------------
src/procmsg.c | 1 -
2 files changed, 59 insertions(+), 41 deletions(-)
- Log -----------------------------------------------------------------
commit a5c8092f06252c6cd9b000690a8190d77a8ceed2
Author: Andrej Kacian <ticho at claws-mail.org>
Date: Sat Jan 23 23:58:34 2016 +0100
MH class now should not change working directory anymore.
diff --git a/src/mh.c b/src/mh.c
index dbf250c..b9036aa 100644
--- a/src/mh.c
+++ b/src/mh.c
@@ -243,7 +243,7 @@ gboolean mh_scan_required(Folder *folder, FolderItem *item)
static void mh_get_last_num(Folder *folder, FolderItem *item)
{
- gchar *path;
+ gchar *path, *fullpath;
GDir *dp;
const gchar *d;
GError *error = NULL;
@@ -256,22 +256,19 @@ static void mh_get_last_num(Folder *folder, FolderItem *item)
path = folder_item_get_path(item);
cm_return_if_fail(path != NULL);
- if (change_dir(path) < 0) {
- g_free(path);
- return;
- }
- g_free(path);
- if ((dp = g_dir_open(".", 0, &error)) == NULL) {
+ if ((dp = g_dir_open(path, 0, &error)) == NULL) {
g_message("Couldn't open current directory: %s (%d).\n",
error->message, error->code);
g_error_free(error);
+ g_free(path);
return;
}
while ((d = g_dir_read_name(dp)) != NULL) {
+ fullpath = g_strconcat(path, G_DIR_SEPARATOR_S, d, NULL);
if ((num = to_number(d)) > 0 &&
- g_file_test(d, G_FILE_TEST_IS_REGULAR)) {
+ g_file_test(fullpath, G_FILE_TEST_IS_REGULAR)) {
if (max < num)
max = num;
}
@@ -279,6 +276,8 @@ static void mh_get_last_num(Folder *folder, FolderItem *item)
GTK_EVENTS_FLUSH();
}
g_dir_close(dp);
+ g_free(fullpath);
+ g_free(path);
debug_print("Last number in dir %s = %d\n", item->path?item->path:"(null)", max);
item->last_num = max;
@@ -301,18 +300,15 @@ gint mh_get_num_list(Folder *folder, FolderItem *item, GSList **list, gboolean *
path = folder_item_get_path(item);
cm_return_val_if_fail(path != NULL, -1);
- if (change_dir(path) < 0) {
- g_free(path);
- return -1;
- }
- g_free(path);
- if ((dp = g_dir_open(".", 0, &error)) == NULL) {
+ if ((dp = g_dir_open(path, 0, &error)) == NULL) {
g_message("Couldn't open current directory: %s (%d).\n",
error->message, error->code);
g_error_free(error);
+ g_free(path);
return -1;
}
+ g_free(path);
while ((d = g_dir_read_name(dp)) != NULL) {
if ((num = to_number(d)) > 0) {
@@ -734,21 +730,26 @@ static gboolean mh_is_msg_changed(Folder *folder, FolderItem *item,
MsgInfo *msginfo)
{
GStatBuf s;
+ gchar *path;
- if (g_stat(itos(msginfo->msgnum), &s) < 0 ||
+ path = g_strdup_printf("%s%c%d", folder_item_get_path(item),
+ G_DIR_SEPARATOR, msginfo->msgnum);
+ if (g_stat((path), &s) < 0 ||
msginfo->size != s.st_size || (
(msginfo->mtime - s.st_mtime != 0) &&
(msginfo->mtime - s.st_mtime != 3600) &&
- (msginfo->mtime - s.st_mtime != -3600)))
+ (msginfo->mtime - s.st_mtime != -3600))) {
+ g_free(path);
return TRUE;
+ }
+ g_free(path);
return FALSE;
}
static gint mh_scan_tree(Folder *folder)
{
FolderItem *item;
- gchar *rootpath;
cm_return_val_if_fail(folder != NULL, -1);
@@ -759,13 +760,6 @@ static gint mh_scan_tree(Folder *folder)
} else
item = FOLDER_ITEM(folder->node->data);
- rootpath = folder_item_get_path(item);
- if (change_dir(rootpath) < 0) {
- g_free(rootpath);
- return -1;
- }
- g_free(rootpath);
-
mh_create_tree(folder);
mh_remove_missing_folder_items(folder);
mh_scan_tree_recursive(item);
@@ -783,19 +777,31 @@ static gint mh_scan_tree(Folder *folder)
} \
if (make_dir_hier(dir) < 0) \
return -1; \
+ debug_print("Created dir '%s'\n", dir); \
} \
}
static gint mh_create_tree(Folder *folder)
{
- gchar *rootpath, *f;
+ gchar *rootpath, *f, *path;
cm_return_val_if_fail(folder != NULL, -1);
- CHDIR_RETURN_VAL_IF_FAIL(get_mail_base_dir(), -1);
rootpath = LOCAL_FOLDER(folder)->rootpath;
+#ifdef G_OS_UNIX
+ if (*rootpath == '/') {
+#elif G_OS_WIN32
+ if (g_ascii_isalpha(*rootpath) && !strncmp(rootpath + 1, "\:", 2)) {
+#endif
+ /* Folder path is absolute. */
+ rootpath = g_strdup(rootpath);
+ } else {
+ /* Folder path is relative, using mail base dir. */
+ rootpath = g_strconcat(get_mail_base_dir(), G_DIR_SEPARATOR_S,
+ rootpath, NULL);
+ }
+
MAKE_DIR_IF_NOT_EXIST(rootpath);
- CHDIR_RETURN_VAL_IF_FAIL(rootpath, -1);
/* Create special directories as needed */
if (folder->inbox != NULL &&
@@ -803,36 +809,47 @@ static gint mh_create_tree(Folder *folder)
f = folder->inbox->path;
else
f = INBOX_DIR;
- MAKE_DIR_IF_NOT_EXIST(f);
+ path = g_strconcat(rootpath, G_DIR_SEPARATOR_S, f, NULL);
+ MAKE_DIR_IF_NOT_EXIST(path);
+ g_free(path);
if (folder->outbox != NULL &&
folder->outbox->path != NULL)
f = folder->outbox->path;
else
f = OUTBOX_DIR;
- MAKE_DIR_IF_NOT_EXIST(f);
+ path = g_strconcat(rootpath, G_DIR_SEPARATOR_S, f, NULL);
+ MAKE_DIR_IF_NOT_EXIST(path);
+ g_free(path);
if (folder->draft != NULL &&
folder->draft->path != NULL)
f = folder->draft->path;
else
f = DRAFT_DIR;
- MAKE_DIR_IF_NOT_EXIST(f);
+ path = g_strconcat(rootpath, G_DIR_SEPARATOR_S, f, NULL);
+ MAKE_DIR_IF_NOT_EXIST(path);
+ g_free(path);
if (folder->queue != NULL &&
folder->queue->path != NULL)
f = folder->queue->path;
else
f = QUEUE_DIR;
- MAKE_DIR_IF_NOT_EXIST(f);
+ path = g_strconcat(rootpath, G_DIR_SEPARATOR_S, f, NULL);
+ MAKE_DIR_IF_NOT_EXIST(path);
+ g_free(path);
if (folder->trash != NULL &&
folder->trash->path != NULL)
f = folder->trash->path;
else
f = TRASH_DIR;
- MAKE_DIR_IF_NOT_EXIST(f);
+ path = g_strconcat(rootpath, G_DIR_SEPARATOR_S, f, NULL);
+ MAKE_DIR_IF_NOT_EXIST(path);
+ g_free(path);
+ g_free(rootpath);
return 0;
}
@@ -1105,7 +1122,7 @@ static void mh_scan_tree_recursive(FolderItem *item)
Folder *folder;
GDir *dir;
const gchar *dir_name;
- gchar *real_path, *entry, *utf8entry, *utf8name;
+ gchar *entry, *utf8entry, *utf8name, *path;
gint n_msg = 0;
GError *error = NULL;
@@ -1114,16 +1131,16 @@ static void mh_scan_tree_recursive(FolderItem *item)
folder = item->folder;
- real_path = item->path ? mh_filename_from_utf8(item->path) : g_strdup(".");
- dir = g_dir_open(real_path, 0, &error);
+ path = folder_item_get_path(item);
+ debug_print("mh_scan_tree_recursive() opening '%s'\n", path);
+ dir = g_dir_open(path, 0, &error);
if (!dir) {
g_warning("failed to open directory '%s': %s (%d)",
- real_path, error->message, error->code);
+ path, error->message, error->code);
g_error_free(error);
- g_free(real_path);
+ g_free(path);
return;
}
- g_free(real_path);
debug_print("scanning %s ...\n",
item->path ? item->path
@@ -1134,13 +1151,14 @@ static void mh_scan_tree_recursive(FolderItem *item)
while ((dir_name = g_dir_read_name(dir)) != NULL) {
if (dir_name[0] == '.') continue;
+ entry = g_strconcat(path, G_DIR_SEPARATOR_S, dir_name, NULL);
+
utf8name = mh_filename_to_utf8(dir_name);
if (item->path)
utf8entry = g_strconcat(item->path, G_DIR_SEPARATOR_S,
utf8name, NULL);
else
utf8entry = g_strdup(utf8name);
- entry = mh_filename_from_utf8(utf8entry);
if (g_file_test(entry, G_FILE_TEST_IS_DIR)) {
FolderItem *new_item = NULL;
@@ -1149,7 +1167,7 @@ static void mh_scan_tree_recursive(FolderItem *item)
node = item->node;
for (node = node->children; node != NULL; node = node->next) {
FolderItem *cur_item = FOLDER_ITEM(node->data);
- gchar *curpath = mh_filename_from_utf8(cur_item->path);
+ gchar *curpath = folder_item_get_path(cur_item);
if (!strcmp2(curpath, entry)) {
new_item = cur_item;
g_free(curpath);
@@ -1196,6 +1214,7 @@ static void mh_scan_tree_recursive(FolderItem *item)
}
g_dir_close(dir);
+ g_free(path);
mh_set_mtime(folder, item);
}
diff --git a/src/procmsg.c b/src/procmsg.c
index d3f11a7..153da63 100644
--- a/src/procmsg.c
+++ b/src/procmsg.c
@@ -537,7 +537,6 @@ gboolean procmsg_msg_exist(MsgInfo *msginfo)
if (!msginfo) return FALSE;
path = folder_item_get_path(msginfo->folder);
- change_dir(path);
ret = !folder_item_is_msg_changed(msginfo->folder, msginfo);
g_free(path);
-----------------------------------------------------------------------
hooks/post-receive
--
Claws Mail
More information about the Commits
mailing list