diff options
author | David Phillips <dbphillipsnz@gmail.com> | 2016-05-16 21:31:23 +1200 |
---|---|---|
committer | David Phillips <dbphillipsnz@gmail.com> | 2016-05-16 21:31:23 +1200 |
commit | 1637ea7c6439ac88c88bb5d84c764d493aea3093 (patch) | |
tree | cbb929354cf105f4e076ef86876e9998b2976c29 /pgm-interlace.c | |
parent | 863f94701805a81711231037a28e52322e704245 (diff) | |
download | pgm-interlace-1637ea7c6439ac88c88bb5d84c764d493aea3093.tar.xz |
Refactor closing members of f, fix return code bug on truncated input
Diffstat (limited to 'pgm-interlace.c')
-rw-r--r-- | pgm-interlace.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/pgm-interlace.c b/pgm-interlace.c index eeaade4..db7ea2b 100644 --- a/pgm-interlace.c +++ b/pgm-interlace.c @@ -208,6 +208,14 @@ int parse_header(FILE *fd, char *magic, size_t magic_len, long *width, long *hei return 0; } +void close_all(FILE **f, size_t f_len) +{ + size_t i = 0; + + for (i = 0; i < f_len; i++) + fclose(f[i]); +} + /**/ int write_pgm(FILE *fout, unsigned long size, unsigned int white, FILE **fin, size_t fin_len) { @@ -306,18 +314,21 @@ int main(int argc, char **argv) || white != new_white) { fprintf(stderr, "Error: '%s' doesn't have identical header to '%s', stop\n", argv[i+1], argv[1]); + close_all(f, clust_total); return 1; } } fprintf(stderr, "Full image size will be %ldx%ld, using %d images\n", size, size, clust_total); - write_pgm(stdout, size, white, f, clust_total); - - /* close all input files */ - for (i = 1; i < argc; i++) - fclose(f[i-1]); + if (write_pgm(stdout, size, white, f, clust_total)) + { + close_all(f, clust_total); + return 1; + } + close_all(f, clust_total); free(f); + return 0; } |