static int pnm_dec_parseopts(const char *optstr, pnm_dec_importopts_t *opts) { jas_tvparser_t *tvp; opts->max_samples = JAS_DEC_DEFAULT_MAX_SAMPLES; opts->allow_trunc = 0; if (!(tvp = jas_tvparser_create(optstr ? optstr : ""))) { return -1; } while (!jas_tvparser_next(tvp)) { switch (jas_taginfo_nonull(jas_taginfos_lookup(pnm_decopts, jas_tvparser_gettag(tvp)))->id) { case OPT_ALLOWTRUNC: opts->allow_trunc = atoi(jas_tvparser_getval(tvp)); break; case OPT_MAXSIZE: opts->max_samples = strtoull(jas_tvparser_getval(tvp), 0, 10); break; default: jas_eprintf("warning: ignoring invalid option %s\n", jas_tvparser_gettag(tvp)); break; } } jas_tvparser_destroy(tvp); return 0; }
/* Parse the encoder options string. */ static int jpg_parseencopts(char *optstr, jpg_encopts_t *encopts) { jas_tvparser_t *tvp; char *qual_str; int ret; tvp = 0; /* Initialize default values for encoder options. */ encopts->qual = -1; /* Create the tag-value parser. */ if (!(tvp = jas_tvparser_create(optstr ? optstr : ""))) { goto error; } /* Get tag-value pairs, and process as necessary. */ while (!(ret = jas_tvparser_next(tvp))) { switch (jas_taginfo_nonull(jas_taginfos_lookup(jpg_opttab, jas_tvparser_gettag(tvp)))->id) { case OPT_QUAL: qual_str = jas_tvparser_getval(tvp); if (sscanf(qual_str, "%d", &encopts->qual) != 1) { jas_eprintf( "ignoring bad quality specifier %s\n", jas_tvparser_getval(tvp)); encopts->qual = -1; } break; default: jas_eprintf("warning: ignoring invalid option %s\n", jas_tvparser_gettag(tvp)); break; } } if (ret < 0) { goto error; } /* Destroy the tag-value parser. */ jas_tvparser_destroy(tvp); return 0; error: if (tvp) { jas_tvparser_destroy(tvp); } return -1; }