[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