aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-folder.c
diff options
context:
space:
mode:
Diffstat (limited to 'camel/camel-folder.c')
-rw-r--r--camel/camel-folder.c37
1 files changed, 13 insertions, 24 deletions
diff --git a/camel/camel-folder.c b/camel/camel-folder.c
index c979c3278b..6455fbf77b 100644
--- a/camel/camel-folder.c
+++ b/camel/camel-folder.c
@@ -679,40 +679,29 @@ camel_folder_get_subfolder (CamelFolder *folder, gchar *folder_name, CamelExcept
static gboolean
_create (CamelFolder *folder, CamelException *ex)
{
- gchar *prefix;
- gchar dich_result;
CamelFolder *parent;
g_assert (folder->parent_store != NULL);
g_assert (folder->name != NULL);
- /* if the folder already exists on the
- store, do nothing and return true */
+ /* if the folder already exists on the store, do nothing and return true */
if (CF_CLASS (folder)->exists (folder, ex))
return TRUE;
-
if (folder->parent_folder) {
camel_folder_create (folder->parent_folder, ex);
- if (camel_exception_get_id (ex)) return FALSE;
- }
- else {
- if (folder->full_name) {
- dich_result = string_dichotomy (
- folder->full_name,
- folder->separator,
- &prefix, NULL,
- STRING_DICHOTOMY_STRIP_TRAILING | STRING_DICHOTOMY_RIGHT_DIR);
- if (dich_result!='o') {
- if (prefix == NULL) {
- /* separator is the first caracter, no folder above */
- return TRUE;
- }
- } else {
- parent = camel_store_get_folder (folder->parent_store, prefix, ex);
- camel_folder_create (parent, ex);
- if (camel_exception_get_id (ex)) return FALSE;
- }
+ if (camel_exception_get_id (ex))
+ return FALSE;
+ } else if (folder->full_name) {
+ char *slash, *prefix;
+
+ slash = strrchr(folder->full_name, folder->separator);
+ if (slash && slash != folder->full_name) {
+ prefix = g_strndup(folder->full_name, slash-folder->full_name);
+ parent = camel_store_get_folder (folder->parent_store, prefix, ex);
+ camel_folder_create (parent, ex);
+ if (camel_exception_get_id (ex))
+ return FALSE;
}
}
return TRUE;