From: Philipp Takacs Date: Sat, 21 Nov 2015 11:16:01 +0000 (+0100) Subject: make m_getfld2() called with an error state a noop X-Git-Tag: mmh-0.3~39^2~9 X-Git-Url: http://git.marmaro.de/?a=commitdiff_plain;h=2c31657cf61e7fe818571f3c60f168d3210988ab;p=mmh make m_getfld2() called with an error state a noop This probduce some code dublication, but the will be reduced, if we make m_getfld2() more transparent on errors. --- diff --git a/sbr/m_getfld2.c b/sbr/m_getfld2.c index de38435..970a3f0 100644 --- a/sbr/m_getfld2.c +++ b/sbr/m_getfld2.c @@ -48,29 +48,29 @@ m_getfld2(enum state s, struct field *f, FILE *msg) ssize_t nchars; enum threestate falted; - nchars = getline(&tmpline, &len, msg); - if (nchars < 1) { - if (feof(msg)) { - return FILEEOF2; - } else { - return IOERR2; + switch (s) { + case FLD2: + nchars = getline(&tmpline, &len, msg); + if (nchars < 1) { + if (feof(msg)) { + return FILEEOF2; + } else { + return IOERR2; + } } - } - *f->name = '\0'; - f->namelen = 0; + *f->name = '\0'; + f->namelen = 0; - if (nchars >= NAMESZ) { - if (f->value) { - free(f->value); + if (nchars >= NAMESZ) { + if (f->value) { + free(f->value); + } + f->value = tmpline; + f->valuelen = nchars; + return LENERR2; } - f->value = tmpline; - f->valuelen = nchars; - return LENERR2; - } - switch (s) { - case FLD2: if (*(tmpline + nchars - 1) != '\n') { if (f->value) { free(f->value); @@ -151,6 +151,26 @@ m_getfld2(enum state s, struct field *f, FILE *msg) return FLD2; case BODY2: + nchars = getline(&tmpline, &len, msg); + if (nchars < 1) { + if (feof(msg)) { + return FILEEOF2; + } else { + return IOERR2; + } + } + + *f->name = '\0'; + f->namelen = 0; + + if (nchars >= NAMESZ) { + if (f->value) { + free(f->value); + } + f->value = tmpline; + f->valuelen = nchars; + return LENERR2; + } if (f->value) { free(f->value); }