From dac95eff3a972f5686316db39ed0b8431aff8908 Mon Sep 17 00:00:00 2001 From: Mathieu Malaterre Date: Tue, 18 Mar 2014 16:26:39 +0000 Subject: [PATCH] [1.5] Rework r2768 in fact getopt_long is slightly different on GNU. Adapt signature to handle BSD signature and GNU one. Update issue 301 --- applications/codec/image_to_j2k.c | 9 ++++++-- applications/codec/j2k_dump.c | 7 ++++++- applications/codec/j2k_to_image.c | 7 ++++++- applications/common/opj_getopt.h | 34 ++++++++++++++++++------------- 4 files changed, 39 insertions(+), 18 deletions(-) diff --git a/applications/codec/image_to_j2k.c b/applications/codec/image_to_j2k.c index ed8b4198..d9cafd6a 100644 --- a/applications/codec/image_to_j2k.c +++ b/applications/codec/image_to_j2k.c @@ -590,7 +590,8 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param {"OutFor",REQ_ARG, NULL ,'O'}, {"POC",REQ_ARG, NULL ,'P'}, {"ROI",REQ_ARG, NULL ,'R'}, - {"jpip",NO_ARG, NULL, 'J'} + {"jpip",NO_ARG, NULL, 'J'}, + {0,0,0,0} /* GNU getopt_long requirement */ }; /* parse the command line */ @@ -600,12 +601,16 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param #endif /* USE_JPWL */ "h"; - totlen=sizeof(long_option); + totlen=sizeof(long_option)-1; img_fol->set_out_format=0; raw_cp->rawWidth = 0; do{ +#ifdef USE_SYSTEM_GETOPT + c = opj_getopt_long(argc, argv, optlist,long_option,0); +#else c = opj_getopt_long(argc, argv, optlist,long_option,totlen); +#endif if (c == -1) break; switch (c) { diff --git a/applications/codec/j2k_dump.c b/applications/codec/j2k_dump.c index 5ffc7736..63cce3a2 100644 --- a/applications/codec/j2k_dump.c +++ b/applications/codec/j2k_dump.c @@ -201,15 +201,20 @@ int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters,i int totlen, c; opj_option_t long_option[]={ {"ImgDir",REQ_ARG, NULL ,'y'}, + {0,0,0,0} /* GNU getopt_long requirement */ }; const char optlist[] = "i:o:h"; OPJ_ARG_NOT_USED(indexfilename); - totlen=sizeof(long_option); + totlen=sizeof(long_option)-1; img_fol->set_out_format = 0; do { +#ifdef USE_SYSTEM_GETOPT + c = opj_getopt_long(argc, argv,optlist,long_option,0); +#else c = opj_getopt_long(argc, argv,optlist,long_option,totlen); +#endif if (c == -1) break; switch (c) { diff --git a/applications/codec/j2k_to_image.c b/applications/codec/j2k_to_image.c index b0dbf547..6f215a2c 100644 --- a/applications/codec/j2k_to_image.c +++ b/applications/codec/j2k_to_image.c @@ -243,6 +243,7 @@ static int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *param opj_option_t long_option[]={ {"ImgDir",REQ_ARG, NULL ,'y'}, {"OutFor",REQ_ARG, NULL ,'O'}, + {0,0,0,0} /* GNU getopt_long requirement */ }; const char optlist[] = "i:o:r:l:x:" @@ -253,10 +254,14 @@ static int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *param #endif /* USE_JPWL */ /* <set_out_format = 0; do { +#ifdef USE_SYSTEM_GETOPT + c = opj_getopt_long(argc, argv,optlist,long_option,0); +#else c = opj_getopt_long(argc, argv,optlist,long_option,totlen); +#endif if (c == -1) break; switch (c) { diff --git a/applications/common/opj_getopt.h b/applications/common/opj_getopt.h index 1fa3558d..704701b1 100644 --- a/applications/common/opj_getopt.h +++ b/applications/common/opj_getopt.h @@ -2,6 +2,25 @@ #include "opj_config.h" +#ifdef USE_SYSTEM_GETOPT +#include + +#define opj_opterr opterr +#define opj_optind optind +#define opj_optopt optopt +#define opj_optreset optreset +#define opj_optarg optarg + +typedef struct option opj_option_t; + +#define NO_ARG no_argument +#define REQ_ARG required_argument +#define OPT_ARG optional_argument + +#define opj_getopt getopt +#define opj_getopt_long getopt_long + +#else #ifndef _GETOPT_H_ #define _GETOPT_H_ @@ -17,19 +36,6 @@ typedef struct opj_option #define REQ_ARG 1 #define OPT_ARG 2 -#ifdef USE_SYSTEM_GETOPT -#include - -#define opj_opterr opterr -#define opj_optind optind -#define opj_optopt optopt -#define opj_optreset optreset -#define opj_optarg optarg - -#define opj_getopt getopt -#define opj_getopt_long getopt_long - -#else extern int opj_opterr; extern int opj_optind; extern int opj_optopt; @@ -41,5 +47,5 @@ extern int opj_getopt_long(int argc, char * const argv[], const char *optstring, const opj_option_t *longopts, int totlen); extern void reset_options_reading(void); -#endif /* USE_SYSTEM_GETOPT */ #endif /* _GETOPT_H_ */ +#endif /* USE_SYSTEM_GETOPT */