diff --git a/cjpeg.c b/cjpeg.c index 23634aec..1d39dab8 100644 --- a/cjpeg.c +++ b/cjpeg.c @@ -282,8 +282,10 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv, } else if (keymatch(arg, "dct", 2)) { /* Select DCT algorithm. */ - if (++argn >= argc) /* advance to next argument */ + if (++argn >= argc) { /* advance to next argument */ + fprintf(stderr, "%s: missing argument for dct\n", progname); usage(); + } if (keymatch(argv[argn], "int", 1)) { cinfo->dct_method = JDCT_ISLOW; } else if (keymatch(argv[argn], "fast", 2)) { @@ -291,6 +293,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv, } else if (keymatch(argv[argn], "float", 2)) { cinfo->dct_method = JDCT_FLOAT; } else + fprintf(stderr, "%s: invalid argument for dct\n", progname); usage(); } else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) { @@ -314,7 +317,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv, } else if (keymatch(arg, "flat", 4)) { cinfo->use_flat_quant_tbl = TRUE; jpeg_set_quality(cinfo, 75, TRUE); - + } else if (keymatch(arg, "grayscale", 2) || keymatch(arg, "greyscale",2)) { /* Force a monochrome JPEG file to be generated. */ jpeg_set_colorspace(cinfo, JCS_GRAYSCALE); @@ -327,12 +330,12 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv, if (++argn >= argc) /* advance to next argument */ usage(); cinfo->lambda_log_scale1 = atof(argv[argn]); - + } else if (keymatch(arg, "lambda2", 7)) { if (++argn >= argc) /* advance to next argument */ usage(); cinfo->lambda_log_scale2 = atof(argv[argn]); - + } else if (keymatch(arg, "maxmemory", 3)) { /* Maximum memory in Kb (or Mb with 'm'). */ long lval; @@ -348,7 +351,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv, } else if (keymatch(arg, "multidcscan", 3)) { cinfo->one_dc_scan = FALSE; - + } else if (keymatch(arg, "optimize", 1) || keymatch(arg, "optimise", 1)) { /* Enable entropy parm optimization. */ #ifdef ENTROPY_OPT_SUPPORTED @@ -361,8 +364,10 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv, } else if (keymatch(arg, "outfile", 4)) { /* Set output file name. */ - if (++argn >= argc) /* advance to next argument */ + if (++argn >= argc) { /* advance to next argument */ + fprintf(stderr, "%s: missing argument for outfile\n", progname); usage(); + } outfilename = argv[argn]; /* save it away for later use */ } else if (keymatch(arg, "progressive", 1)) { @@ -388,8 +393,10 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv, } else if (keymatch(arg, "quality", 1)) { /* Quality ratings (quantization table scaling factors). */ - if (++argn >= argc) /* advance to next argument */ + if (++argn >= argc) { /* advance to next argument */ + fprintf(stderr, "%s: missing argument for quality\n", progname); usage(); + } qualityarg = argv[argn]; } else if (keymatch(arg, "qslots", 2)) { @@ -505,6 +512,7 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv, jpeg_set_quality(cinfo, 75, TRUE); } else { + fprintf(stderr, "%s: unknown option '%s'\n", progname, arg); usage(); /* bogus switch */ } } @@ -516,20 +524,26 @@ parse_switches (j_compress_ptr cinfo, int argc, char **argv, /* Set quantization tables for selected quality. */ /* Some or all may be overridden if -qtables is present. */ if (qualityarg != NULL) /* process -quality if it was present */ - if (! set_quality_ratings(cinfo, qualityarg, force_baseline)) + if (! set_quality_ratings(cinfo, qualityarg, force_baseline)) { + fprintf(stderr, "%s: can't set quality ratings\n", progname); usage(); + } if (qtablefile != NULL) /* process -qtables if it was present */ - if (! read_quant_tables(cinfo, qtablefile, force_baseline)) + if (! read_quant_tables(cinfo, qtablefile, force_baseline)) { + fprintf(stderr, "%s: can't read qtable file\n", progname); usage(); + } if (qslotsarg != NULL) /* process -qslots if it was present */ if (! set_quant_slots(cinfo, qslotsarg)) usage(); if (samplearg != NULL) /* process -sample if it was present */ - if (! set_sample_factors(cinfo, samplearg)) + if (! set_sample_factors(cinfo, samplearg)) { + fprintf(stderr, "%s: can't set sample factors\n", progname); usage(); + } #ifdef C_PROGRESSIVE_SUPPORTED if (simple_progressive) /* process -progressive; -scans can override */