X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/c6f2d14d9c38345075629af3487c2de491584ca1..fc0d9e42eafa6999fad8dc0887fb12e1a4a8699d:/sbr/mf.c diff --git a/sbr/mf.c b/sbr/mf.c index e2da81d0..084643b4 100644 --- a/sbr/mf.c +++ b/sbr/mf.c @@ -26,25 +26,24 @@ static int my_lex (char *); int isfrom(const char *string) { - return (strncmp (string, "From ", 5) == 0 - || strncmp (string, ">From ", 6) == 0); + return (has_prefix(string, "From ") + || has_prefix(string, ">From ")); } int lequal (const char *a, const char *b) { - for (; *a; a++, b++) + char c1, c2; + + for (; *a; a++, b++) { if (*b == 0) return FALSE; - else { - char c1 = islower ((unsigned char) *a) ? - toupper ((unsigned char) *a) : *a; - char c2 = islower ((unsigned char) *b) ? - toupper ((unsigned char) *b) : *b; - if (c1 != c2) - return FALSE; - } + c1 = toupper((unsigned char)*a); + c2 = toupper((unsigned char)*b); + if (c1 != c2) + return FALSE; + } return (*b == 0); } @@ -53,10 +52,8 @@ lequal (const char *a, const char *b) static int isat (const char *p) { - return (strncmp (p, " AT ", 4) - && strncmp (p, " At ", 4) - && strncmp (p, " aT ", 4) - && strncmp (p, " at ", 4) ? FALSE : TRUE); + return has_prefix(p, " AT ") || has_prefix(p, " At ") || + has_prefix(p, " aT ") || has_prefix(p, " at "); } @@ -181,18 +178,12 @@ getadrx (const char *addrs, int eai) char *bp; struct adrx *adrxp = &adrxs2; - if (pers) - free (pers); - if (mbox) - free (mbox); - if (host) - free (host); - if (path) - free (path); - if (grp) - free (grp); - if (note) - free (note); + mh_xfree(pers); + mh_xfree(mbox); + mh_xfree(host); + mh_xfree(path); + mh_xfree(grp); + mh_xfree(note); pers = mbox = host = path = grp = note = NULL; err[0] = 0; @@ -258,7 +249,7 @@ getadrx (const char *addrs, int eai) while (isspace ((unsigned char) *ap)) ap++; if (cp) - sprintf (adr, "%.*s", (int)(cp - ap), ap); + snprintf(adr, sizeof adr, "%.*s", (int)(cp - ap), ap); else strcpy (adr, ap); bp = adr + strlen (adr) - 1; @@ -298,10 +289,8 @@ again: ; return NOTOK; } case LX_COMA: - if (note) { - free (note); - note = NULL; - } + mh_xfree(note); + note = NULL; goto again; case LX_END: @@ -317,7 +306,7 @@ again: ; return OK; /* why be choosy? */ default: - sprintf (err, "illegal address construct (%s)", buffer); + snprintf(err, sizeof err, "illegal address construct (%s)", buffer); return NOTOK; } @@ -336,13 +325,13 @@ again: ; return NOTOK; if (last_lex == LX_RBRK) return OK; - sprintf (err, "missing right-bracket (%s)", buffer); + snprintf(err, sizeof err, "missing right-bracket (%s)", buffer); return NOTOK; case LX_COLN: get_group: ; if (glevel++ > 0) { - sprintf (err, "nested groups not allowed (%s)", pers); + snprintf(err, sizeof err, "nested groups not allowed (%s)", pers); return NOTOK; } grp = add (": ", pers); @@ -371,7 +360,7 @@ again: ; goto more_phrase; default: - sprintf (err, "no mailbox in address, only a phrase (%s%s)", + snprintf(err, sizeof err, "no mailbox in address, only a phrase (%s%s)", pers, buffer); return NOTOK; } @@ -407,7 +396,7 @@ again: ; return OK; default: - sprintf (err, "junk after local@domain (%s)", buffer); + snprintf(err, sizeof err, "junk after local@domain (%s)", buffer); return NOTOK; } @@ -424,7 +413,7 @@ again: ; return OK; default: - sprintf (err, "missing mailbox (%s)", buffer); + snprintf(err, sizeof err, "missing mailbox (%s)", buffer); return NOTOK; } } @@ -472,7 +461,7 @@ route_addr (char *buffer) return OK; default: - sprintf (err, "no at-sign after local-part (%s)", buffer); + snprintf(err, sizeof err, "no at-sign after local-part (%s)", buffer); return NOTOK; } } @@ -491,7 +480,7 @@ local_part (char *buffer) break; default: - sprintf (err, "no mailbox in local-part (%s)", buffer); + snprintf(err, sizeof err, "no mailbox in local-part (%s)", buffer); return NOTOK; } @@ -518,7 +507,7 @@ domain (char *buffer) break; default: - sprintf (err, "no sub-domain in domain-part of address (%s)", buffer); + snprintf(err, sizeof err, "no sub-domain in domain-part of address (%s)", buffer); return NOTOK; } @@ -553,7 +542,7 @@ route (char *buffer) break; default: - sprintf (err, "no sub-domain in domain-part of address (%s)", buffer); + snprintf(err, sizeof err, "no sub-domain in domain-part of address (%s)", buffer); return NOTOK; } switch (my_lex (buffer)) { @@ -569,7 +558,7 @@ route (char *buffer) break; default: - sprintf (err, "no at-sign found for next domain in route (%s)", + snprintf(err, sizeof err, "no at-sign found for next domain in route (%s)", buffer); } break; @@ -586,7 +575,7 @@ route (char *buffer) return OK; default: - sprintf (err, "no colon found to terminate route (%s)", buffer); + snprintf(err, sizeof err, "no colon found to terminate route (%s)", buffer); return NOTOK; } } @@ -742,7 +731,7 @@ legal_person (const char *p) for (cp = p; *cp; cp++) for (i = 0; special[i].lx_chr; i++) if (*cp == special[i].lx_chr) { - sprintf (buffer, "\"%s\"", p); + snprintf(buffer, sizeof buffer, "\"%s\"", p); return buffer; }