This probduce some code dublication, but the will be
reduced, if we make m_getfld2() more transparent on errors.
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);
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);
}