/*
aux.c - Auxilliary code for CGI library
- Copyright (C) 2007 by Martin Schulze <joey@infodrom.org>
+ Copyright (C) 2007,8 by Martin Schulze <joey@infodrom.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ along with this program; if not, write to the Free Software Foundation
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include <stdlib.h>
{
static char *line = NULL;
static size_t size = 0;
+ int len;
char buf[BUFSIZE];
char *cp;
while (!feof (stream)) {
if ((cp = fgets (buf, sizeof (buf), stream)) == NULL)
+ {
+ free(line);
+ line = NULL;
return NULL;
+ }
if (strlen(line)+strlen(buf)+1 > size) {
if ((cp = (char *)realloc (line, size + BUFSIZE)) == NULL)
return line;
+ cp[size] = '\0';
size += BUFSIZE;
line = cp;
}
strcat (line, buf);
- if (line[strlen(line)-1] == '\n') {
- line[strlen(line)-1] = '\0';
- if (line[strlen(line)-1] == '\r')
- line[strlen(line)-1] = '\0';
- cgiDebugOutput (2, "Read line '%s'", line);
+ len = strlen(line);
+ if (len && line[len-1] == '\n') {
+ line[len-1] = '\0';
+ len --;
+ if (len && line[len-1] == '\r')
+ line[len-1] = '\0';
+ cgiDebugOutput (4, "Read line '%s'", line);
return line;
}
}
+ free(line);
+ line = NULL;
+
return NULL;
}