# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: address@hidden # kfm0pr7sa9jupjac # target_branch: bzr://bzr.sv.gnu.org/pdf/libgnupdf/trunk/ # testament_sha1: 5971aa41ea1932b741fd18122fcf4fe37ece87d4 # timestamp: 2011-07-07 18:22:14 +0200 # base_revision_id: address@hidden # # Begin patch === modified file 'AUTHORS' --- AUTHORS 2011-03-24 17:58:36 +0000 +++ AUTHORS 2011-07-07 16:21:29 +0000 @@ -31,6 +31,8 @@ pdf-crypt-md-hash.c pdf-crypt-md-new.c pdf-crypt-md-write.c pdf-crypt.c pdf-fp-func-4-new.c and 10 other files +Georg Gottleuber: changed pdf-filter.c + Gerardo E. Gidoni: changed gnupdf.texi pdf-stm-read.c gnupdf-tsd.texi pdf-stm-write.c configure.ac pdf-filter.c pdf-stm-f-flate.h pdf-stm-f-rl.c check-api-doc-consistency.pl === modified file 'ChangeLog' --- ChangeLog 2011-07-07 15:32:08 +0000 +++ ChangeLog 2011-07-07 16:21:29 +0000 @@ -1,3 +1,8 @@ +2011-07-07 Georg Gottleuber + + utils: fix arg evaluation of pdf-filter + * utils/pdf-filter.c + 2011-07-07 Franck Lesage gnupdf-hg: documenting the mingw32 compilation steps === modified file 'utils/pdf-filter.c' --- utils/pdf-filter.c 2011-07-07 15:29:22 +0000 +++ utils/pdf-filter.c 2011-07-07 16:21:29 +0000 @@ -60,6 +60,7 @@ enum { + FILTER_INSTALL_NONE, HELP_ARG, VERSION_ARG, READ_ARG, @@ -90,18 +91,33 @@ JBIG2DEC_FILTER_ARG, JBIG2DEC_GLOBAL_SEGMENTS_ARG, JBIG2DEC_PAGE_SIZE, + JBIG2DEC_FILTER_INSTALL, #endif /* HAVE_LIBJBIG2DEC */ LZWENC_FILTER_ARG, LZWDEC_FILTER_ARG, LZW_EARLYCHANGE_ARG, + LZWENC_FILTER_INSTALL, + LZWDEC_FILTER_INSTALL, MD5ENC_FILTER_ARG, KEY_ARG, AESENC_FILTER_ARG, AESDEC_FILTER_ARG, + AESENC_FILTER_INSTALL, + AESDEC_FILTER_INSTALL, V2ENC_FILTER_ARG, - V2DEC_FILTER_ARG + V2DEC_FILTER_ARG, + V2ENC_FILTER_INSTALL, + V2DEC_FILTER_INSTALL }; +/* name filter args here */ +#define IS_FILTER_ARG(arg) \ + ((arg) == JBIG2DEC_GLOBAL_SEGMENTS_ARG || \ + (arg) == JBIG2DEC_PAGE_SIZE || \ + (arg) == LZW_EARLYCHANGE_ARG || \ + (arg) == KEY_ARG) + + static const struct option GNU_longOptions[] = { {"help", no_argument, NULL, HELP_ARG}, @@ -324,7 +340,7 @@ else { /* Write stdin into the write stream, - which will be transparently writting the output to stdout. */ + which will be transparently writting the output to stdout. */ do { if (read_pdf_fsys) @@ -392,11 +408,11 @@ *read_mode = PDF_FALSE; while (!finish && - (ci = getopt_long (argc, - argv, - "i:o:", - GNU_longOptions, - NULL)) != -1) + (ci = getopt_long (argc, + argv, + "i:o:", + GNU_longOptions, + NULL)) != -1) { c = ci; switch (c) @@ -562,7 +578,6 @@ pdf_stm_t *stm, int ci) { - char c; pdf_status_t ret; pdf_hash_t *filter_params = NULL; FILE *file; @@ -570,6 +585,8 @@ pdf_status_t status; pdf_bool_t lzw_earlychange = PDF_FALSE; pdf_error_t *error = NULL; + char filter_to_install = FILTER_INSTALL_NONE; + char next_ci = getopt_long (argc, argv, "", GNU_longOptions, NULL); /* Initialize the crypt module */ if (pdf_crypt_init () != PDF_OK) @@ -581,8 +598,7 @@ /* Install filters */ do { - c = ci; - switch (c) + switch (ci) { /* FILTER INSTALLERS */ case NULL_FILTER_ARG: @@ -727,9 +743,25 @@ break; } - case LZWENC_FILTER_ARG: /* Note that both ENC and DEC go here */ + case LZWENC_FILTER_ARG: + { + filter_to_install = LZWENC_FILTER_INSTALL; + + /* set default value */ + lzw_earlychange = PDF_FALSE; + break; + } case LZWDEC_FILTER_ARG: { + filter_to_install = LZWDEC_FILTER_INSTALL; + + /* set default value */ + lzw_earlychange = PDF_FALSE; + break; + } + case LZWENC_FILTER_INSTALL: /* Note that both ENC and DEC go here */ + case LZWDEC_FILTER_INSTALL: + { filter_params = pdf_hash_new (&error); if (!filter_params) { @@ -753,7 +785,7 @@ } if (!pdf_stm_install_filter (stm, - (c == LZWENC_FILTER_ARG ? + (ci == LZWENC_FILTER_ARG ? PDF_STM_FILTER_LZW_ENC : PDF_STM_FILTER_LZW_DEC), filter_params, @@ -873,6 +905,11 @@ case JBIG2DEC_FILTER_ARG: { + filter_to_install = JBIG2DEC_FILTER_INSTALL; + break; + } + case JBIG2DEC_FILTER_INSTALL: + { if (jbig2dec_global_segments != NULL) { filter_params = pdf_hash_new (&error); @@ -963,9 +1000,19 @@ break; } - case AESENC_FILTER_ARG: /* Note that both ENC and DEC go here */ + case AESENC_FILTER_ARG: + { + filter_to_install = AESENC_FILTER_INSTALL; + break; + } case AESDEC_FILTER_ARG: { + filter_to_install = AESDEC_FILTER_INSTALL; + break; + } + case AESENC_FILTER_INSTALL: /* Note that both ENC and DEC go here */ + case AESDEC_FILTER_INSTALL: + { if (key == NULL) { fprintf (stderr, "You should specify a key for the AESv2 filter.\n"); @@ -1007,7 +1054,7 @@ } if (!pdf_stm_install_filter (stm, - (c == AESENC_FILTER_ARG ? + (ci == AESENC_FILTER_ARG ? PDF_STM_FILTER_AESV2_ENC : PDF_STM_FILTER_AESV2_DEC), filter_params, @@ -1025,9 +1072,19 @@ break; } - case V2ENC_FILTER_ARG: /* Note that both ENC and DEC go here */ + case V2ENC_FILTER_ARG: + { + filter_to_install = V2ENC_FILTER_INSTALL; + break; + } case V2DEC_FILTER_ARG: { + filter_to_install = V2DEC_FILTER_INSTALL; + break; + } + case V2ENC_FILTER_INSTALL: /* Note that both ENC and DEC go here */ + case V2DEC_FILTER_INSTALL: + { if (key == NULL) { fprintf (stderr, "You should specify a key for the V2 filter.\n"); @@ -1069,7 +1126,7 @@ } if (!pdf_stm_install_filter (stm, - (c == V2ENC_FILTER_ARG ? + (ci == V2ENC_FILTER_ARG ? PDF_STM_FILTER_V2_ENC : PDF_STM_FILTER_V2_DEC), filter_params, @@ -1097,13 +1154,33 @@ break; } } + + /* have we installed a delayed filter in this loop? */ + if (filter_to_install == ci) + { + /* no filter delayed anymore */ + filter_to_install = FILTER_INSTALL_NONE; + } + + /* next arg is a new filter and current filter is with args */ + if (!IS_FILTER_ARG(next_ci) && filter_to_install != FILTER_INSTALL_NONE) + { + /* do extra loop installing current filter */ + ci = filter_to_install; + } + else + { + ci = next_ci; + next_ci = getopt_long (argc, argv, "", GNU_longOptions, NULL); + } + + if (ci == -1 && filter_to_install != FILTER_INSTALL_NONE) + { + /* end of args and one filter still to install */ + ci = filter_to_install; + } } - while ((ci = getopt_long (argc, - argv, - "", - GNU_longOptions, - NULL)) != -1); - + while (ci != -1); } static pdf_fsys_file_t * # Begin bundle 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