A free(3) that didn't handle NULL is now long past.
/* Duplicate a NUL-terminated string, exit on failure. */
char *mh_xstrdup(const char *src) MALLOC;
-/* Call free(3), if ptr isn't NULL. */
-void mh_xfree(void *ptr);
-
/* Set p to point to newly allocated, uninitialised, memory. */
#define NEW(p) ((p) = mh_xmalloc(sizeof *(p)))
if (!mp)
return;
- mh_xfree(mp->m_text);
- mh_xfree(mp->m_pers);
- mh_xfree(mp->m_mbox);
- mh_xfree(mp->m_host);
- mh_xfree(mp->m_path);
- mh_xfree(mp->m_gname);
- mh_xfree(mp->m_note);
+ free(mp->m_text);
+ free(mp->m_pers);
+ free(mp->m_mbox);
+ free(mp->m_host);
+ free(mp->m_path);
+ free(mp->m_gname);
+ free(mp->m_note);
free(mp);
}
{
int i;
- mh_xfree(command);
+ free(command);
if (argvarray != NULL) {
for (i = 0; argvarray[i] != NULL; i++)
else
m_defs = np->n_next;
free (np->n_name);
- mh_xfree(np->n_field);
+ free(np->n_field);
free(np);
ctxflags |= CTXMOD;
return 0;
if (strcmp (value, np->n_field)) {
if (!np->n_context)
inform("bug: context_replace(key=\"%s\",value=\"%s\"), continuing...", key, value);
- mh_xfree(np->n_field);
+ free(np->n_field);
np->n_field = mh_xstrdup(value);
ctxflags |= CTXMOD;
}
void
nmh_credentials_free(nmh_creds_t creds)
{
- mh_xfree(creds->host);
- mh_xfree(creds->user);
+ free(creds->host);
+ free(creds->user);
if (creds->pass) {
memset(creds->pass, 0, strlen(creds->pass));
output = NULL;
out:
- mh_xfree(tmpbuf);
- mh_xfree(output);
+ free(tmpbuf);
+ free(output);
return errflag > 0;
}
for (i = 0; i < DIM(wantcomp); i++)
for (cm = wantcomp[i]; cm; cm = cm->c_next) {
- mh_xfree(cm->c_text);
+ free(cm->c_text);
cm->c_text = NULL;
}
}
{
if (--cm->c_refcount <= 0) {
/* Shouldn't ever be NULL, but just in case ... */
- mh_xfree(cm->c_name);
- mh_xfree(cm->c_text);
+ free(cm->c_name);
+ free(cm->c_text);
if (cm->c_type & CT_DATE)
free(cm->c_tws);
if (cm->c_type & CT_ADDR && cm->c_mn && cm->c_mn != &fmt_mnull)
struct stat st;
FILE *fp;
- mh_xfree(formats);
+ free(formats);
if (form) {
if ((fp = fopen (etcpath (form), "r")) == NULL)
if (!mp)
return;
- mh_xfree(mp->foldpath);
+ free(mp->foldpath);
/* free the sequence names */
for (i = 0; i < svector_size (mp->msgattrs); i++)
if (mp->seqhandle)
lkfclosedata (mp->seqhandle, mp->seqname);
- mh_xfree(mp->seqname);
+ free(mp->seqname);
bvector_free (mp->attrstats);
free (mp); /* free main folder structure */
char *bp;
struct adrx *adrxp = &adrxs2;
- mh_xfree(pers);
- mh_xfree(mbox);
- mh_xfree(host);
- mh_xfree(routepath);
- mh_xfree(grp);
- mh_xfree(note);
+ free(pers);
+ free(mbox);
+ free(host);
+ free(routepath);
+ free(grp);
+ free(note);
pers = mbox = host = routepath = grp = note = NULL;
err[0] = 0;
}
/* FALLTHRU */
case LX_COMA:
- mh_xfree(note);
+ free(note);
note = NULL;
goto again;
void
netsec_shutdown(netsec_context *nsc)
{
- mh_xfree(nsc->ns_userid);
- mh_xfree(nsc->ns_hostname);
- mh_xfree(nsc->ns_inbuffer);
- mh_xfree(nsc->ns_outbuffer);
- mh_xfree(nsc->sasl_mech);
- mh_xfree(nsc->sasl_chosen_mech);
+ free(nsc->ns_userid);
+ free(nsc->ns_hostname);
+ free(nsc->ns_inbuffer);
+ free(nsc->ns_outbuffer);
+ free(nsc->sasl_mech);
+ free(nsc->sasl_chosen_mech);
#ifdef OAUTH_SERVICE
- mh_xfree(nsc->oauth_service);
+ free(nsc->oauth_service);
#endif /* OAUTH_SERVICE */
#ifdef CYRUS_SASL
if (nsc->sasl_conn)
sasl_dispose(&nsc->sasl_conn);
- mh_xfree(nsc->sasl_cbs);
+ free(nsc->sasl_cbs);
if (nsc->sasl_creds)
nmh_credentials_free(nsc->sasl_creds);
if (nsc->sasl_secret) {
}
free(nsc->sasl_secret);
}
- mh_xfree(nsc->sasl_tmpbuf);
+ free(nsc->sasl_tmpbuf);
#endif /* CYRUS_SASL */
#ifdef TLS_SUPPORT
if (nsc->ssl_io)
rc = sasl_client_step(nsc->sasl_conn, (char *) outbuf, outbuflen, NULL,
(const char **) &saslbuf, &saslbuflen);
- mh_xfree(outbuf);
+ free(outbuf);
if (rc != SASL_OK && rc != SASL_CONTINUE) {
netsec_err(errstr, "SASL client negotiation failed: %s",
/* Copy POSIX behaviour, coping with non-POSIX systems. */
if (size == 0) {
- mh_xfree(ptr);
+ free(ptr);
return mh_xmalloc(1); /* Get a unique pointer. */
}
if (!ptr)
return dest;
}
-/* Call free(3), if ptr isn't NULL. */
-void mh_xfree(void *ptr)
-{
- if (ptr)
- free(ptr); /* Some very old platforms can't cope with NULL. */
-}
-
/*
* Return the present working directory, if the current directory does not
* exist, or is too long, make / the pwd.
for (ap = brkstring(dp = mh_xstrdup(cp), " ", "\n"); ap && *ap; ap++)
if ((i = alias (*ap)) != AK_OK)
adios (NULL, "aliasing error in %s - %s", *ap, akerror (i));
- mh_xfree(dp);
+ free(dp);
}
alias (AliasFile);
}
print_aka (vp ? vp : s, list, 0);
- mh_xfree(vp);
+ free(vp);
}
cptr = fmt_findcomp ("text");
if (cptr) {
- mh_xfree(cptr->c_text);
+ free(cptr->c_text);
cptr->c_text = p->pq_text;
p->pq_text = NULL;
}
cptr = fmt_findcomp ("error");
if (cptr) {
- mh_xfree(cptr->c_text);
+ free(cptr->c_text);
cptr->c_text = p->pq_error;
p->pq_error = NULL;
}
fputs (charstring_buffer (scanl), stdout);
charstring_free (scanl);
- mh_xfree(p->pq_text);
- mh_xfree(p->pq_error);
+ free(p->pq_text);
+ free(p->pq_error);
q = p->pq_next;
free(p);
}
if (*cp == '@')
cp = dp = path(cp + 1, TSUBCWF);
fcc = addlist(fcc, cp);
- mh_xfree(dp);
+ free(dp);
continue;
case WIDTHSW:
cptr = fmt_findcomp ("text");
if (cptr) {
- mh_xfree(cptr->c_text);
+ free(cptr->c_text);
cptr->c_text = mh_xstrdup(date);
}
fmt_scan (fmt, scanl, length, dat, NULL);
for (p = pq.pq_next; p; p = q) {
c = fmt_findcomp("text");
if (c) {
- mh_xfree(c->c_text);
+ free(c->c_text);
c->c_text = p->pq_text;
p->pq_text = NULL;
}
c = fmt_findcomp("error");
if (c) {
- mh_xfree(c->c_text);
+ free(c->c_text);
c->c_text = p->pq_error;
p->pq_error = NULL;
}
fputs(charstring_buffer(buffer), stdout);
mlistfree();
- mh_xfree(p->pq_text);
- mh_xfree(p->pq_error);
+ free(p->pq_text);
+ free(p->pq_error);
q = p->pq_next;
free(p);
}
ivector_push_back (seqnum, seq_getnum(mp, *ap));
num_unseen_seq = i;
- mh_xfree(dp);
+ free(dp);
}
}
for (i = 0; i < comps->size; i += 2) {
c = fmt_findcomp(comps->msgs[i]);
if (c) {
- mh_xfree(c->c_text);
+ free(c->c_text);
c->c_text = getcpy(comps->msgs[i + 1]);
}
}
for (i = 0; i < text->size; i++) {
if (c != NULL) {
- mh_xfree(c->c_text);
+ free(c->c_text);
c->c_text = getcpy(text->msgs[i]);
}
*/
static char msgbuf[NMH_BUFSIZ];
-#define COMPFREE(c) mh_xfree(c->c_text)
+#define COMPFREE(c) free(c->c_text)
/*
* A list of components we treat as addresses
np = output_params(len, ct->c_dispo_first, NULL, 0);
vp = add(np, vp);
vp = add("\n", vp);
- mh_xfree(np);
+ free(np);
add_header (ct, mh_xstrdup(DISPO_FIELD), vp);
}
for (pm = ct->c_ctinfo.ci_first_pm; pm; pm = pm->pm_next) {
if (strcasecmp(pm->pm_name, "name") == 0) {
- mh_xfree(pm->pm_value);
+ free(pm->pm_value);
pm->pm_value = mh_xstrdup(simplename);
break;
}
status = 1;
}
- mh_xfree(maildir);
+ free(maildir);
free (cts);
if (fx.fixtypes != NULL) { svector_free (fx.fixtypes); }
fprintf (fpout, "%s:%s%s\n", np, new_ctline,
FENDNULL(new_params));
free(new_ctline);
- mh_xfree(new_params);
+ free(new_params);
}
free (vp);
if (ct->c_cefile.ce_file && ct->c_cefile.ce_unlink)
(void) m_unlink (ct->c_cefile.ce_file);
- mh_xfree(ct->c_cefile.ce_file);
+ free(ct->c_cefile.ce_file);
ct->c_cefile.ce_file = stripped_content_file;
ct->c_cefile.ce_unlink = 1;
*/
free_header (ct);
- mh_xfree(ct->c_partno);
- mh_xfree(ct->c_vrsn);
- mh_xfree(ct->c_ctline);
+ free(ct->c_partno);
+ free(ct->c_vrsn);
+ free(ct->c_ctline);
ct->c_partno = ct->c_vrsn = ct->c_ctline = NULL;
free_ctinfo (ct);
break;
}
- mh_xfree(ct->c_showproc);
- mh_xfree(ct->c_termproc);
- mh_xfree(ct->c_storeproc);
+ free(ct->c_showproc);
+ free(ct->c_termproc);
+ free(ct->c_storeproc);
ct->c_showproc = ct->c_termproc = ct->c_storeproc = NULL;
- mh_xfree(ct->c_celine);
+ free(ct->c_celine);
ct->c_celine = NULL;
/* free structures for content encodings */
free_encoding (ct, 1);
- mh_xfree(ct->c_id);
- mh_xfree(ct->c_descr);
- mh_xfree(ct->c_dispo);
- mh_xfree(ct->c_dispo_type);
+ free(ct->c_id);
+ free(ct->c_descr);
+ free(ct->c_dispo);
+ free(ct->c_dispo_type);
ct->c_id = ct->c_descr = ct->c_dispo = ct->c_dispo_type = NULL;
free_pmlist (&ct->c_dispo_first);
ct->c_fp = NULL;
}
- mh_xfree(ct->c_storage);
- mh_xfree(ct->c_folder);
+ free(ct->c_storage);
+ free(ct->c_folder);
ct->c_storage = ct->c_folder = NULL;
free (ct);
CI ci;
ci = &ct->c_ctinfo;
- mh_xfree(ci->ci_type);
- mh_xfree(ci->ci_subtype);
+ free(ci->ci_type);
+ free(ci->ci_subtype);
ci->ci_type = ci->ci_subtype = NULL;
free_pmlist(&ci->ci_first_pm);
- mh_xfree(ci->ci_comment);
- mh_xfree(ci->ci_magic);
+ free(ci->ci_comment);
+ free(ci->ci_magic);
ci->ci_comment = ci->ci_magic = NULL;
}
if (!(m = (struct multipart *) ct->c_ctparams))
return;
- mh_xfree(m->mp_start);
- mh_xfree(m->mp_stop);
+ free(m->mp_start);
+ free(m->mp_stop);
free (m->mp_content_before);
free (m->mp_content_after);
if (!(p = (struct partial *) ct->c_ctparams))
return;
- mh_xfree(p->pm_partid);
+ free(p->pm_partid);
free(p);
ct->c_ctparams = NULL;
return;
free_content (e->eb_content);
- mh_xfree(e->eb_body);
- mh_xfree(e->eb_url);
+ free(e->eb_body);
+ free(e->eb_url);
free(e);
ct->c_ctparams = NULL;
}
PM pm = *p, pm2;
while (pm != NULL) {
- mh_xfree(pm->pm_name);
- mh_xfree(pm->pm_value);
- mh_xfree(pm->pm_charset);
- mh_xfree(pm->pm_lang);
+ free(pm->pm_name);
+ free(pm->pm_value);
+ free(pm->pm_charset);
+ free(pm->pm_lang);
pm2 = pm->pm_next;
free(pm);
pm = pm2;
SIGNAL (SIGINT, SIG_IGN);
if (mhl_action == NULL && fp != stdin && fp != NULL)
fclose (fp);
- mh_xfree(holder.c_text);
+ free(holder.c_text);
holder.c_text = NULL;
free_queue (&msghd, &msgtl);
for (c1 = fmthd; c1; c1 = c1->c_next)
}
charstring_free (scanl);
- mh_xfree(p->pq_text);
- mh_xfree(p->pq_error);
+ free(p->pq_text);
+ free(p->pq_error);
q = p->pq_next;
free(p);
}
for (c1 = *head; c1; c1 = c2) {
c2 = c1->c_next;
- mh_xfree(c1->c_name);
- mh_xfree(c1->c_text);
- mh_xfree(c1->c_ovtxt);
- mh_xfree(c1->c_nfs);
+ free(c1->c_name);
+ free(c1->c_text);
+ free(c1->c_ovtxt);
+ free(c1->c_nfs);
if (c1->c_fmt)
fmt_free (c1->c_fmt, 0);
free(c1);
case FORMSW:
if (!(cp = *argp++) || *cp == '-')
adios (NULL, "missing argument to %s", argp[-2]);
- mh_xfree(formsw);
+ free(formsw);
formsw = getcpy (etcpath (cp));
continue;
* Get any <Content-Id> given in buffer
*/
if (magic && *cp == '<') {
- mh_xfree(ct->c_id);
+ free(ct->c_id);
ct->c_id = NULL;
if (!(dp = strchr(ct->c_id = ++cp, '>'))) {
inform("invalid ID in message %s", ct->c_file);
/* showproc is for mhshow and mhstore, though mhlist -debug
* prints it, too. */
- mh_xfree(ct->c_showproc);
+ free(ct->c_showproc);
ct->c_showproc = mh_xstrdup("true");
fseek (ce->ce_fp, 0L, SEEK_SET);
inform("missing language tag in message %s's %s: field\n"
" (parameter %s)", filename, fieldname, nameptr);
free(nameptr);
- mh_xfree(charset);
+ free(charset);
return NOTOK;
}
inform("invalid encoded sequence in message %s's %s: field\n"
" (parameter %s)", filename, fieldname, nameptr);
free(nameptr);
- mh_xfree(charset);
- mh_xfree(lang);
+ free(charset);
+ free(lang);
return NOTOK;
}
vp += 2;
inform("invalid quoted-string in message %s's %s: field\n"
" (parameter %s)", filename, fieldname, nameptr);
free(nameptr);
- mh_xfree(charset);
- mh_xfree(lang);
+ free(charset);
+ free(lang);
return NOTOK;
case '"':
break;
*/
if (index == 0 && encoded) {
- mh_xfree(pp->charset);
+ free(pp->charset);
pp->charset = charset;
- mh_xfree(pp->lang);
+ free(pp->lang);
pp->lang = lang;
}
} else {
if (strlen(params->pm_name) > CPERLIN) {
inform("Parameter name \"%s\" is too long", params->pm_name);
- mh_xfree(paramout);
+ free(paramout);
return NULL;
}
numchars, valoff);
if (i == 0) {
- mh_xfree(paramout);
+ free(paramout);
return NULL;
}
strlen(params->pm_value + valoff), valoff);
if (i == 0) {
- mh_xfree(paramout);
+ free(paramout);
return NULL;
}
case FORMSW:
if (!(cp = *argp++) || *cp == '-')
adios (NULL, "missing argument to %s", argp[-2]);
- mh_xfree(formsw);
+ free(formsw);
formsw = getcpy (etcpath (cp));
continue;
free(cp);
return;
}
- mh_xfree(cp);
+ free(cp);
}
/*
ct->c_storeproc = mh_xstrdup(cp);
}
- mh_xfree(cp);
+ free(cp);
}
switch (state = m_getfld2(&gstate, name, buf, &bufsz)) {
case FLD:
case FLDPLUS:
- mh_xfree(bp);
+ free(bp);
bp = mh_xstrdup(buf);
while (state == FLDPLUS) {
bufsz = sizeof buf;
case FMTERR:
if (state == LENERR || state == FMTERR)
inform("format error in message %d", msgnum);
- mh_xfree(bp);
+ free(bp);
return 0;
default:
state = n->n_after ? (twsort (tw, &n->n_tws) > 0)
: (twsort (tw, &n->n_tws) < 0);
- mh_xfree(bp);
+ free(bp);
return state;
}
if (fcc)
fcc = add (", ", fcc);
fcc = add (cp, fcc);
- mh_xfree(dp);
+ free(dp);
continue;
case FILESW:
/* set up the "fcc" pseudo-component */
cptr = fmt_findcomp ("fcc");
if (cptr) {
- mh_xfree(cptr->c_text);
+ free(cptr->c_text);
if (fcc)
cptr->c_text = mh_xstrdup(fcc);
else
}
cptr = fmt_findcomp ("user");
if (cptr) {
- mh_xfree(cptr->c_text);
+ free(cptr->c_text);
if ((cp = getenv("USER")))
cptr->c_text = mh_xstrdup(cp);
else
ivector_push_back (seqnum, seq_getnum (mp, *ap));
num_unseen_seq = i;
- mh_xfree(dp);
+ free(dp);
}
ontty = isatty (fileno (stdout));
/* Only one part, nothing to split */
if (nparts == 1) {
free (cp);
- mh_xfree(dp);
+ free(dp);
fclose (in);
return sendaux (vec, vecp, program, drft, st);
}
free (cp);
- mh_xfree(dp);
+ free(dp);
fclose (in); /* close the draft */
return status;
msg, compnum);
check_failed = 1;
}
- mh_xfree(datecomp);
- mh_xfree(subjcomp);
+ free(datecomp);
+ free(subjcomp);
fclose (in);
return (0);
smsg->s_subj = subjcomp;
}
fclose (in);
- mh_xfree(datecomp);
+ free(datecomp);
return (1);
}