#include "index.h"
#include "format_defs.h"
+#include "opj_string.h"
typedef struct dircnt{
/** Buffer for holding images read from Directory*/
unsigned int i;
static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp","tif", "raw", "tga", "png", "j2k", "jp2", "jpt", "j2c", "jpc" };
static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT, J2K_CFMT, J2K_CFMT };
- char * ext = strrchr(filename, '.');
+ const char *ext = strrchr(filename, '.');
if (ext == NULL)
return -1;
ext++;
if (parameters->decod_format == -1)
return 1;
sprintf(infilename,"%s/%s",img_fol->imgdirpath,image_filename);
- strncpy(parameters->infile, infilename, sizeof(infilename));
+ if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile), infilename) != 0) {
+ return 1;
+ }
/*Set output file*/
strcpy(temp_ofname,strtok(image_filename,"."));
}
if(img_fol->set_out_format==1){
sprintf(outfilename,"%s/%s.%s",img_fol->imgdirpath,temp_ofname,img_fol->out_format);
- strncpy(parameters->outfile, outfilename, sizeof(outfilename));
+ if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile), outfilename) != 0) {
+ return 1;
+ }
}
return 0;
}
infile);
return 1;
}
- strncpy(parameters->infile, infile, sizeof(parameters->infile)-1);
+ if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile), infile) != 0) {
+ fprintf(stderr, "[ERROR] Path is too long\n");
+ return 1;
+ }
}
break;
case 'o': /* output file */
{
- char *outfile = opj_optarg;
- strncpy(parameters->outfile, outfile, sizeof(parameters->outfile)-1);
+ if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile), opj_optarg) != 0) {
+ fprintf(stderr, "[ERROR] Path is too long\n");
+ return 1;
+ }
}
break;
case 'y': /* Image Directory path */
{
img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);
+ if(img_fol->imgdirpath == NULL){
+ return 1;
+ }
strcpy(img_fol->imgdirpath,opj_optarg);
img_fol->set_imgdir=1;
}
img_fol_t img_fol;
dircnt_t *dirptr = NULL;
-#ifdef MSD
- OPJ_BOOL l_go_on = OPJ_TRUE;
- OPJ_UINT32 l_max_data_size = 1000;
- OPJ_BYTE * l_data = (OPJ_BYTE *) malloc(1000);
-#endif
-
/* Set decoding parameters to default values */
opj_set_default_decoder_parameters(¶meters);
/* Parse input and get user encoding parameters */
if(parse_cmdline_decoder(argc, argv, ¶meters,&img_fol) == 1) {
+ if(img_fol.imgdirpath) free(img_fol.imgdirpath);
+
return EXIT_FAILURE;
}
num_images=get_num_images(img_fol.imgdirpath);
dirptr=(dircnt_t*)malloc(sizeof(dircnt_t));
- if(dirptr){
- dirptr->filename_buf = (char*)malloc((size_t)num_images*OPJ_PATH_LEN*sizeof(char)); /* Stores at max 10 image file names*/
- dirptr->filename = (char**) malloc((size_t)num_images*sizeof(char*));
+ if(!dirptr){
+ return EXIT_FAILURE;
+ }
+ dirptr->filename_buf = (char*)malloc((size_t)num_images*OPJ_PATH_LEN*sizeof(char)); /* Stores at max 10 image file names*/
+ if(!dirptr->filename_buf){
+ free(dirptr);
+ return EXIT_FAILURE;
+ }
+ dirptr->filename = (char**) malloc((size_t)num_images*sizeof(char*));
- if(!dirptr->filename_buf){
- return EXIT_FAILURE;
- }
+ if(!dirptr->filename){
+ goto fails;
+ }
- for(it_image=0;it_image<num_images;it_image++){
- dirptr->filename[it_image] = dirptr->filename_buf + it_image*OPJ_PATH_LEN;
- }
+ for(it_image=0;it_image<num_images;it_image++){
+ dirptr->filename[it_image] = dirptr->filename_buf + it_image*OPJ_PATH_LEN;
}
+
if(load_images(dirptr,img_fol.imgdirpath)==1){
- return EXIT_FAILURE;
+ goto fails;
}
if (num_images==0){
fprintf(stdout,"Folder is empty\n");
- return EXIT_FAILURE;
+ goto fails;
}
}else{
num_images=1;
fout = fopen(parameters.outfile,"w");
if (!fout){
fprintf(stderr, "ERROR -> failed to open %s for writing\n", parameters.outfile);
- return EXIT_FAILURE;
+ goto fails;
}
}
else
l_stream = opj_stream_create_default_file_stream(parameters.infile,1);
if (!l_stream){
fprintf(stderr, "ERROR -> failed to create the stream from the file %s\n",parameters.infile);
- return EXIT_FAILURE;
+ goto fails;
}
/* Read the JPEG2000 stream */
opj_stream_destroy(l_stream);
opj_destroy_codec(l_codec);
fclose(fout);
- return EXIT_FAILURE;
+ goto fails;
}
/* Read the main header of the codestream and if necessary the JP2 boxes*/
opj_destroy_codec(l_codec);
opj_image_destroy(image);
fclose(fout);
- return EXIT_FAILURE;
+ goto fails;
}
opj_dump_codec(l_codec, img_fol.flag, fout );
fclose(fout);
return EXIT_SUCCESS;
+
+fails:
+ if(dirptr){
+ if(dirptr->filename) free(dirptr->filename);
+ if(dirptr->filename_buf) free(dirptr->filename_buf);
+ free(dirptr);
+ }
+ return EXIT_FAILURE;
}