str can be free'd outside readString

This commit is contained in:
Pieter Noordhuis 2010-05-05 14:06:55 +02:00
parent 57ca68acc1
commit e51fa063db

View File

@ -58,13 +58,9 @@ int readString(FILE *fp, char** target) {
len += 2; len += 2;
*target = (char*)malloc(len); *target = (char*)malloc(len);
if (!readBytes(fp,*target,len)) { if (!readBytes(fp,*target,len)) {
free(*target);
*target = NULL;
return 0; return 0;
} }
if (!consumeNewline(*target+len-2)) { if (!consumeNewline(*target+len-2)) {
free(*target);
*target = NULL;
return 0; return 0;
} }
(*target)[len-2] = '\0'; (*target)[len-2] = '\0';
@ -82,14 +78,10 @@ long process(FILE *fp) {
while(1) { while(1) {
if (!multi) pos = ftell(fp); if (!multi) pos = ftell(fp);
if (!readArgc(fp, &argc)) { if (!readArgc(fp, &argc)) break;
break;
}
for (i = 0; i < argc; i++) { for (i = 0; i < argc; i++) {
if (!readString(fp,&str)) { if (!readString(fp,&str)) break;
break;
}
if (i == 0) { if (i == 0) {
if (strcasecmp(str, "multi") == 0) { if (strcasecmp(str, "multi") == 0) {
if (multi++) { if (multi++) {
@ -106,7 +98,7 @@ long process(FILE *fp) {
free(str); free(str);
} }
/* Check if loop was finished */ /* Stop if the loop did not finish */
if (i < argc) { if (i < argc) {
if (str) free(str); if (str) free(str);
break; break;
@ -116,11 +108,9 @@ long process(FILE *fp) {
if (feof(fp) && multi && strlen(error) == 0) { if (feof(fp) && multi && strlen(error) == 0) {
ERROR("Reached EOF before reading EXEC for MULTI"); ERROR("Reached EOF before reading EXEC for MULTI");
} }
if (strlen(error) > 0) { if (strlen(error) > 0) {
printf("%s\n", error); printf("%s\n", error);
} }
return pos; return pos;
} }