Commit ab2e9b94 authored by André Anjos's avatar André Anjos

Allow garbage at the end of PNM iaimages not affect readout (closes #30)

parent c4d84efd
Pipeline #16651 passed with stage
in 21 minutes 12 seconds
......@@ -117,16 +117,8 @@ pm_openw(const char * const name) {
void
pm_close(FILE * const f) {
// fprintf(stderr, "I am closing a file\n");
fflush( f );
// if ( ferror( f ) )
// boost::format m("a file read or write error occurred at some point");
// throw std::runtime_error(m.str());
if ( f != stdin )
fclose( f );
// if ( fclose( f ) != 0 )
// boost::format m("cannot close file.");
// throw std::runtime_error(m.str());
fflush(f);
if (f != stdin) fclose( f );
}
static boost::shared_ptr<std::FILE> make_cfile(const char *filename, const char *flags)
......@@ -168,12 +160,12 @@ static void pnm_readpaminit(FILE *file, struct pam * const pamP, const int size)
if (img_colors >> 8 == 0) pamP->bytes_per_sample = 1;
else if (img_colors >> 16 == 0) pamP->bytes_per_sample = 2;
} else {
boost::format m("Unknown PNM/PFM image format.");
boost::format m("pnm_readpaminit(): Unknown PNM/PFM image format.");
throw std::runtime_error(m.str());
}
if (read_err != 0) {
boost::format m("Something went wrong when reading the image file.");
boost::format m("pnm_readpaminit(): Something went wrong when reading the image file.");
throw std::runtime_error(m.str());
}
......@@ -214,7 +206,7 @@ static void pnm_readpam(struct pam * const pamP, int *img_data) {
}
if (read_err != 0) {
boost::format m("Something went wrong when reading the image file.");
boost::format m("pnm_readpam(): Something went wrong when reading the image file.");
throw std::runtime_error(m.str());
}
}
......@@ -240,7 +232,7 @@ static void pnm_writepam(struct pam * const pamP, int *img_data) {
}
if (write_err != 0) {
boost::format m("Something went wrong when writing the image file.");
boost::format m("pnm_writepam(): Something went wrong when writing the image file.");
throw std::runtime_error(m.str());
}
}
......
......@@ -309,13 +309,13 @@ int read_pbm_data(FILE *f, int *img_in, int img_size, int is_ascii, int img_widt
if (is_ascii == 1) {
read_count = fscanf(f, "%d", &lum_val);
if (read_count < 1) return -1;
if (i >= img_size) return -1;
if (i >= img_size) break;
img_in[i++] = lum_val;
} else {
lum_val = fgetc(f);
/* Decode the image contents byte-by-byte. */
for (k = 0; k < 8; k++) {
if (i >= img_size) return -1;
if (i >= img_size) break;
img_in[i++] = (lum_val >> (7-k)) & 0x1;
// fprintf(stderr, "i: %d, %d\n", i, img_in[i]);
row_position++;
......@@ -355,7 +355,7 @@ int read_pgm_data(FILE *f, int *img_in, int img_size, int is_ascii,
lum_val |= fgetc(f);
}
}
if (i >= img_size) return -1;
if (i >= img_size) break;
img_in[i++] = lum_val;
}
// fclose(f);
......@@ -397,7 +397,7 @@ int read_ppm_data(FILE *f, int *img_in, int img_size, int is_ascii,
b_val |= fgetc(f);
}
}
if (i >= img_size) return -1;
if (i >= img_size) break;
img_in[i++] = r_val;
img_in[i++] = g_val;
img_in[i++] = b_val;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment