[Top][All Lists]
[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
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
pwoSD6dT3gA=
###
cheers,
-gerel
- [pdf-devel] Improvements for pdf-filter,
gerel <=