warning fixes
[apps/madmutt.git] / init.c
diff --git a/init.c b/init.c
index 32f913b..c32e551 100644 (file)
--- a/init.c
+++ b/init.c
 #include <errno.h>
 #include <sys/wait.h>
 
-#define CHECK_PAGER \
-  if ((CurrentMenu == MENU_PAGER) && \
-      (!option || (option->flags & R_RESORT))) \
-  { \
-    snprintf (err->data, err->dsize, \
-              _("Not available in this menu.")); \
-    return (-1); \
-  } else
-
 /*
  * prototypes
  */
@@ -279,10 +270,26 @@ static void sys_to_string (char* dst, size_t dstlen,
     val = CurrentFolder;
   } else if (ascii_strcmp ("muttng_folder_name", option->option) == 0 &&
              CurrentFolder && *CurrentFolder) {
-    if ((t = strrchr (CurrentFolder, '/')) != NULL)
+
+    size_t Maildirlength = str_len (Maildir);
+
+    /*
+     * if name starts with $folder, just strip it to keep hierarchy
+     * $folder=imap://host, path=imap://host/inbox/b -> inbox/b
+     */
+    if (Maildirlength > 0 && str_ncmp (CurrentFolder, Maildir, 
+                                      Maildirlength) == 0 && 
+       str_len (CurrentFolder) > Maildirlength) {
+     val = CurrentFolder + Maildirlength;
+     if (Maildir[strlen(Maildir)-1]!='/')
+       val += 1;
+     /* if not $folder, just use everything after last / */
+    } else if ((t = strrchr (CurrentFolder, '/')) != NULL)
       val = t+1;
+    /* default: use as-is */
     else
       val = CurrentFolder;
+
   } else
     val = option->init;
 
@@ -342,7 +349,7 @@ static int user_from_string (struct option_t* dst, const char* val,
 
 static void quad_to_string (char* dst, size_t dstlen,
                             struct option_t* option) {
-  char *vals[] = { "no", "yes", "ask-no", "ask-yes" };
+  const char *vals[] = { "no", "yes", "ask-no", "ask-yes" };
   snprintf (dst, dstlen, "%s=%s", option->option,
             vals[quadoption (option->data)]);
 }
@@ -1208,7 +1215,7 @@ static int parse_unattach_list (BUFFER *buf, BUFFER *s, LIST **ldata, BUFFER *er
   return 0;
 }
 
-static int print_attach_list (LIST *lp, char op, char *name) {
+static int print_attach_list (LIST *lp, char op, const char *name) {
   while (lp) {
     printf("attachments %c%s %s/%s\n", op, name,
            ((ATTACH_MATCH *)lp->data)->major,
@@ -1591,7 +1598,7 @@ static void mutt_set_default (const char* name, void* p, unsigned long more) {
 }
 
 static struct option_t* add_option (const char* name, const char* init,
-                                    short type, short dup) {
+                                    short type, short dodup) {
   struct option_t* option = mem_calloc (1, sizeof (struct option_t));
 
   debug_print (1, ("adding $%s\n", name));
@@ -1599,7 +1606,7 @@ static struct option_t* add_option (const char* name, const char* init,
   option->option = str_dup (name);
   option->type = type;
   if (init)
-    option->init = dup ? str_dup (init) : (char*) init;
+    option->init = dodup ? str_dup (init) : (char*) init;
   return (option);
 }
 
@@ -1803,6 +1810,15 @@ static const struct mapping_t* get_sortmap (struct option_t* option) {
   return (map);
 }
 
+#define CHECK_PAGER \
+  if ((CurrentMenu == MENU_PAGER) && \
+      (!option || (option->flags & R_RESORT))) \
+  { \
+    snprintf (err->data, err->dsize, \
+              _("Not available in this menu.")); \
+    return (-1); \
+  }
+
 static int parse_set (BUFFER * tmp, BUFFER * s, unsigned long data,
                       BUFFER * err)
 {