Fixed logical errors when closing opened files

This commit is contained in:
Pierre Pronchery 2006-10-27 10:37:17 +00:00
parent f67ab1912a
commit 653f354b82

View File

@ -30,18 +30,19 @@ static int _uniq(int opts, char const * fields, unsigned int skip,
int ret; int ret;
if(in != NULL && (infp = fopen(in, "r")) == NULL) if(in != NULL && (infp = fopen(in, "r")) == NULL)
return _uniq_error(in, 2); return _uniq_error(in, 1);
if(out != NULL && (outfp = fopen(out, "w")) == NULL) if(out != NULL && (outfp = fopen(out, "w")) == NULL)
{ {
fclose(infp); fclose(infp);
return _uniq_error(out, 2); return _uniq_error(out, 1);
} }
ret = _uniq_do(opts, fields, skip, infp, outfp); ret = _uniq_do(opts, fields, skip, infp, outfp);
if(in == NULL) if(in != NULL)
{ {
fclose(infp); if(fclose(infp) != 0)
if(out == NULL) ret = _uniq_error(in, 1);
fclose(outfp); if(out != NULL && fclose(outfp) != 0)
return _uniq_error(out, 1);
} }
return ret; return ret;
} }
@ -67,8 +68,7 @@ static int _uniq_do(int opts, char const * fields, unsigned int skip,
if((p = realloc(line, len + BUF + 1)) == NULL) if((p = realloc(line, len + BUF + 1)) == NULL)
{ {
free(line); free(line);
_uniq_error("malloc", 0); return _uniq_error("malloc", 1);
return 2;
} }
line = p; line = p;
if(fgets(&line[len], BUF + 1, infp) == NULL) if(fgets(&line[len], BUF + 1, infp) == NULL)
@ -190,5 +190,5 @@ int main(int argc, char * argv[])
else if(argc - optind > 2) else if(argc - optind > 2)
return _usage(); return _usage();
} }
return _uniq(opts, fields, skip, in, out); return _uniq(opts, fields, skip, in, out) == 0 ? 0 : 2;
} }