}
}
- if (nchars >= NAMESZ) {
+ f->crlf = (nchars > 2 && tmpline[nchars-2] == '\r');
+ if (nchars > NAMESZ+1 || (!f->crlf && nchars > NAMESZ)) {
ret = LENERR2;
}
f->valuelen = nchars;
}
- while (ret == FLD2 && (falted = is_falted(msg)) == B_TRUE) {
+ while ((ret == FLD2 || ret == LENERR2) && (falted = is_falted(msg)) == B_TRUE) {
nchars = getline(&tmpline, &len, msg);
if (nchars <= 0) {
free(tmpline);
return IOERR2;
}
- if (nchars >= NAMESZ) {
+ if (nchars > NAMESZ+1 || (!f->crlf && nchars > NAMESZ)) {
ret = LENERR2;
}
}
}
- if (nchars >= NAMESZ) {
- ret = LENERR2;
- }
-
+ f->crlf = (nchars > 2 && tmpline[nchars-2] == '\r');
free(f->value);
f->value = tmpline;
f->valuelen = nchars;