--- linclassif.c.orig 2010-05-05 08:55:55.000000000 -0400
+++ linclassif.c 2011-10-06 05:11:23.000000000 -0400
@@ -62,7 +62,7 @@
uint32_t i, j;
int len;
int recognized;
- int exitflag = 0;
+ int exitflag = 1;
int verb;
int binary_problem;
int output_type;
@@ -101,6 +101,8 @@
feat_idx = NULL;
W = NULL;
W0 = 0;
+ input_fname = NULL;
+ model_fname = NULL;
output_fname = NULL;
nClassErrors = NULL;
nClass = NULL;
@@ -275,6 +277,7 @@
if(fgets(line,LIBSLF_MAXLINELEN, fid) == NULL )
{
fprintf(stderr,"Empty example file.\n");
+ fclose(fid);
goto clean_up;
}
else
@@ -312,6 +315,7 @@
if( tmp_nCols != nCols)
{
fprintf(stderr,"Error: Model file contains lines with different number of colums.\n");
+ fclose(fid);
goto clean_up;
}
@@ -340,6 +344,7 @@
if(W == NULL)
{
fprintf(stderr,"Not enough memory for vector W.\n");
+ fclose(fid);
goto clean_up;
}
@@ -355,6 +360,7 @@
if(fgets(line,LIBSLF_MAXLINELEN, fid) == NULL )
{
fprintf(stderr,"Model file corrupted.\n");
+ fclose(fid);
goto clean_up;
}
@@ -364,6 +370,7 @@
if(val == 0 && begptr == endptr)
{
fprintf(stderr,"Model file corrupted.\n");
+ fclose(fid);
goto clean_up;
}
@@ -388,6 +395,7 @@
if(W == NULL)
{
fprintf(stderr,"Not enough memory for matrix W.\n");
+ fclose(fid);
goto clean_up;
}
@@ -403,6 +411,7 @@
if(fgets(line,LIBSLF_MAXLINELEN, fid) == NULL )
{
fprintf(stderr,"Model file corrupted.\n");
+ fclose(fid);
goto clean_up;
}
@@ -414,6 +423,7 @@
if(val == 0 && begptr == endptr)
{
fprintf(stderr,"Model file corrupted.\n");
+ fclose(fid);
goto clean_up;
}
begptr = endptr;
@@ -458,7 +468,7 @@
else
{
fout = fopen(output_fname, "w+");
- if(fid == NULL) {
+ if(fout == NULL) {
fprintf(stderr,"Cannot open output file.\n");
perror("fopen error ");
fclose(fid);
@@ -478,6 +488,9 @@
if(nClassErrors == NULL)
{
fprintf(stderr,"Not enough memory for vector nClassError.\n");
+ fclose(fid);
+ if(output_fname != NULL)
+ fclose(fout);
goto clean_up;
}
@@ -485,6 +498,9 @@
if(nClass == NULL)
{
fprintf(stderr,"Not enough memory for vector nClass.\n");
+ fclose(fid);
+ if(output_fname != NULL)
+ fclose(fout);
goto clean_up;
}
@@ -505,6 +521,9 @@
{
fprintf(stderr,"Parsing error on line %ld .\n", line_cnt);
fprintf(stderr,"Probably defective input file.\n");
+ fclose(fid);
+ if(output_fname != NULL)
+ fclose(fout);
goto clean_up;
}
@@ -612,12 +631,16 @@
fclose(fid);
- fclose(fout);
+ if(output_fname != NULL)
+ fclose(fout);
- exitflag = 1;
+ exitflag = 0;
clean_up:
+ free(input_fname);
+ free(model_fname);
+ free(output_fname);
free(W);
free(line);
free(feat_val);
/option>
FreeBSD GNOME current development ports (https://github.com/freebsd/freebsd-ports-gnome) | |