-
-/*
- * aliasbr.c -- new aliasing mechanism
+/* aliasbr.c -- new aliasing mechanism
*
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
for (; ak; ak = ak->ak_next) {
if (aleq (s, ak->ak_name)) {
return akresult (ak);
- } else if (strchr (s, ':')) {
+ }
+
+ if (strchr (s, ':')) {
/* The first address in a blind list will contain the
alias name, so try to match, but just with just the
address (not including the list name). If there's a
if (mp && mp->m_ingrp) {
char *gname = add (mp->m_gname, NULL);
+ /* FIXME: gname must be true; add() never returns NULL.
+ * Is some other test required? */
if (gname && aleq (name, ak->ak_name)) {
/* Will leak cp. */
cp = concat (gname, akresult (ak), NULL);
}
}
- return getcpy (s);
+ return mh_xstrdup(s);
}
{
char c;
- while ((c = *string++))
+ while ((c = *string++)) {
if (*aliasent == '*')
return 1;
- else
- if ((c | 040) != (*aliasent | 040))
- return 0;
- else
- aliasent++;
+ if (tolower((unsigned char)c) != tolower((unsigned char)*aliasent))
+ return 0;
+ aliasent++;
+ }
return (*aliasent == 0 || *aliasent == '*');
}
FILE *fp;
if (*file != '/'
- && (strncmp (file, "./", 2) && strncmp (file, "../", 3)))
+ && !has_prefix(file, "./") && !has_prefix(file, "../"))
file = etcpath (file);
if ((fp = fopen (file, "r")) == NULL) {
akerrst = file;
fclose (fp);
return i;
}
-
+ /* FALLTHRU */
case ':': /* comment */
case ';':
case '#':
return;
NEW(ad);
- ad->ad_text = getcpy (pp);
+ ad->ad_text = mh_xstrdup(pp);
ad->ad_local = strchr(pp, '@') == NULL && strchr(pp, '!') == NULL;
ad->ad_next = NULL;
if (ak->ak_addr)