#endif
#include <lib-lib/mem.h>
+#include <lib-lib/str.h>
+#include <lib-lib/ascii.h>
+#include <lib-lib/macros.h>
+#include <lib-lib/buffer.h>
+
+#include <lib-mime/mime.h>
#include "mutt.h"
-#include "buffer.h"
#include "enter.h"
-#include "ascii.h"
#include "recvattach.h"
#include "mx.h"
-#include "mime.h"
#include "rfc2047.h"
-#include "rfc2231.h"
#include "mutt_crypt.h"
#include "url.h"
-#include "lib/mem.h"
-#include "lib/intl.h"
-#include "lib/str.h"
#include "lib/rx.h"
#include "lib/debug.h"
char ch;
size_t offset = 0;
- FOREVER {
+ for (;;) {
if (fgets (buf, *linelen - offset, f) == NULL || /* end of file or */
(ISSPACE (*line) && !offset)) { /* end of headers */
*line = 0;
return (line);
}
- buf += str_len (buf) - 1;
+ buf += m_strlen(buf) - 1;
if (*buf == '\n') {
/* we did get a full line. remove trailing space */
while (ISSPACE (*buf))
if (*linelen < offset + STRING) {
/* grow the buffer */
*linelen += STRING;
- mem_realloc (&line, *linelen);
+ p_realloc(&line, *linelen);
buf = line + offset;
}
}
new = NULL;
if (*s == '<') {
- n = str_len (s);
+ n = m_strlen(s);
if (s[n - 1] != '>') {
o = s;
s = NULL;
continue;
}
- new = str_dup (s);
+ new = m_strdup(s);
}
else if (o) {
- m = str_len (s);
+ m = m_strlen(s);
if (s[m - 1] == '>') {
new = p_new(char, n + m + 1);
strcpy (new, o); /* __STRCPY_CHECKED__ */
while (ISSPACE (new->attribute[--i]))
new->attribute[i] = 0;
- s = p + 1; /* skip over the = */
- SKIPWS (s);
+ s = vskipspaces(p + 1); /* skip over the = */
if (*s == '"') {
int state_ascii = 1;
buffer[i] = 0;
}
- new->value = str_dup (buffer);
+ new->value = m_strdup(buffer);
debug_print (2, ("`%s' = `%s'\n", new->attribute ? new->attribute : "",
new->value ? new->value : ""));
break; /* no more parameters */
do {
- s++;
-
/* Move past any leading whitespace */
- SKIPWS (s);
+ s = vskipspaces(s + 1);
}
while (*s == ';'); /* skip empty parameters */
}
* let that take precedence, and don't set it here */
if ((pc = mutt_get_parameter ("name", ct->parameter)) != 0
&& !ct->filename)
- ct->filename = str_dup (pc);
+ ct->filename = m_strdup(pc);
#ifdef SUN_ATTACHMENT
/* this is deep and utter perversion */
*subtype++ = '\0';
for (pc = subtype; *pc && !ISSPACE (*pc) && *pc != ';'; pc++);
*pc = '\0';
- ct->subtype = str_dup (subtype);
+ ct->subtype = m_strdup(subtype);
}
/* Finally, get the major type */
#ifdef SUN_ATTACHMENT
if (ascii_strcasecmp ("x-sun-attachment", s) == 0)
- ct->subtype = str_dup ("x-sun-attachment");
+ ct->subtype = m_strdup("x-sun-attachment");
#endif
if (ct->type == TYPEOTHER) {
- ct->xtype = str_dup (s);
+ ct->xtype = m_strdup(s);
}
if (ct->subtype == NULL) {
* field, so we can attempt to convert the type to BODY here.
*/
if (ct->type == TYPETEXT)
- ct->subtype = str_dup ("plain");
+ ct->subtype = m_strdup("plain");
else if (ct->type == TYPEAUDIO)
- ct->subtype = str_dup ("basic");
+ ct->subtype = m_strdup("basic");
else if (ct->type == TYPEMESSAGE)
- ct->subtype = str_dup ("rfc822");
+ ct->subtype = m_strdup("rfc822");
else if (ct->type == TYPEOTHER) {
char buffer[SHORT_STRING];
ct->type = TYPEAPPLICATION;
snprintf (buffer, sizeof (buffer), "x-%s", s);
- ct->subtype = str_dup (buffer);
+ ct->subtype = m_strdup(buffer);
}
else
- ct->subtype = str_dup ("x-unknown");
+ ct->subtype = m_strdup("x-unknown");
}
/* Default character set for text types. */
/* Check to see if a default filename was given */
if ((s = strchr (s, ';')) != NULL) {
- s++;
- SKIPWS (s);
- if ((s =
- mutt_get_parameter ("filename",
- (parms = parse_parameters (s)))) != 0)
+ s = vskipspaces(s + 1);
+ if ((s = mutt_get_parameter("filename",
+ (parms = parse_parameters (s)))) != 0)
str_replace (&ct->filename, s);
if ((s = mutt_get_parameter ("name", parms)) != 0)
- ct->form_name = str_dup (s);
+ ct->form_name = m_strdup(s);
mutt_free_parameter (&parms);
}
}
while (*(line = mutt_read_rfc822_line (fp, line, &linelen)) != 0) {
/* Find the value of the current header */
if ((c = strchr (line, ':'))) {
- *c = 0;
- c++;
- SKIPWS (c);
+ *c++ = 0;
+ c = vskipspaces(c);
if (!*c) {
debug_print (1, ("skipping empty header field: %s\n", line));
continue;
}
p->offset = ftello (fp); /* Mark the start of the real data */
if (p->type == TYPETEXT && !p->subtype)
- p->subtype = str_dup ("plain");
+ p->subtype = m_strdup("plain");
else if (p->type == TYPEMESSAGE && !p->subtype)
- p->subtype = str_dup ("rfc822");
+ p->subtype = m_strdup("rfc822");
p_delete(&line);
return (NULL);
}
- blen = str_len (boundary);
+ blen = m_strlen(boundary);
while (ftello (fp) < end_off && fgets (buffer, LONG_STRING, fp) != NULL) {
- len = str_len (buffer);
+ len = m_strlen(buffer);
crlf = (len > 1 && buffer[len - 2] == '\r') ? 1 : 0;
if (buffer[0] == '-' && buffer[1] == '-' &&
- str_ncmp (buffer + 2, boundary, blen) == 0) {
+ m_strncmp(buffer + 2, boundary, blen) == 0) {
if (last) {
last->length = ftello (fp) - last->offset - len - 1 - crlf;
if (last->parts && last->parts->length == 0)
buffer[i] = 0;
/* Check for the end boundary */
- if (str_cmp (buffer + blen + 2, "--") == 0) {
+ if (m_strcmp(buffer + blen + 2, "--") == 0) {
final = 1;
break; /* done parsing */
}
if (*tz != '(')
return tz; /* no need to do anything */
- tz++;
- SKIPWS (tz);
+ tz = vskipspaces(tz + 1);
if ((p = strpbrk (tz, " )")) == NULL)
return tz;
len = p - tz;
* the date format imposes a natural limit.
*/
- strfcpy (scratch, s, sizeof (scratch));
+ m_strcpy(scratch, sizeof(scratch), s);
/* kill the day of the week, if it exists. */
if ((t = strchr (scratch, ',')))
t++;
else
t = scratch;
- SKIPWS (t);
+ t = vskipspaces(t);
- memset (&tm, 0, sizeof (tm));
+ p_clear(&tm, 1);
while ((t = strtok (t, " \t")) != NULL) {
switch (count) {
* and mark mail/(esp.) news article as your own. aaargh! this
* bothered me for _years_ */
if (!e->from) {
- e->from = rfc822_new_address ();
- e->from->personal = str_dup (p);
+ e->from = address_new ();
+ e->from->personal = m_strdup(p);
}
matched = 1;
}
#ifdef USE_NNTP
- else if (!str_casecmp (line + 1, "ollowup-to")) {
+ else if (!m_strcasecmp(line + 1, "ollowup-to")) {
if (!e->followup_to) {
str_skip_trailws (p);
- e->followup_to = str_dup (str_skip_initws (p));
+ e->followup_to = m_strdup(vskipspaces(p));
}
matched = 1;
}
else if (!ascii_strncasecmp (line + 1, "ail-", 4)) {
if (!ascii_strcasecmp (line + 5, "reply-to")) {
/* override the Reply-To: field */
- rfc822_free_address (&e->reply_to);
+ address_delete (&e->reply_to);
e->reply_to = rfc822_parse_adrlist (e->reply_to, p);
matched = 1;
}
#ifdef USE_NNTP
case 'n':
- if (!str_casecmp (line + 1, "ewsgroups")) {
+ if (!m_strcasecmp(line + 1, "ewsgroups")) {
p_delete(&e->newsgroups);
str_skip_trailws (p);
- e->newsgroups = str_dup (str_skip_initws (p));
+ e->newsgroups = m_strdup(vskipspaces(p));
matched = 1;
}
break;
case 'o':
/* field `Organization:' saves only for pager! */
- if (!str_casecmp (line + 1, "rganization")) {
- if (!e->organization && str_casecmp (p, "unknown"))
- e->organization = str_dup (p);
+ if (!m_strcasecmp(line + 1, "rganization")) {
+ if (!e->organization && m_strcasecmp(p, "unknown"))
+ e->organization = m_strdup(p);
}
break;
case 's':
if (!ascii_strcasecmp (line + 1, "ubject")) {
if (!e->subject)
- e->subject = str_dup (p);
+ e->subject = m_strdup(p);
matched = 1;
}
else if (!ascii_strcasecmp (line + 1, "ender")) {
}
else if ((!ascii_strcasecmp ("upersedes", line + 1) ||
!ascii_strcasecmp ("upercedes", line + 1)) && hdr)
- e->supersedes = str_dup (p);
+ e->supersedes = m_strdup(p);
break;
case 't':
matched = 1;
}
else if (ascii_strcasecmp (line + 1, "-label") == 0) {
- e->x_label = str_dup (p);
+ e->x_label = m_strdup(p);
matched = 1;
}
#ifdef USE_NNTP
- else if (!str_casecmp (line + 1, "-comment-to")) {
+ else if (!m_strcasecmp(line + 1, "-comment-to")) {
if (!e->x_comment_to)
- e->x_comment_to = str_dup (p);
+ e->x_comment_to = m_strdup(p);
matched = 1;
}
- else if (!str_casecmp (line + 1, "ref")) {
+ else if (!m_strcasecmp(line + 1, "ref")) {
if (!e->xref)
- e->xref = str_dup (p);
+ e->xref = m_strdup(p);
matched = 1;
}
#endif
/* Keep track of the user-defined headers */
if (!matched && user_hdrs) {
/* restore the original line */
- line[str_len (line)] = ':';
+ line[m_strlen(line)] = ':';
if (weed && option (OPTWEED) && mutt_matches_ignore (line, Ignore)
&& !mutt_matches_ignore (line, UnIgnore))
}
else
last = e->userhdrs = mutt_new_list ();
- last->data = str_dup (line);
+ last->data = m_strdup(line);
if (do_2047)
rfc2047_decode (&last->data);
}
/* set the defaults from RFC1521 */
hdr->content->type = TYPETEXT;
- hdr->content->subtype = str_dup ("plain");
+ hdr->content->subtype = m_strdup("plain");
hdr->content->encoding = ENC7BIT;
hdr->content->length = -1;
time_t t;
/* some bogus MTAs will quote the original "From " line */
- if (str_ncmp (">From ", line, 6) == 0)
+ if (m_strncmp(">From ", line, 6) == 0)
continue; /* just ignore */
else if (is_from (line, return_path, sizeof (return_path), &t)) {
/* MH somtimes has the From_ line in the middle of the header! */
}
}
- *p = 0;
- p++;
- SKIPWS (p);
+ *p++ = 0;
+ p = vskipspaces(p);
if (!*p)
continue; /* skip empty header fields */
return (e);
}
-ADDRESS *mutt_parse_adrlist (ADDRESS * p, const char *s)
+address_t *mutt_parse_adrlist (address_t * p, const char *s)
{
const char *q;
char tmp[HUGE_STRING];
char *r;
- strfcpy (tmp, s, sizeof (tmp));
+ m_strcpy(tmp, sizeof(tmp), s);
r = tmp;
while ((r = strtok (r, " \t")) != NULL) {
p = rfc822_parse_adrlist (p, r);
} else if (bp->type == TYPEMULTIPART) {
/* Always recurse multiparts, except multipart/alternative. */
shallrecurse = 1;
- if (!str_casecmp(bp->subtype, "alternative"))
+ if (!m_strcasecmp(bp->subtype, "alternative"))
shallrecurse = 0;
/* Don't count containers if they're top-level. */