continue;
case BODY:
- ct->c_begin = ftell (in) - strlen (buf);
+ if (name[0] == ':') {
+ /* Special case: no blank line between header and body. The
+ file position indicator is on the newline at the end of the
+ line, but it needs to be one prior to the beginning of the
+ line. So subtract the length of the line, bufsz, plus 1. */
+ ct->c_begin = ftell (in) - (bufsz + 1);
+ } else {
+ ct->c_begin = ftell (in) - (bufsz - 1);
+ }
break;
case FILEEOF:
TYPE_FIELD, ct->c_file);
return NOTOK;
}
-
- /* down case the content type string */
- for (dp = ci->ci_type; *dp; dp++)
- if (isalpha((unsigned char) *dp) && isupper ((unsigned char) *dp))
- *dp = tolower ((unsigned char) *dp);
+ ToLower(ci->ci_type);
while (isspace ((unsigned char) *cp))
cp++;
TYPE_FIELD, ct->c_file, ci->ci_type);
return NOTOK;
}
-
- /* down case the content subtype string */
- for (dp = ci->ci_subtype; *dp; dp++)
- if (isalpha((unsigned char) *dp) && isupper ((unsigned char) *dp))
- *dp = tolower ((unsigned char) *dp);
+ ToLower(ci->ci_subtype);
magic_skip:
while (isspace ((unsigned char) *cp))
* Get any <Content-Id> given in buffer
*/
if (magic && *cp == '<') {
- if (ct->c_id) {
- free (ct->c_id);
- ct->c_id = NULL;
- }
+ mh_xfree(ct->c_id);
+ ct->c_id = NULL;
if (!(dp = strchr(ct->c_id = ++cp, '>'))) {
advise (NULL, "invalid ID in message %s", ct->c_file);
return NOTOK;
if (chset != NULL && !check_charset (chset, strlen (chset))) {
snprintf (buffer, sizeof(buffer), "%s-charset-%s", invo_name, chset);
if ((cp = context_find (buffer)))
- ct->c_termproc = getcpy (cp);
+ ct->c_termproc = mh_xstrdup(cp);
}
return OK;
if (inout)
goto next_part;
goto last_part;
- } else {
- if (strcmp (bufp + 2, m->mp_stop) == 0)
- goto end_part;
}
+ if (strcmp (bufp + 2, m->mp_stop) == 0)
+ goto end_part;
}
}
continue;
*next = NULL;
free_content (p);
- free ((char *) part);
+ free(part);
}
}
if (ce->ce_file) {
if (stat (ce->ce_file, &st) != NOTOK)
return (long) st.st_size;
- else
- return 0L;
+ return 0L;
}
if (ct->c_encoding == CE_EXTERNAL)
for (i = 0; i < decoded_len; ++i) {
putc (*decoded_p++, ce->ce_fp);
}
- free ((char *) decoded);
+ free(decoded);
if (ferror (ce->ce_fp)) {
content_error (ce->ce_file, ct, "error writing to");
goto clean_up;
if (find_cache (ct, rcachesw, (int *) 0, cb->c_id,
cachefile, sizeof(cachefile)) != NOTOK) {
if ((ce->ce_fp = fopen (cachefile, "r"))) {
- ce->ce_file = getcpy (cachefile);
+ ce->ce_file = mh_xstrdup(cachefile);
ce->ce_unlink = 0;
goto ready_already;
- } else {
- admonish (cachefile, "unable to fopen for reading");
}
+ admonish (cachefile, "unable to fopen for reading");
}
*fd = fileno (ce->ce_fp);
return NOTOK;
}
- ce->ce_file = getcpy (e->eb_name);
+ ce->ce_file = mh_xstrdup(e->eb_name);
ce->ce_unlink = 0;
if ((ce->ce_fp = fopen (ce->ce_file, "r")) == NULL) {
LocalName (1));
pass = buffer;
} else {
- ruserpass (e->eb_site, &username, &password);
+ ruserpass (e->eb_site, &username, &password, 0);
user = username;
pass = password;
}
/* showproc is for mhshow and mhstore, though mhlist -debug
* prints it, too. */
- if (ct->c_showproc)
- free (ct->c_showproc);
+ mh_xfree(ct->c_showproc);
ct->c_showproc = add ("true", NULL);
fseek (ce->ce_fp, 0L, SEEK_SET);
}
return OK;
- } else {
- if (debugsw) {
- fprintf (stderr, "invalid MD5 digest (got %d octets)\n",
- (int) strlen ((char *) digest));
- }
-
- return NOTOK;
}
- } else {
+ if (debugsw) {
+ fprintf (stderr, "invalid MD5 digest (got %d octets)\n",
+ (int) strlen ((char *) digest));
+ }
+
return NOTOK;
}
+
+ return NOTOK;
}
/* down case the attribute name */
for (dp = cp; istoken ((unsigned char) *dp); dp++)
- if (isalpha((unsigned char) *dp) && isupper ((unsigned char) *dp))
- *dp = tolower ((unsigned char) *dp);
+ *dp = tolower ((unsigned char) *dp);
for (up = dp; isspace ((unsigned char) *dp);)
dp++;
"field\n%*s(parameter %s)", filename, fieldname,
strlen(invo_name) + 2, "", nameptr);
free(nameptr);
- if (charset)
- free(charset);
+ mh_xfree(charset);
return NOTOK;
}
filename, fieldname, strlen(invo_name) + 2,
"", nameptr);
free(nameptr);
- if (charset)
- free(charset);
- if (lang)
- free(lang);
+ mh_xfree(charset);
+ mh_xfree(lang);
return NOTOK;
}
vp += 2;
filename, fieldname, strlen(invo_name) + 2, "",
nameptr);
free(nameptr);
- if (charset)
- free(charset);
- if (lang)
- free(lang);
+ mh_xfree(charset);
+ mh_xfree(lang);
return NOTOK;
case '"':
break;
}
if (pp == NULL) {
- NEW(pp);
- memset(pp, 0, sizeof(*pp));
+ NEW0(pp);
pp->name = nameptr;
pp->next = phead;
phead = pp;
* Insert this into the section linked list
*/
- NEW(sp);
- memset(sp, 0, sizeof(*sp));
+ NEW0(sp);
sp->value = valptr;
sp->index = index;
sp->len = len;
*/
if (index == 0 && encoded) {
- if (pp->charset)
- free(pp->charset);
+ mh_xfree(pp->charset);
pp->charset = charset;
- if (pp->lang)
- free(pp->lang);
+ mh_xfree(pp->lang);
pp->lang = lang;
}
} else {
ret_charset = get_param(ct->c_ctinfo.ci_first_pm, "charset", '?', 0);
- return ret_charset ? ret_charset : getcpy ("US-ASCII");
+ return ret_charset ? ret_charset : mh_xstrdup("US-ASCII");
}
if (strlen(params->pm_name) > CPERLIN) {
advise(NULL, "Parameter name \"%s\" is too long", params->pm_name);
- if (paramout)
- free(paramout);
+ mh_xfree(paramout);
return NULL;
}
numchars, valoff);
if (i == 0) {
- if (paramout)
- free(paramout);
+ mh_xfree(paramout);
return NULL;
}
strlen(params->pm_value + valoff), valoff);
if (i == 0) {
- if (paramout)
- free(paramout);
+ mh_xfree(paramout);
return NULL;
}
*/
if (! pm->pm_charset) {
- pm->pm_charset = getcpy(write_charset_8bit());
+ pm->pm_charset = mh_xstrdup(write_charset_8bit());
if (strcasecmp(pm->pm_charset, "US-ASCII") == 0)
adios(NULL, "8-bit characters in parameter \"%s\", but "
"local character set is US-ASCII", pm->pm_name);
}
if (! pm->pm_lang)
- pm->pm_lang = getcpy(NULL); /* Default to a blank lang tag */
+ pm->pm_lang = mh_xstrdup(""); /* Default to a blank lang tag */
len++; /* For the encoding marker */
maxfit--;
{
PM pm;
- NEW(pm);
- memset(pm, 0, sizeof(*pm));
+ NEW0(pm);
pm->pm_name = nocopy ? name : getcpy(name);
pm->pm_value = nocopy ? value : getcpy(value);
if (strcasecmp(name, first->pm_name) == 0) {
if (fetchonly)
return first->pm_value;
- else
- return getcpy(get_param_value(first, replace));
+ return getcpy(get_param_value(first, replace));
}
first = first->pm_next;
}
q = buffer;
bufsize = sizeof(buffer);
for (p = pm->pm_value; *p != '\0' && bufsize > 1; p++, q++, bufsize--) {
+ /* FIXME: !iscntrl should perhaps be isprint as that allows all
+ * classes bar cntrl, whereas the cntrl class can include those
+ * in space and blank.
+ * http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap07.html */
if (isascii((unsigned char) *p) && !iscntrl((unsigned char) *p))
*q = *p;
else