X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=muttlib.c;h=d5bd3b7ffca243a5e65d82bc22d74d5a3bfbc088;hp=f7633e1f8834f837edfb853577d84a0a8f3e5a2f;hb=452ffdd4bbcd8f2dd9e4811c115824b556814ebb;hpb=a8477ebaa09990b3688164cbe5cf661c4189541d diff --git a/muttlib.c b/muttlib.c index f7633e1..d5bd3b7 100644 --- a/muttlib.c +++ b/muttlib.c @@ -13,12 +13,17 @@ #endif #include "mutt.h" +#include "ascii.h" +#include "buffer.h" +#include "enter.h" #include "mutt_curses.h" #include "mime.h" #include "mx.h" #include "url.h" +#include "attach.h" #include "reldate.h" +#include "version.h" #ifdef USE_IMAP #include "imap.h" @@ -46,7 +51,7 @@ BODY *mutt_new_body (void) { - BODY *p = (BODY *) safe_calloc (1, sizeof (BODY)); + BODY *p = (BODY *) mem_calloc (1, sizeof (BODY)); p->disposition = DISPATTACH; p->use_disp = 1; @@ -60,7 +65,7 @@ BODY *mutt_new_body (void) * Renamed to mutt_adv_mktemp so I only have to change where it's * called, and not all possible cases. */ -void mutt_adv_mktemp (char *s, size_t l) +void mutt_adv_mktemp (const char* dir, char *s, size_t l) { char buf[_POSIX_PATH_MAX]; char tmp[_POSIX_PATH_MAX]; @@ -68,7 +73,7 @@ void mutt_adv_mktemp (char *s, size_t l) size_t sl; struct stat sb; - strfcpy (buf, NONULL (Tempdir), sizeof (buf)); + strfcpy (buf, dir && *dir ? dir : NONULL (Tempdir), sizeof (buf)); mutt_expand_path (buf, sizeof (buf)); if (s[0] == '\0') { snprintf (s, l, "%s/muttXXXXXX", buf); @@ -112,7 +117,7 @@ int mutt_copy_body (FILE * fp, BODY ** tgt, BODY * src) tmp[0] = '\0'; } - mutt_adv_mktemp (tmp, sizeof (tmp)); + mutt_adv_mktemp (NULL, tmp, sizeof (tmp)); if (mutt_save_attachment (fp, src, tmp, 0, NULL) == -1) return -1; @@ -177,12 +182,12 @@ void mutt_free_body (BODY ** p) else if (b->filename) debug_print (1, ("not unlinking %s.\n", b->filename)); - FREE (&b->filename); - FREE (&b->content); - FREE (&b->xtype); - FREE (&b->subtype); - FREE (&b->description); - FREE (&b->form_name); + mem_free (&b->filename); + mem_free (&b->content); + mem_free (&b->xtype); + mem_free (&b->subtype); + mem_free (&b->description); + mem_free (&b->form_name); if (b->hdr) { /* Don't free twice (b->hdr->content = b->parts) */ @@ -193,7 +198,7 @@ void mutt_free_body (BODY ** p) if (b->parts) mutt_free_body (&b->parts); - FREE (&b); + mem_free (&b); } *p = 0; @@ -205,52 +210,15 @@ void mutt_free_parameter (PARAMETER ** p) PARAMETER *o; while (t) { - FREE (&t->attribute); - FREE (&t->value); + mem_free (&t->attribute); + mem_free (&t->value); o = t; t = t->next; - FREE (&o); + mem_free (&o); } *p = 0; } -LIST *mutt_add_list (LIST * head, const char *data) { - size_t len = str_len (data); - return (mutt_add_list_n (head, data, len ? len + 1 : 0)); -} - -LIST *mutt_add_list_n (LIST *head, const void *data, size_t len) { - LIST *tmp; - - for (tmp = head; tmp && tmp->next; tmp = tmp->next); - - if (tmp) { - tmp->next = safe_malloc (sizeof (LIST)); - tmp = tmp->next; - } else - head = tmp = safe_malloc (sizeof (LIST)); - - tmp->data = safe_malloc (len); - if (len) - memcpy (tmp->data, data, len); - tmp->next = NULL; - return head; -} - -void mutt_free_list (LIST ** list) -{ - LIST *p; - - if (!list) - return; - while (*list) { - p = *list; - *list = (*list)->next; - FREE (&p->data); - FREE (&p); - } -} - HEADER *mutt_dup_header (HEADER * h) { HEADER *hnew; @@ -266,16 +234,16 @@ void mutt_free_header (HEADER ** h) return; mutt_free_envelope (&(*h)->env); mutt_free_body (&(*h)->content); - FREE (&(*h)->maildir_flags); - FREE (&(*h)->tree); - FREE (&(*h)->path); + mem_free (&(*h)->maildir_flags); + mem_free (&(*h)->tree); + mem_free (&(*h)->path); #ifdef MIXMASTER mutt_free_list (&(*h)->chain); #endif #if defined USE_POP || defined USE_IMAP || defined USE_NNTP - FREE (&(*h)->data); + mem_free (&(*h)->data); #endif - FREE (h); + mem_free (h); } /* returns true if the header contained in "s" is in list "t" */ @@ -621,26 +589,26 @@ void mutt_free_envelope (ENVELOPE ** p) rfc822_free_address (&(*p)->reply_to); rfc822_free_address (&(*p)->mail_followup_to); - FREE (&(*p)->list_post); - FREE (&(*p)->subject); + mem_free (&(*p)->list_post); + mem_free (&(*p)->subject); /* real_subj is just an offset to subject and shouldn't be freed */ - FREE (&(*p)->message_id); - FREE (&(*p)->supersedes); - FREE (&(*p)->date); - FREE (&(*p)->x_label); - FREE (&(*p)->organization); + mem_free (&(*p)->message_id); + mem_free (&(*p)->supersedes); + mem_free (&(*p)->date); + mem_free (&(*p)->x_label); + mem_free (&(*p)->organization); #ifdef USE_NNTP - FREE (&(*p)->newsgroups); - FREE (&(*p)->xref); - FREE (&(*p)->followup_to); - FREE (&(*p)->x_comment_to); + mem_free (&(*p)->newsgroups); + mem_free (&(*p)->xref); + mem_free (&(*p)->followup_to); + mem_free (&(*p)->x_comment_to); #endif mutt_buffer_free (&(*p)->spam); mutt_free_list (&(*p)->references); mutt_free_list (&(*p)->in_reply_to); mutt_free_list (&(*p)->userhdrs); - FREE (p); + mem_free (p); } /* move all the headers from extra not present in base into base */ @@ -704,9 +672,9 @@ void mutt_free_alias (ALIAS ** p) while (*p) { t = *p; *p = (*p)->next; - FREE (&t->name); + mem_free (&t->name); rfc822_free_address (&t->addr); - FREE (&t); + mem_free (&t); } } @@ -860,13 +828,13 @@ int mutt_check_overwrite (const char *attname, const char *path, str_replace (directory, fname); break; case 1: /* yes */ - FREE (directory); + mem_free (directory); break; case -1: /* abort */ - FREE (directory); + mem_free (directory); return -1; case 2: /* no */ - FREE (directory); + mem_free (directory); return 1; } } @@ -1148,7 +1116,7 @@ void mutt_FormatString (char *dest, /* output buffer */ } else { unsigned int bar = mutt_skipchars (src, "%\\"); - char *bar2 = safe_malloc (bar + 1); + char *bar2 = mem_malloc (bar + 1); strfcpy (bar2, src, bar + 1); while (bar--) { @@ -1156,7 +1124,7 @@ void mutt_FormatString (char *dest, /* output buffer */ wlen++; } col += mutt_strwidth (bar2); - FREE (&bar2); + mem_free (&bar2); } } *wptr = 0; @@ -1190,7 +1158,7 @@ FILE *mutt_open_read (const char *path, pid_t * thepid) s[len - 1] = 0; mutt_endwin (NULL); *thepid = mutt_create_filter (s, NULL, &f, NULL); - FREE (&s); + mem_free (&s); } else { if (stat (path, &s) < 0) @@ -1277,81 +1245,6 @@ int mutt_save_confirm (const char *s, struct stat *st) return (ret); } -void state_prefix_putc (char c, STATE * s) -{ - if (s->flags & M_PENDINGPREFIX) { - int i; - - i = str_len (Quotebuf); - Quotebuf[i++] = c; - Quotebuf[i] = '\0'; - if (i == sizeof (Quotebuf) - 1 || c == '\n') { - char buf[2 * SHORT_STRING]; - int j = 0, offset = 0; - regmatch_t pmatch[1]; - - state_reset_prefix (s); - while (regexec - ((regex_t *) QuoteRegexp.rx, &Quotebuf[offset], 1, pmatch, - 0) == 0) - offset += pmatch->rm_eo; - - if (!option (OPTQUOTEEMPTY) && Quotebuf[offset] == '\n') { - buf[0] = '\n'; - buf[1] = '\0'; - } - else if (option (OPTQUOTEQUOTED) && offset) { - for (i = 0; i < offset; i++) - if (Quotebuf[i] != ' ') - j = i; - strncpy (buf, Quotebuf, j + 1); - strcpy (buf + j + 1, Quotebuf + j); - } - else - snprintf (buf, sizeof (buf), "%s%s", NONULL (s->prefix), Quotebuf); - - state_puts (buf, s); - } - } - else - state_putc (c, s); - - if (c == '\n') { - state_set_prefix (s); - Quotebuf[0] = '\0'; - } -} - -int state_printf (STATE * s, const char *fmt, ...) -{ - int rv; - va_list ap; - - va_start (ap, fmt); - rv = vfprintf (s->fpout, fmt, ap); - va_end (ap); - - return rv; -} - -void state_mark_attach (STATE * s) -{ - if ((s->flags & M_DISPLAY) && !str_cmp (Pager, "builtin")) - state_puts (AttachmentMarker, s); -} - -void state_attach_puts (const char *t, STATE * s) -{ - if (*t != '\n') - state_mark_attach (s); - while (*t) { - state_putc (*t, s); - if (*t++ == '\n' && *t) - if (*t != '\n') - state_mark_attach (s); - } -} - void mutt_display_sanitize (char *s) { for (; *s; s++) { @@ -1368,85 +1261,6 @@ void mutt_sleep (short s) sleep (s); } -/* - * Creates and initializes a BUFFER*. If passed an existing BUFFER*, - * just initializes. Frees anything already in the buffer. - * - * Disregards the 'destroy' flag, which seems reserved for caller. - * This is bad, but there's no apparent protocol for it. - */ -BUFFER *mutt_buffer_init (BUFFER * b) -{ - if (!b) { - b = safe_malloc (sizeof (BUFFER)); - if (!b) - return NULL; - } - else { - FREE(&b->data); - } - memset (b, 0, sizeof (BUFFER)); - return b; -} - -/* - * Creates and initializes a BUFFER*. If passed an existing BUFFER*, - * just initializes. Frees anything already in the buffer. Copies in - * the seed string. - * - * Disregards the 'destroy' flag, which seems reserved for caller. - * This is bad, but there's no apparent protocol for it. - */ -BUFFER *mutt_buffer_from (BUFFER * b, char *seed) -{ - if (!seed) - return NULL; - - b = mutt_buffer_init (b); - b->data = str_dup (seed); - b->dsize = str_len (seed); - b->dptr = (char *) b->data + b->dsize; - return b; -} - -void mutt_buffer_addstr (BUFFER * buf, const char *s) -{ - mutt_buffer_add (buf, s, str_len (s)); -} - -void mutt_buffer_addch (BUFFER * buf, char c) -{ - mutt_buffer_add (buf, &c, 1); -} - -void mutt_buffer_free (BUFFER ** p) -{ - if (!p || !*p) - return; - - FREE (&(*p)->data); - /* dptr is just an offset to data and shouldn't be freed */ - FREE (p); -} - -/* dynamically grows a BUFFER to accomodate s, in increments of 128 bytes. - * Always one byte bigger than necessary for the null terminator, and - * the buffer is always null-terminated */ -void mutt_buffer_add (BUFFER * buf, const char *s, size_t len) -{ - size_t offset; - - if (buf->dptr + len + 1 > buf->data + buf->dsize) { - offset = buf->dptr - buf->data; - buf->dsize += len < 128 ? 128 : len + 1; - safe_realloc ((void **) &buf->data, buf->dsize); - buf->dptr = buf->data + offset; - } - memcpy (buf->dptr, s, len); - buf->dptr += len; - *(buf->dptr) = '\0'; -} - /* Decrease a file's modification time by 1 second */ time_t mutt_decrease_mtime (const char *f, struct stat *st) @@ -1471,12 +1285,17 @@ time_t mutt_decrease_mtime (const char *f, struct stat *st) return mtime; } -const char *mutt_make_version (void) +const char *mutt_make_version (int full) { static char vstring[STRING]; - snprintf (vstring, sizeof (vstring), "Mutt-ng %s (%s) based on Mutt 1.5.9", - MUTT_VERSION, ReleaseDate); + if (full) + snprintf (vstring, sizeof (vstring), "Mutt-ng %s-r%s (based " + "on Mutt 1.5.10/%s)", MUTT_VERSION, MUTT_REVISION, + ReleaseDate); + else + snprintf (vstring, sizeof (vstring), "mutt-ng/%s-r%s", + MUTT_VERSION, MUTT_REVISION); return vstring; } @@ -1490,8 +1309,8 @@ void mutt_free_spam_list (SPAM_LIST ** list) p = *list; *list = (*list)->next; rx_free (&p->rx); - FREE(&p->template); - FREE(&p); + mem_free(&p->template); + mem_free(&p); } } @@ -1510,7 +1329,7 @@ int mutt_match_spam_list (const char *s, SPAM_LIST * l, char *text, int x) for (; l; l = l->next) { /* If this pattern needs more matches, expand pmatch. */ if (l->nmatch > nmatch) { - safe_realloc (&pmatch, l->nmatch * sizeof (regmatch_t)); + mem_realloc (&pmatch, l->nmatch * sizeof (regmatch_t)); nmatch = l->nmatch; }