-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hello,

I have fixed the args evaluation of pdf-filter and tested the filter
installation with something like this:
./pdf-filter --lzwenc --lzw-earlychange --lzwdec --lzwdec --lzwenc
- --lzw-earlychange  --md5enc  --lzwenc --lzw-earlychange

works great.

Noteworthy things changed:
all args of all filters must be collected in a test macro,
filters with possible args need a *_INSTALL switch,

Nothing changed for filters without args.

Regards,
Georg

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.17 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk4V4I8ACgkQ5sLITM1qIaK4JwCgjS+sJNH/1vNWr01gellrFjb2
KAMAn2/4wh81dChfal88yHs/fzmKPBwo
=Xx4+
-----END PGP SIGNATURE-----
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: georg.gottleu...@uni-ulm.de-20110707162129-\
#   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: aleksan...@gnu.org-20110707153208-8xqapk9muyhfvc0b
# 
# 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  <georg.gottleu...@uni-ulm.de>
+
+       utils: fix arg evaluation of pdf-filter
+       * utils/pdf-filter.c
+
 2011-07-07  Franck Lesage  <franck.pdf.de...@free.fr>
 
        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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

Reply via email to