X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Fm_getfld.c;h=59b8682f222dd16d5b824d953c7cbbd08bfe5a15;hp=aca481a18e433686204fcfeb1e2d660fd9f8f3df;hb=b47dac6540ed952b95dbdce78d2a5f48ff0db86b;hpb=6f48e12f2d4dd510f1610338648c2f6ab904392f diff --git a/sbr/m_getfld.c b/sbr/m_getfld.c index aca481a..59b8682 100644 --- a/sbr/m_getfld.c +++ b/sbr/m_getfld.c @@ -3,10 +3,15 @@ * m_getfld.c -- read/parse a message * * $Id$ + * + * This code is Copyright (c) 2002, by the authors of nmh. See the + * COPYRIGHT file in the root directory of the nmh distribution for + * complete copyright information. */ #include -#include +#include +#include /* This module has a long and checkered history. First, it didn't burst maildrops correctly because it considered two CTRL-A:s in a row to be @@ -178,12 +183,13 @@ static int fdelimlen; static unsigned char *edelim; static int edelimlen; -static int (*eom_action)() = NULL; +static int (*eom_action)(int) = NULL; #ifdef _FSTDIO # define _ptr _p /* Gag */ # define _cnt _r /* Retch */ # define _filbuf __srget /* Puke */ +# define DEFINED__FILBUF_TO_SOMETHING_SPECIFIC #endif #ifdef SCO_5_STDIO @@ -191,6 +197,11 @@ static int (*eom_action)() = NULL; # define _cnt __cnt # define _base __base # define _filbuf(fp) ((fp)->__cnt = 0, __filbuf(fp)) +# define DEFINED__FILBUF_TO_SOMETHING_SPECIFIC +#endif + +#ifndef DEFINED__FILBUF_TO_SOMETHING_SPECIFIC +extern int _filbuf(FILE*); #endif @@ -390,7 +401,8 @@ m_getfld (int state, unsigned char *name, unsigned char *buf, *cp++ = j = *(iob->_ptr + c); c = _filbuf(iob); #endif - if ((j == '\0' || j == '\n') && c != ' ' && c != '\t') { + if (c == EOF || + ((j == '\0' || j == '\n') && c != ' ' && c != '\t')) { if (c != EOF) { #ifdef LINUX_STDIO --iob->_IO_read_ptr; @@ -551,7 +563,7 @@ m_unknown(FILE *iob) msg_style = MS_MMDF; } c = strlen (delimstr); - fdelim = (unsigned char *) malloc((size_t) (c + 3)); + fdelim = (unsigned char *) mh_xmalloc((size_t) (c + 3)); *fdelim++ = '\0'; *fdelim = '\n'; msg_delim = (char *)fdelim+1; @@ -571,7 +583,7 @@ m_unknown(FILE *iob) pat_map = (unsigned char **) calloc (256, sizeof(unsigned char *)); for (cp = (char *) fdelim + 1; cp < (char *) delimend; cp++ ) - pat_map[*cp] = (unsigned char *) cp; + pat_map[(unsigned char)*cp] = (unsigned char *) cp; if (msg_style == MS_MMDF) { /* flush extra msg hdrs */ @@ -584,7 +596,7 @@ m_unknown(FILE *iob) void -m_eomsbr (int (*action)()) +m_eomsbr (int (*action)(int)) { if ((eom_action = action)) { msg_style = MS_MSH; @@ -688,10 +700,10 @@ get_returnpath (char *rp, int rplen, char *dd, int ddlen) if (cp) { /* return path for UUCP style addressing */ dp = strchr (++cp, '\n'); - snprintf (rp, rplen, "%.*s!%.*s\n", dp - cp, cp, bp - ap, ap); + snprintf (rp, rplen, "%.*s!%.*s\n", (int)(dp - cp), cp, (int)(bp - ap), ap); } else { /* return path for standard domain addressing */ - snprintf (rp, rplen, "%.*s\n", bp - ap, ap); + snprintf (rp, rplen, "%.*s\n", (int)(bp - ap), ap); } /* @@ -723,7 +735,8 @@ matchc(int patln, char *pat, int strln, char *str) while (pc != *str++) if (str > es) return 0; - + if (str > es+1) + return 0; sp = str; pp = pat; while (pp < ep && *sp++ == *pp) pp++;