X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=imap%2Fbrowse.c;h=fd9c4730e467e205cfaa4f4ebeae1604fe316d81;hp=e5d009f4288a886c5e9f501907ebd24f3c23fd4b;hb=adbac5bafc8f1ebe348b38342ace473f128d762a;hpb=93f817273e1c70071cd5471594600bc70f12f0ff diff --git a/imap/browse.c b/imap/browse.c index e5d009f..fd9c473 100644 --- a/imap/browse.c +++ b/imap/browse.c @@ -23,6 +23,8 @@ #include "lib/debug.h" #include "mutt.h" +#include "ascii.h" +#include "enter.h" #include "imap_private.h" /* -- forward declarations -- */ @@ -60,6 +62,7 @@ int imap_browse (char *path, struct browser_state *state) short showparents = 0; int noselect; int noinferiors; + int save_lsub; IMAP_MBOX mx; if (imap_parse_path (path, &mx)) { @@ -67,6 +70,8 @@ int imap_browse (char *path, struct browser_state *state) return -1; } + save_lsub = option (OPTIMAPCHECKSUBSCRIBED); + unset_option (OPTIMAPCHECKSUBSCRIBED); strfcpy (list_cmd, option (OPTIMAPLSUB) ? "LSUB" : "LIST", sizeof (list_cmd)); @@ -76,8 +81,7 @@ int imap_browse (char *path, struct browser_state *state) if (!mx.mbox) { home_namespace = 1; mbox[0] = '\0'; /* Do not replace "" with "INBOX" here */ - mx.mbox = safe_strdup (ImapHomeNamespace); - nns = 0; + mx.mbox = str_dup (ImapHomeNamespace); if (mutt_bit_isset (idata->capabilities, NAMESPACE)) { mutt_message _("Getting namespaces..."); @@ -98,7 +102,7 @@ int imap_browse (char *path, struct browser_state *state) imap_unquote_string (buf); /* As kludgy as it gets */ mbox[sizeof (mbox) - 1] = '\0'; strncpy (mbox, buf, sizeof (mbox) - 1); - n = safe_strlen (mbox); + n = str_len (mbox); debug_print (3, ("mbox: %s\n", mbox)); @@ -116,7 +120,7 @@ int imap_browse (char *path, struct browser_state *state) imap_unmunge_mbox_name (cur_folder); if (!noinferiors && cur_folder[0] && - (n = safe_strlen (mbox)) < LONG_STRING - 1) { + (n = str_len (mbox)) < LONG_STRING - 1) { mbox[n++] = idata->delim; mbox[n] = '\0'; } @@ -131,7 +135,7 @@ int imap_browse (char *path, struct browser_state *state) if (!home_namespace) showparents = 1; imap_qualify_path (buf, sizeof (buf), &mx, mbox); - state->folder = safe_strdup (buf); + state->folder = str_dup (buf); n--; } @@ -160,7 +164,7 @@ int imap_browse (char *path, struct browser_state *state) ctmp = mbox[n]; mbox[n] = '\0'; imap_qualify_path (buf, sizeof (buf), &mx, mbox); - state->folder = safe_strdup (buf); + state->folder = str_dup (buf); } mbox[n] = ctmp; } @@ -174,7 +178,7 @@ int imap_browse (char *path, struct browser_state *state) imap_add_folder (idata->delim, relpath, 1, 0, state, 1); if (!state->folder) { imap_qualify_path (buf, sizeof (buf), &mx, relpath); - state->folder = safe_strdup (buf); + state->folder = str_dup (buf); } } } @@ -182,7 +186,7 @@ int imap_browse (char *path, struct browser_state *state) /* no namespace, no folder: set folder to host only */ if (!state->folder) { imap_qualify_path (buf, sizeof (buf), &mx, NULL); - state->folder = safe_strdup (buf); + state->folder = str_dup (buf); } if (home_namespace && mbox[0] != '\0') { @@ -224,11 +228,16 @@ int imap_browse (char *path, struct browser_state *state) } } - FREE (&mx.mbox); + if (save_lsub) + set_option (OPTIMAPCHECKSUBSCRIBED); + + mem_free (&mx.mbox); return 0; fail: - FREE (&mx.mbox); + if (save_lsub) + set_option (OPTIMAPCHECKSUBSCRIBED); + mem_free (&mx.mbox); return -1; } @@ -253,7 +262,7 @@ int imap_mailbox_create (const char *folder) strfcpy (buf, NONULL (mx.mbox), sizeof (buf)); /* append a delimiter if necessary */ - n = safe_strlen (buf); + n = str_len (buf); if (n && (n < sizeof (buf) - 1) && (buf[n - 1] != idata->delim)) { buf[n++] = idata->delim; buf[n] = '\0'; @@ -262,7 +271,7 @@ int imap_mailbox_create (const char *folder) if (mutt_get_field (_("Create mailbox: "), buf, sizeof (buf), M_FILE) < 0) goto fail; - if (!safe_strlen (buf)) { + if (!str_len (buf)) { mutt_error (_("Mailbox must have a name.")); mutt_sleep (1); goto fail; @@ -275,11 +284,11 @@ int imap_mailbox_create (const char *folder) mutt_sleep (0); - FREE (&mx.mbox); + mem_free (&mx.mbox); return 0; fail: - FREE (&mx.mbox); + mem_free (&mx.mbox); return -1; } @@ -305,7 +314,7 @@ int imap_mailbox_rename (const char *mailbox) if (mutt_get_field (buf, newname, sizeof (newname), M_FILE) < 0) goto fail; - if (!safe_strlen (newname)) { + if (!str_len (newname)) { mutt_error (_("Mailbox must have a name.")); mutt_sleep (1); goto fail; @@ -320,11 +329,11 @@ int imap_mailbox_rename (const char *mailbox) mutt_message (_("Mailbox renamed.")); mutt_sleep (0); - FREE (&mx.mbox); + mem_free (&mx.mbox); return 0; fail: - FREE (&mx.mbox); + mem_free (&mx.mbox); return -1; } @@ -347,7 +356,7 @@ static int browse_add_list_result (IMAP_DATA * idata, const char *cmd, do { if (imap_parse_list_response (idata, &name, &noselect, &noinferiors, &idata->delim) != 0) { - FREE (&mx.mbox); + mem_free (&mx.mbox); return -1; } @@ -356,14 +365,14 @@ static int browse_add_list_result (IMAP_DATA * idata, const char *cmd, if (isparent) noselect = 1; /* prune current folder from output */ - if (isparent || safe_strncmp (name, mx.mbox, safe_strlen (name))) + if (isparent || str_ncmp (name, mx.mbox, str_len (name))) imap_add_folder (idata->delim, name, noselect, noinferiors, state, isparent); } } while ((ascii_strncmp (idata->cmd.buf, idata->cmd.seq, SEQLEN) != 0)); - FREE (&mx.mbox); + mem_free (&mx.mbox); return 0; } @@ -383,7 +392,7 @@ static void imap_add_folder (char delim, char *folder, int noselect, imap_unmunge_mbox_name (folder); if (state->entrylen + 1 == state->entrymax) { - safe_realloc (&state->entry, + mem_realloc (&state->entry, sizeof (struct folder_file) * (state->entrymax += 256)); memset (state->entry + state->entrylen, 0, (sizeof (struct folder_file) * @@ -394,8 +403,8 @@ static void imap_add_folder (char delim, char *folder, int noselect, if (isparent) strfcpy (relpath, "../", sizeof (relpath)); /* strip current folder from target, to render a relative path */ - else if (!safe_strncmp (mx.mbox, folder, safe_strlen (mx.mbox))) - strfcpy (relpath, folder + safe_strlen (mx.mbox), sizeof (relpath)); + else if (!str_ncmp (mx.mbox, folder, str_len (mx.mbox))) + strfcpy (relpath, folder + str_len (mx.mbox), sizeof (relpath)); else strfcpy (relpath, folder, sizeof (relpath)); @@ -403,20 +412,20 @@ static void imap_add_folder (char delim, char *folder, int noselect, * than at scan, since it's so expensive to scan. But that's big changes * to browser.c */ if (!((regexec (Mask.rx, relpath, 0, NULL, 0) == 0) ^ Mask.not)) { - FREE (&mx.mbox); + mem_free (&mx.mbox); return; } imap_qualify_path (tmp, sizeof (tmp), &mx, folder); - (state->entry)[state->entrylen].name = safe_strdup (tmp); + (state->entry)[state->entrylen].name = str_dup (tmp); /* mark desc with delim in browser if it can have subfolders */ - if (!isparent && !noinferiors && safe_strlen (relpath) < sizeof (relpath) - 1) { - relpath[safe_strlen (relpath) + 1] = '\0'; - relpath[safe_strlen (relpath)] = delim; + if (!isparent && !noinferiors && str_len (relpath) < sizeof (relpath) - 1) { + relpath[str_len (relpath) + 1] = '\0'; + relpath[str_len (relpath)] = delim; } - (state->entry)[state->entrylen].desc = safe_strdup (relpath); + (state->entry)[state->entrylen].desc = str_dup (relpath); (state->entry)[state->entrylen].imap = 1; /* delimiter at the root is useless. */ @@ -427,12 +436,12 @@ static void imap_add_folder (char delim, char *folder, int noselect, (state->entry)[state->entrylen].inferiors = !noinferiors; (state->entrylen)++; - FREE (&mx.mbox); + mem_free (&mx.mbox); } static int compare_names (struct folder_file *a, struct folder_file *b) { - return safe_strcmp (a->name, b->name); + return str_cmp (a->name, b->name); } static int browse_get_namespace (IMAP_DATA * idata, char *nsbuf, int nsblen,