X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=muttlib.c;h=f7449df8df9a792bfc4dc46033b279d29b00e45e;hp=1c54b13fb1da6c5c3775f25a3a8cf59917883388;hb=774b53097f8c8b62c5101bce8f313d339387a438;hpb=d04295aaf918032c1c2fafc94ddf637cf23341e9 diff --git a/muttlib.c b/muttlib.c index 1c54b13..f7449df 100644 --- a/muttlib.c +++ b/muttlib.c @@ -12,16 +12,18 @@ # include "config.h" #endif -#include #include -#include -#include -#include #include -#include #include -#include +#include +#include +#include +#include +#include #include +#include +#include +#include #include #include @@ -30,16 +32,16 @@ #include #include #include -#include +#include #include #include #include +#include "alias.h" #include "mutt.h" #include "mx.h" -#include "url.h" #include "attach.h" #include "version.h" @@ -51,28 +53,18 @@ #define SW (option(OPTMBOXPANE)?SidebarWidth:0) -BODY *mutt_new_body (void) -{ - BODY *p = p_new(BODY, 1); - - p->disposition = DISPATTACH; - p->use_disp = 1; - return (p); -} - - /* Modified by blong to accept a "suggestion" for file name. If * that file exists, then construct one with unique name but * keep any extension. This might fail, I guess. * Renamed to mutt_adv_mktemp so I only have to change where it's * called, and not all possible cases. */ -void mutt_adv_mktemp (const char* dir, char *s, size_t l) +void mutt_adv_mktemp (const char* dir, char *s, ssize_t l) { char buf[_POSIX_PATH_MAX]; char tmp[_POSIX_PATH_MAX]; char *period; - size_t sl; + ssize_t sl; struct stat sb; m_strcpy(buf, sizeof(buf), m_strisempty(dir) ? NONULL(Tempdir) : dir); @@ -106,7 +98,7 @@ int mutt_copy_body (FILE * fp, BODY ** tgt, BODY * src) char tmp[_POSIX_PATH_MAX]; BODY *b; - PARAMETER *par, **ppar; + parameter_t *par, **ppar; short use_disp; @@ -123,7 +115,7 @@ int mutt_copy_body (FILE * fp, BODY ** tgt, BODY * src) if (mutt_save_attachment (fp, src, tmp, 0, NULL) == -1) return -1; - *tgt = mutt_new_body (); + *tgt = body_new(); b = *tgt; memcpy (b, src, sizeof (BODY)); @@ -165,58 +157,8 @@ int mutt_copy_body (FILE * fp, BODY ** tgt, BODY * src) return 0; } - - -void mutt_free_body (BODY ** p) -{ - BODY *a = *p, *b; - - while (a) { - b = a; - a = a->next; - - if (b->parameter) - parameter_delete(&b->parameter); - if (b->unlink && b->filename) { - debug_print (1, ("unlinking %s.\n", b->filename)); - unlink (b->filename); - } - else if (b->filename) - debug_print (1, ("not unlinking %s.\n", b->filename)); - - p_delete(&b->filename); - p_delete(&b->content); - p_delete(&b->xtype); - p_delete(&b->subtype); - p_delete(&b->description); - p_delete(&b->form_name); - - if (b->hdr) { - /* Don't free twice (b->hdr->content = b->parts) */ - b->hdr->content = NULL; - header_delete(&b->hdr); - } - - if (b->parts) - mutt_free_body (&b->parts); - - p_delete(&b); - } - - *p = 0; -} - -HEADER *mutt_dup_header (HEADER * h) -{ - HEADER *hnew; - - hnew = header_new(); - memcpy (hnew, h, sizeof (HEADER)); - return hnew; -} - /* returns true if the header contained in "s" is in list "t" */ -int mutt_matches_ignore (const char *s, LIST * t) +int mutt_matches_ignore (const char *s, string_list_t * t) { for (; t; t = t->next) { if (!ascii_strncasecmp (s, t->data, m_strlen(t->data)) @@ -230,7 +172,7 @@ int mutt_matches_ignore (const char *s, LIST * t) void mutt_expand_link (char *newpath, const char *path, const char *lnk) { const char *lb = NULL; - size_t len; + ssize_t len; /* lnk is full path */ if (*lnk == '/') { @@ -249,12 +191,12 @@ void mutt_expand_link (char *newpath, const char *path, const char *lnk) m_strcpy(newpath + len, _POSIX_PATH_MAX - len, lnk); } -char *mutt_expand_path (char *s, size_t slen) +char *mutt_expand_path (char *s, ssize_t slen) { return _mutt_expand_path (s, slen, 0); } -char *_mutt_expand_path (char *s, size_t slen, int rx) +char *_mutt_expand_path (char *s, ssize_t slen, int rx) { char p[_POSIX_PATH_MAX] = ""; char q[_POSIX_PATH_MAX] = ""; @@ -320,9 +262,10 @@ char *_mutt_expand_path (char *s, size_t slen, int rx) case '@': { HEADER *h; + /* FIXME: BUG ? */ address_t *alias; - if ((alias = mutt_lookup_alias (s + 1))) { + if ((alias = alias_lookup(s + 1))) { h = header_new(); h->env = envelope_new(); h->env->from = h->env->to = alias; @@ -400,104 +343,6 @@ char *_mutt_expand_path (char *s, size_t slen, int rx) return (s); } -char *mutt_get_parameter (const char *s, PARAMETER * p) -{ - for (; p; p = p->next) - if (ascii_strcasecmp (s, p->attribute) == 0) - return (p->value); - - return NULL; -} - -void mutt_set_parameter (const char *attribute, const char *value, - PARAMETER ** p) -{ - PARAMETER *q; - - if (!value) { - mutt_delete_parameter (attribute, p); - return; - } - - for (q = *p; q; q = q->next) { - if (ascii_strcasecmp (attribute, q->attribute) == 0) { - m_strreplace(&q->value, value); - return; - } - } - - q = parameter_new(); - q->attribute = m_strdup(attribute); - q->value = m_strdup(value); - q->next = *p; - *p = q; -} - -void mutt_delete_parameter (const char *attribute, PARAMETER ** p) -{ - PARAMETER *q; - - for (q = *p; q; p = &q->next, q = q->next) { - if (ascii_strcasecmp (attribute, q->attribute) == 0) { - *p = q->next; - q->next = NULL; - parameter_delete(&q); - return; - } - } -} - -/* returns 1 if Mutt can't display this type of data, 0 otherwise */ -int mutt_needs_mailcap (BODY * m) -{ - switch (m->type) { - case TYPETEXT: - - if (!ascii_strcasecmp ("plain", m->subtype) || - !ascii_strcasecmp ("rfc822-headers", m->subtype) || - !ascii_strcasecmp ("enriched", m->subtype)) - return 0; - break; - - case TYPEAPPLICATION: - if (mutt_is_application_pgp (m)) - return 0; - if (mutt_is_application_smime (m)) - return 0; - break; - - case TYPEMULTIPART: - case TYPEMESSAGE: - return 0; - } - - return 1; -} - -int mutt_is_text_part (BODY * b) -{ - int t = b->type; - char *s = b->subtype; - - if (mutt_is_application_pgp (b)) - return 0; - - if (t == TYPETEXT) - return 1; - - if (t == TYPEMESSAGE) { - if (!ascii_strcasecmp ("delivery-status", s)) - return 1; - } - - if (t == TYPEAPPLICATION) { - if (!ascii_strcasecmp ("pgp-keys", s)) - return 1; - } - - return 0; -} - /* move all the headers from extra not present in base into base */ void mutt_merge_envelopes(ENVELOPE* base, ENVELOPE** extra) { @@ -534,7 +379,7 @@ void mutt_merge_envelopes(ENVELOPE* base, ENVELOPE** extra) /* spam and user headers should never be hashed, and the new envelope may * have better values. Use new versions regardless. */ mutt_buffer_free (&base->spam); - mutt_free_list (&base->userhdrs); + string_list_wipe(&base->userhdrs); MOVE_ELEM(spam); MOVE_ELEM(userhdrs); #undef MOVE_ELEM @@ -548,28 +393,14 @@ void _mutt_mktemp (char *s, const char *src, int line) snprintf (s, _POSIX_PATH_MAX, "%s/madmutt-%s-%d-%d-%d-%x%x", NONULL (Tempdir), NONULL (Hostname), (int) getuid (), (int) getpid (), Counter++, (unsigned int) rand(), (unsigned int) rand()); - debug_print (1, ("%s:%d: mutt_mktemp returns \"%s\".\n", src, line, s)); unlink (s); } -void mutt_free_alias (ALIAS ** p) -{ - ALIAS *t; - - while (*p) { - t = *p; - *p = (*p)->next; - p_delete(&t->name); - address_delete (&t->addr); - p_delete(&t); - } -} - /* collapse the pathname using ~ or = when possible */ void mutt_pretty_mailbox (char *s) { char *p = s, *q = s; - size_t len; + ssize_t len; url_scheme_t scheme; scheme = url_check_scheme (s); @@ -616,7 +447,7 @@ void mutt_pretty_mailbox (char *s) } } -void mutt_pretty_size (char *s, size_t len, long n) +void mutt_pretty_size (char *s, ssize_t len, long n) { if (n == 0) m_strcpy(s, len, "0K"); @@ -635,7 +466,7 @@ void mutt_pretty_size (char *s, size_t len, long n) } } -void mutt_expand_file_fmt (char *dest, size_t destlen, const char *fmt, +void mutt_expand_file_fmt (char *dest, ssize_t destlen, const char *fmt, const char *src) { char tmp[LONG_STRING]; @@ -644,12 +475,12 @@ void mutt_expand_file_fmt (char *dest, size_t destlen, const char *fmt, mutt_expand_fmt (dest, destlen, fmt, tmp); } -void mutt_expand_fmt (char *dest, size_t destlen, const char *fmt, +void mutt_expand_fmt (char *dest, ssize_t destlen, const char *fmt, const char *src) { const char *p; char *d; - size_t slen; + ssize_t slen; int found = 0; slen = m_strlen(src); @@ -692,7 +523,7 @@ void mutt_expand_fmt (char *dest, size_t destlen, const char *fmt, /* return 0 on success, -1 on abort, 1 on error */ int mutt_check_overwrite (const char *attname, const char *path, - char *fname, size_t flen, int *append, + char *fname, ssize_t flen, int *append, char **directory) { int rc = 0; @@ -760,7 +591,7 @@ int mutt_check_overwrite (const char *attname, const char *path, return 0; } -void mutt_save_path (char *d, size_t dsize, address_t * a) +void mutt_save_path (char *d, ssize_t dsize, address_t * a) { if (a && a->mailbox) { m_strcpy(d, dsize, a->mailbox); @@ -776,7 +607,7 @@ void mutt_save_path (char *d, size_t dsize, address_t * a) *d = 0; } -void mutt_safe_path (char *s, size_t l, address_t * a) +void mutt_safe_path (char *s, ssize_t l, address_t * a) { char *p; @@ -1217,11 +1048,8 @@ int mutt_match_spam_list (const char *s, SPAM_LIST * l, char *text, int x) } /* Does this pattern match? */ - if (regexec - (l->rx->rx, s, (size_t) l->nmatch, (regmatch_t *) pmatch, - (int) 0) == 0) { - debug_print (5, ("%s matches %s\n%d subst", s, l->rx->pattern, l->rx->rx->re_nsub)); - + if (regexec(l->rx->rx, s, l->nmatch, (regmatch_t *)pmatch, (int) 0) == 0) + { /* Copy template into text, with substitutions. */ for (p = l->template; *p;) { if (*p == '%') { @@ -1236,7 +1064,6 @@ int mutt_match_spam_list (const char *s, SPAM_LIST * l, char *text, int x) } } text[tlen] = '\0'; - debug_print (5, ("\"%s\"\n", text)); return 1; } } @@ -1285,7 +1112,7 @@ int mutt_cmp_addr (const address_t * a, const address_t * b) return (1); } -int mutt_cmp_list (const LIST * a, const LIST * b) +int mutt_cmp_list (const string_list_t * a, const string_list_t * b) { while (a && b) { if (m_strcmp(a->data, b->data)) @@ -1324,29 +1151,13 @@ int mutt_cmp_env (const ENVELOPE * e1, const ENVELOPE * e2) } } -int mutt_cmp_param (const PARAMETER * p1, const PARAMETER * p2) -{ - while (p1 && p2) { - if (m_strcmp(p1->attribute, p2->attribute) || - m_strcmp(p1->value, p2->value)) - return (0); - - p1 = p1->next; - p2 = p2->next; - } - if (p1 || p2) - return (0); - - return (1); -} - int mutt_cmp_body (const BODY * b1, const BODY * b2) { if (b1->type != b2->type || b1->encoding != b2->encoding || m_strcmp(b1->subtype, b2->subtype) || m_strcmp(b1->description, b2->description) || - !mutt_cmp_param (b1->parameter, b2->parameter) || + !parameter_equal(b1->parameter, b2->parameter) || b1->length != b2->length) return (0); return (1);