pdf-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[pdf-devel] Improvements for pdf-filter


From: gerel
Subject: [pdf-devel] Improvements for pdf-filter
Date: Sun, 01 Feb 2009 14:16:45 -0800 (PST)

Hi hackers,

While on IRC, Beuc suggested that the pdf-filter utility returns an error when
using 1) no filter or 2) a non-implemented filter.
I thought it was a good idea, so I attach a patch for that feature here.

##
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# target_branch: file:///home/gerel/PROJECTS/libgnupdf/trunk/
# testament_sha1: 68781c0a97a54921c9da416a27a16548df5d22b8
# timestamp: 2009-02-01 18:55:00 -0300
# base_revision_id: address@hidden
# 
# Begin patch
=== modified file 'ChangeLog'
--- ChangeLog   2009-01-27 23:46:47 +0000
+++ ChangeLog   2009-02-01 21:54:46 +0000
@@ -1,3 +1,7 @@
+2009-02-01  Gerardo E. Gidoni  <address@hidden>
+
+       * utils/pdf-filter.c: added implemented filter's check.
+
 2009-01-28  Jose E. Marchesi  <address@hidden>
 
        * doc/gnupdf-hg.texi (Opaque Pointers): Opaque pointers documented

=== modified file 'utils/pdf-filter.c'
--- utils/pdf-filter.c  2009-01-27 20:59:40 +0000
+++ utils/pdf-filter.c  2009-02-01 21:54:46 +0000
@@ -1,4 +1,4 @@
-/* -*- mode: C -*- Time-stamp: "09/01/27 21:58:32 jemarch"
+/* -*- mode: C -*- Time-stamp: "2009-02-01 18:53:26 gerel"
  *
  *       File:         pdf-filter.c
  *       Date:         Tue Jul 10 18:42:07 2007
@@ -143,11 +143,12 @@
 
 static pdf_stm_t
 create_stream (int argc, char* argv[], pdf_bool_t* mode, pdf_status_t* 
last_ret,
-               pdf_bool_t * read_pdf_fsys, pdf_bool_t * write_pdf_fsys,
-               pdf_stm_t * fsys_stm);
+               int *optidx, pdf_bool_t * read_pdf_fsys,
+               pdf_bool_t * write_pdf_fsys, pdf_stm_t * fsys_stm);
 
-static void
-install_filters (int argc, char* argv[], pdf_stm_t stm, pdf_status_t ret);
+static pdf_bool_t
+install_filters (int argc, char* argv[], pdf_stm_t stm, pdf_status_t ret,
+                 int * optidx);
 
 static void
 process_stream (pdf_stm_t, pdf_bool_t mode, pdf_bool_t read_pdf_fsys,
@@ -160,14 +161,20 @@
 int
 main (int argc, char *argv[])
 {
+  int optidx;
   pdf_stm_t stm,fsys_stm;
   pdf_bool_t read_mode,read_pdf_fsys,write_pdf_fsys;
   pdf_status_t last_ret;
   pdf_status_t destroy_ret;
   
-  stm = create_stream (argc, argv, &read_mode, &last_ret, &read_pdf_fsys,
+  stm = create_stream (argc, argv, &read_mode,&last_ret,&optidx, 
&read_pdf_fsys,
                        &write_pdf_fsys, &fsys_stm);
-  install_filters (argc, argv, stm, last_ret);
+  if (!install_filters (argc, argv, stm, last_ret, &optidx))
+    {
+      fprintf (stderr,
+               "Error: At least one implemented filter must be specified.\n");
+      exit(1);
+    }
   process_stream (stm, read_mode, read_pdf_fsys,write_pdf_fsys, fsys_stm);
   destroy_ret = pdf_stm_destroy (stm);
   if ((destroy_ret != PDF_OK) && (destroy_ret != PDF_EEOF))
@@ -270,7 +277,7 @@
 
 static pdf_stm_t
 create_stream (int argc, char* argv[], pdf_bool_t* read_mode,
-              pdf_status_t* last_ret, pdf_bool_t * read_pdf_fsys,
+              pdf_status_t* last_ret, int *optidx, pdf_bool_t * read_pdf_fsys,
                pdf_bool_t * write_pdf_fsys, pdf_stm_t * fsys_stm)
 {
   char c;
@@ -290,7 +297,7 @@
                             argv,
                             "i:o:",
                             GNU_longOptions, 
-                            NULL)) != -1)
+                            optidx)) != -1)
     {
       c = ret;
       switch (c)
@@ -428,9 +435,12 @@
   return stm;
 }
 
-static void
-install_filters (int argc, char* argv[], pdf_stm_t stm, pdf_status_t ret)
+static pdf_bool_t
+install_filters (int argc, char* argv[], pdf_stm_t stm, pdf_status_t ret,
+                 int * opt_index)
 {
+  char not_impl_format[] = "warning: --%s not implemented.\n";
+  pdf_bool_t has_filters = PDF_FALSE;
   char c;
   pdf_hash_t filter_params;
   FILE *file;
@@ -470,7 +480,7 @@
                 pdf_error (status, stderr, "while installing the null filter");
                 exit (1);
               }
-
+            has_filters |= PDF_TRUE;
             break;
           }
         case ASCIIHEXDEC_FILTER_ARG:
@@ -490,7 +500,7 @@
                 pdf_error (status, stderr, "while installing the ASCII hex 
decoder filter");
                 exit (1);
               }
-
+            has_filters |= PDF_TRUE;
             break;
           }
         case ASCIIHEXENC_FILTER_ARG:
@@ -510,23 +520,27 @@
                 pdf_error (status, stderr, "while installing the ASCII hex 
encoder filter");
                 exit (1);
               }
-
+            has_filters |= PDF_TRUE;
             break;
           }
         case ASCII85DEC_FILTER_ARG:
           {
+            fprintf (stderr, not_impl_format, 
GNU_longOptions[*opt_index].name);
             break;
           }
         case ASCII85ENC_FILTER_ARG:
           {
+            fprintf (stderr, not_impl_format, 
GNU_longOptions[*opt_index].name);
             break;
           }
        case LZWENC_FILTER_ARG:
           {
+            fprintf (stderr, not_impl_format, 
GNU_longOptions[*opt_index].name);
             break;
           }
         case LZWDEC_FILTER_ARG:
           {
+            fprintf (stderr, not_impl_format, 
GNU_longOptions[*opt_index].name);
             break;
           }
 #ifdef HAVE_LIBZ
@@ -547,7 +561,7 @@
                 pdf_error (status, stderr, "while installing the flate decoder 
filter");
                 exit (1);
               }
-
+            has_filters |= PDF_TRUE;
             break;
           }
         case FLATEENC_FILTER_ARG:
@@ -567,7 +581,7 @@
                 pdf_error (status, stderr, "while installing the flate encoder 
filter");
                 exit (1);
               }
-
+            has_filters |= PDF_TRUE;
             break;
           }
 #endif /* HAVE_LIBZ */
@@ -589,7 +603,7 @@
                 pdf_error (status, stderr, "while installing the RunLength 
decoder filter");
                 exit (1);
               }
-
+            has_filters |= PDF_TRUE;
             break;
           }
         case RUNLENGTHENC_FILTER_ARG:
@@ -610,11 +624,12 @@
                 pdf_error (status, stderr, "while installing the RunLength 
encoder filter");
                 exit (1);
               }
-
+            has_filters |= PDF_TRUE;
             break;
           }
         case CCITTFAXDEC_FILTER_ARG:
           {
+            fprintf (stderr, not_impl_format, 
GNU_longOptions[*opt_index].name);
             break;
           }
 #ifdef HAVE_LIBJBIG2DEC
@@ -643,6 +658,7 @@
               }
 
             fclose (file);
+            has_filters |= PDF_TRUE;
             break;
           }
         case JBIG2DEC_FILTER_ARG:
@@ -675,16 +691,18 @@
                stream */
             jbig2dec_global_segments = NULL;
             jbig2dec_global_segments_size = 0;
-
+            has_filters |= PDF_TRUE;
             break;
           }
 #endif /* HAVE_LIBJBIG2DEC */
         case DCTDEC_FILTER_ARG:
           {
+            fprintf (stderr, not_impl_format, 
GNU_longOptions[*opt_index].name);
             break;
           }
         case JXPDEC_FILTER_ARG:
           {
+            fprintf (stderr, not_impl_format, 
GNU_longOptions[*opt_index].name);
             break;
           }
         case PREDENC_FILTER_ARG:
@@ -695,6 +713,7 @@
                args.pred_colors,
                args.pred_bpc,
                args.pred_columns); */
+            fprintf (stderr, not_impl_format, 
GNU_longOptions[*opt_index].name);
             break;
           }
         case PREDDEC_FILTER_ARG:
@@ -705,6 +724,7 @@
                args.pred_colors,
                args.pred_bpc,
                args.pred_columns); */
+            fprintf (stderr, not_impl_format, 
GNU_longOptions[*opt_index].name);
             break;
           }
         case MD5ENC_FILTER_ARG:
@@ -725,7 +745,7 @@
                 pdf_error (status, stderr, "while installing the MD5 encoder 
filter");
                 exit (1);
               }
-
+            has_filters |= PDF_TRUE;
             break;
           }
         case KEY_ARG:
@@ -737,6 +757,7 @@
               }
 
             key = strdup (optarg);
+            has_filters |= PDF_TRUE;
             break;
           }
         case AESENC_FILTER_ARG:
@@ -769,7 +790,7 @@
                 pdf_error (status, stderr, "while installing the AESV2 encoder 
filter");
                 exit (1);
               }
-
+            has_filters |= PDF_TRUE;
             break;
           }
         case AESDEC_FILTER_ARG:
@@ -802,7 +823,7 @@
                 pdf_error (status, stderr, "while installing the AESV2 decoder 
filter");
                 exit (1);
               }
-
+            has_filters |= PDF_TRUE;
             break;
           }
         case V2ENC_FILTER_ARG:
@@ -835,7 +856,7 @@
                 pdf_error (status, stderr, "while installing the V2 encoder 
filter");
                 exit (1);
               }
-
+            has_filters |= PDF_TRUE;
             break;
           }
         case V2DEC_FILTER_ARG:
@@ -868,7 +889,7 @@
                 pdf_error (status, stderr, "while installing the V2 decoder 
filter");
                 exit (1);
               }
-
+            has_filters |= PDF_TRUE;
             break;
           }
          /* FILTER OPTIONS: */
@@ -887,8 +908,9 @@
                             argv,
                             "",
                             GNU_longOptions, 
-                            NULL)) != -1);
+                            opt_index)) != -1);
 
+  return has_filters;
 }
 
 static

# Begin bundle
IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWX06nvAABGDfgHh6c/f//3+F
3g6////+YAePn3x7vSmgdA69AGNhIB4SJIpjUNDU21NqeoxT9FNMIMCDCeoAYIwmg0KMm1U/U9Gq
MgZNABpoaBgTEAGgGgDjI0yYmgyZMJpkDIaA0Bpk0MAJoDDVPyQTKmgHqPU9EAAAAAAAAAARVMlN
Myg9IANGgDTQAAADQGjTIAkkAQE00EaNJgTApP1PSPQptTQxBj1R6mnqb1S4klaLQM1k8tMpXZrF
T5OkkpmhtIP3i56H57LLls/eYCt52TUfFlO5OTLFrLrawihIgdPVGqIN0kEzWOlJz3IaU+q91Y3M
9pfMayhtQCUjaMMyEvKnAaCxZ9cdte1xqREoA4NqaYrtoTLkFbdUQJ3Vm6IYV2PxHPLIC2XEJysF
uYe1NL2g9KMQyZRuJ5kTKAFLpMigZsqCU9PM3SagSehGKgaJFzkQQ0VAwLjRSTc7MOuoZVlAEMys
ADZhhCAsCiwn8aS5BkL2r/lKvBYOU5ThKqOZRBjznmICVswNGaoYFMiRIfEOW58okRSKpKJ58/Fl
l1v3Nj6P9Id5p6ndNm5YsImx1zcLQs6u7gkNmu6mktTx3MrIWR4UE5h+NBcsYPBsD9UDjlJNJfS5
yDeDYSQQHEuwnjPoLrV2ncbD2wM3l2gchSJnF0gcx8/AOcy6Ob8a17jcHAg8ElwX1tenBdMxgnhZ
ClW72rBqM3GpbUHmnhCnc7QHDCb9saWFiOIZJbxgLEQHjgIkCdrikGLR9z09NoLHmIyAwT+I8tmS
s0OSSum4Ks5jBns1kIuAtNChiS1UbMEUAa3ahClRHipvD2xUnvYHFJMMFwDwMHqtXK0bywdyMDUU
zAcYkVLajTbi8GviayazRvzchRAwCcnPLQK8AQe0giPfmz8R0vKtMaofaNOLnaxnbMyaMCY4tHAY
BNPw2SlMfPMhCJOEymTIuxtcNW0CxVsNb5v4Sy+PWBLiHkjsMLqpYPtfg/PGULFC5QmQYeBAeaqN
GQGqoSJBHyDAyfIbPZsVpuGNAdoXZEHWFg53AwqeytMb6mCu0L0UgIVGZEzQIMFEAVBXkFaKDUau
dpUC6M3ycQoBTTN+LijF83viGqF0KmkwP2IVYLTQDCjhffgzyhbLGIQMLSAzKTOpRDiJcA+kFRrf
+g6AXhkbWKEChcaQNo+OMrn5aHOk6qviDOJz4iGVHU0kn6mLRoksmqWnY+bK2b4lxg5CawZSjeTw
p7MZ3lSekhFxMxIkC0Dq19vs38ks9WLhrNIMmB+CvRHxN3aDgYGYYGE3Wxj9RvegxNbLD3MjMPyS
TpqZfoIgddVZCkyvS4V7M3ycTZz8uhDIP84x0szJjY+f+gB3z/ZJSj9PQAkpbm+EMVCUAvK3Kasb
yt1DGQzeM3TrdVDaAeYuFUQDCHBlxJrBIZG1ByA6EFPjcb2KKDKVT4MEBw3cUX7gMuP4+B5niaD1
7cA8ON0vExO5H3GtS2gnEMg+DGtD70vkXi1yQFm1UQnWI/j7gPebg8jjDzOEeQIG/fE95lU7BSwD
xARwnt8AY+INify5SByb0U87sUX+yLh4wGFTqNJA+4vLwmDZlgrQidAw4/ubB28RRI6+kZkI1WUZ
LmJaeZBa0D5EeEzHYNNuwouM9k2yZ9oyHmIdLQZGTyCtMND+Y3HPVCtPvRcD8Q8U4VUrsnfbUF3R
EQBGQYliqkopHpJEIuEaorSNuNo8kAUlRfIVZQpx5jEWIzWh7YIwzQgY73agyEgm3aTeAyxgIIQq
G0DC+Q0M27f63SQMveCS77ga9jFjF1QjP1Uk70isDSqARjkZdCQ58kdSVa0hPns8oykij1QL8Skl
iskVMKfxgXS/9PeO0CHbpQ2oL0HKGpB8qvaJ4c57gN3My4A7gPrA2Ir4DBge14i5fUIvFpOnvE6A
TD7aFqCRNkhV+HfTaj+ADKqNiFBBRk8O/igRJhw5YZWG1UEuaDpV9fUfBkvigkqwAISTOGQPTeVJ
KQCKF8JQkgkjJIPCrB2LNBU78orEw6FRDB3qSE0qHEMyUr1tCvCMIkJc5MhWqjoxdtTR8Q1FTl5e
QOt8A8G5gY+jKEaLrtBwlh16BE7xpCD1QcAROU5xmNghws5uZG50RcJkbeTgDZMFNKQ9No+pxkyf
0F6SmBSmoR23yQuo2UhOYZ1EfqwkVYzBygHr6uSX5B1Dp2ja0F6AfLBbzmDQuNAxGQbLClQsWuHA
VXuEUcyZXIZpb0PVBkxVjB+f6PhANDXqaBjvzepVEcCRVfYDAhrJSCaWbAjQDPEViVS1momPQWoU
039nKTBbhVQIJLo7s64hDqv0lQYqrrkH5FppYAvdmNnBmBui0khEUZ43EQ5CGjTiVDv6BER/4u5I
pwoSD6dT3gA=

###

cheers,
-gerel




reply via email to

[Prev in Thread] Current Thread [Next in Thread]