/*************************************************************************** * * Copyright 2009,2013 by Sean Conner. * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at your * option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, see . * * Comments, questions and criticisms can be sent to: sean@conman.org * *************************************************************************/ #include #include #include #include char *RFC822LineRead(FILE *in) { char *line = NULL; size_t max = 0; size_t idx = 0; int c; assert(in != NULL); while((c = fgetc(in)) != EOF) { if (c == '\n') { int c1 = fgetc(in); if ((c1 == EOF) || (c1 == '\n') || !isspace(c1)) ungetc(c1,in); else c = ' '; } if (idx == max) { char *n; max += 80; n = realloc(line,max); if (n == NULL) { free(line); return NULL; } line = n; } line[idx++] = c; if (c == '\n') break; } if (idx == max) { char *n; max += 1; n = realloc(line,max); if (n == NULL) { free(line); return NULL; } line = n; } line[idx] = '\0'; if (*line == '\n') { free(line); line = NULL; } return line; } .