Hi Brad. === modified file 'src/Makefile.am' [...]
-AM_CFLAGS = -Wall -fno-strict-aliasing $(LIBGCRYPT_CFLAGS) +AM_CFLAGS = -Wall -fno-strict-aliasing -Wconversion $(LIBGCRYPT_CFLAGS) The -Wconversion option makes gcc to generate a lot of warnings in both header files included from gnulib and our source code. Is there a particular reason to add that switch? Regarding the cache size, the ideal situation is for the filters to be able to work with any >0 cache size in the stm. The following merge directive (not applied in the trunk) adds support for the lzw filter in the pdf-filter utility. You can merge it into your patch if you want. For testing purpose, please note that the --cache=N option can be used to set the size of the stream cache, and the usage of a reading stm (instead of the default writing stm) can be requested with the --readmode parameter. # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: [email protected] # target_branch: sftp://[email protected]/srv/bzr/pdf\ # /libgnupdf/branches/trunk/ # testament_sha1: a016490579ace086a16b5d016c051b049b0bcf17 # timestamp: 2009-06-24 20:23:39 +0200 # base_revision_id: [email protected] # # Begin patch === modified file 'ChangeLog' --- ChangeLog 2009-06-22 11:20:04 +0000 +++ ChangeLog 2009-06-24 18:23:24 +0000 @@ -1,3 +1,14 @@ +2009-06-24 Jose E. Marchesi <[email protected]> + + * src/base/pdf-hash-helper.h: Added functions 'pdf_hash_add_bool' + and 'pdf_hash_get_bool'. + + * src/base/pdf-hash-helper.c: Likewise. + + * utils/pdf-filter.h: Added support for the LZW filters. + + * utils/pdf-filter.c: Likewise. + 2009-06-22 Brad Hards <[email protected]> * src/base/pdf-text.c (pdf_text_dup): Protect against NULL arg. === modified file 'src/base/pdf-hash-helper.c' --- src/base/pdf-hash-helper.c 2009-01-27 20:59:40 +0000 +++ src/base/pdf-hash-helper.c 2009-06-24 18:23:24 +0000 @@ -1,4 +1,4 @@ -/* -*- mode: C -*- Time-stamp: "09/01/27 21:37:10 jemarch" +/* -*- mode: C -*- Time-stamp: "09/06/24 20:13:29 jemarch" * * File: pdf-hash-helper.c * Date: Thu Jul 24 21:05:05 2008 @@ -97,6 +97,37 @@ } pdf_status_t +pdf_hash_add_bool (pdf_hash_t table, const char *key, const pdf_bool_t elt) +{ + pdf_bool_t *vbool; + + vbool = pdf_alloc (sizeof(pdf_bool_t)); + if (vbool == NULL) + { + return PDF_ERROR; + } + + *vbool = elt; + + return (pdf_hash_add (table, key, vbool, pdf_dealloc)); +} + +pdf_status_t +pdf_hash_get_bool (pdf_hash_t table, const char *key, pdf_bool_t *elt) +{ + pdf_status_t ret; + pdf_bool_t *vbool; + + ret = pdf_hash_get (table, key, (const void **) &vbool); + if (ret == PDF_OK) + { + *elt = *vbool; + } + + return ret; +} + +pdf_status_t pdf_hash_add_size (pdf_hash_t table, const char *key, const pdf_size_t elt) { pdf_size_t *size; === modified file 'src/base/pdf-hash-helper.h' --- src/base/pdf-hash-helper.h 2008-12-28 01:13:47 +0000 +++ src/base/pdf-hash-helper.h 2009-06-24 18:23:24 +0000 @@ -1,4 +1,4 @@ -/* -*- mode: C -*- Time-stamp: "08/12/28 02:10:50 jemarch" +/* -*- mode: C -*- Time-stamp: "09/06/24 20:13:57 jemarch" * * File: pdf-hash-helper.h * Date: Thu Jul 24 21:05:05 2008 @@ -73,6 +73,12 @@ pdf_hash_get_size (pdf_hash_t table, const char *key, pdf_size_t *elt); pdf_status_t +pdf_hash_add_bool (pdf_hash_t table, const char *key, const pdf_bool_t elt); + +pdf_status_t +pdf_hash_get_bool (pdf_hash_t table, const char *key, pdf_bool_t *elt); + +pdf_status_t pdf_hash_add_string (pdf_hash_t table, const char *key, const pdf_char_t *elt); pdf_status_t === modified file 'utils/pdf-filter.c' --- utils/pdf-filter.c 2009-05-07 09:03:31 +0000 +++ utils/pdf-filter.c 2009-06-24 18:23:24 +0000 @@ -1,4 +1,4 @@ -/* -*- mode: C -*- Time-stamp: "09/05/07 10:55:00 jemarch" +/* -*- mode: C -*- Time-stamp: "09/06/24 20:14:29 jemarch" * * File: pdf-filter.c * Date: Tue Jul 10 18:42:07 2007 @@ -58,11 +58,12 @@ {"null", no_argument, NULL, NULL_FILTER_ARG}, {"ahexdec", no_argument, NULL, ASCIIHEXDEC_FILTER_ARG}, {"ahexenc", no_argument, NULL, ASCIIHEXENC_FILTER_ARG}, + {"lzwenc", no_argument, NULL, LZWENC_FILTER_ARG}, + {"lzwdec", no_argument, NULL, LZWDEC_FILTER_ARG}, + {"lzw-earlychange", no_argument, NULL, LZW_EARLYCHANGE_ARG}, #if 0 {"a85dec", no_argument, NULL, ASCII85DEC_FILTER_ARG}, {"a85enc", no_argument, NULL, ASCII85ENC_FILTER_ARG}, - {"lzwenc", no_argument, NULL, LZWENC_FILTER_ARG}, - {"lzwdec", no_argument, NULL, LZWDEC_FILTER_ARG}, {"cfaxdec", no_argument, NULL, CCITTFAXDEC_FILTER_ARG}, {"jxpdec", no_argument, NULL, JXPDEC_FILTER_ARG}, {"predenc", no_argument, NULL, PREDENC_FILTER_ARG}, @@ -108,12 +109,12 @@ available filters\n\ --null use the NULL filter\n\ --ahexdec use the ASCII Hex decoder filter\n\ - --ahexenc use the ASCII Hex encoder filter\n" + --ahexenc use the ASCII Hex encoder filter\n\ + --lzwenc use the LZW encoder filter\n\ + --lzwdec use the LZW decoder filter\n" #if 0 " --a85dec use the ASCII 85 decoder filter\n\ --a85enc use the ASCII 85 encoder filter\n\ - --lzwenc use the LZW encoder filter\n\ - --lzwdec use the LZW decoder filter\n --jxpdec use the JXP decoder filter\n\ --predenc use the predictor encoder filter\n\ --preddec use the predictor decoder filter\n" @@ -139,14 +140,15 @@ --version show pdf_filter version and exit\n\ \nfilter properties\n" #if 0 -" --lzw-earlychange toggles earlychange for next lzw filters\n\ +" --preddec-type=NUM code for next preddec filters type\n\ --predenc-type=NUM code for next predenc filters type\n\ --pred-colors=NUM next predictors colors per sample\n\ --pred-bpc=NUM next predictors bits per color component\n\ --pred-columns=NUM next predictors number of samples per row\n" #endif /* 0 */ -" --jbig2dec-globals=FILE file containing global segments\n\ +" --lzw-earlychange toggles earlychange for next lzw filters\n\ + --jbig2dec-globals=FILE file containing global segments\n\ "; char *pdf_filter_help_msg = ""; @@ -448,6 +450,7 @@ char *key = NULL; pdf_size_t jbig2dec_global_segments_size = 0; pdf_status_t status; + pdf_bool_t lzw_earlychange = PDF_FALSE; /* Initialize the crypt module */ if (pdf_crypt_init () != PDF_OK) @@ -554,14 +557,6 @@ { break; } - case LZWENC_FILTER_ARG: - { - break; - } - case LZWDEC_FILTER_ARG: - { - break; - } case CCITTFAXDEC_FILTER_ARG: { break; @@ -591,6 +586,57 @@ break; } #endif /* 0 */ + case LZW_EARLYCHANGE_ARG: + { + lzw_earlychange = PDF_TRUE; + break; + } + case LZWENC_FILTER_ARG: + { + ret = pdf_hash_new (NULL, &filter_params); + if (ret != PDF_OK) + { + pdf_error (ret, stderr, "while creating the lzwenc filter parameters hash table"); + exit (1); + } + + pdf_hash_add_bool (filter_params, "EarlyChange", lzw_earlychange); + + status = pdf_stm_install_filter (stm, + PDF_STM_FILTER_LZW_ENC, + filter_params); + + if (status != PDF_OK) + { + pdf_error (status, stderr, "while creating the LZW encoder filter"); + exit (1); + } + + break; + } + case LZWDEC_FILTER_ARG: + { + ret = pdf_hash_new (NULL, &filter_params); + if (ret != PDF_OK) + { + pdf_error (ret, stderr, "while creating the lzwdec filter parameters hash table"); + exit (1); + } + + pdf_hash_add_bool (filter_params, "EarlyChange", lzw_earlychange); + + status = pdf_stm_install_filter (stm, + PDF_STM_FILTER_LZW_DEC, + filter_params); + + if (status != PDF_OK) + { + pdf_error (status, stderr, "while creating the LZW decoder filter"); + exit (1); + } + + break; + } #ifdef HAVE_LIBZ case FLATEDEC_FILTER_ARG: { === modified file 'utils/pdf-filter.h' --- utils/pdf-filter.h 2009-05-06 17:54:48 +0000 +++ utils/pdf-filter.h 2009-06-24 18:23:24 +0000 @@ -1,4 +1,4 @@ -/* -*- mode: C -*- Time-stamp: "09/05/06 19:46:33 jemarch" +/* -*- mode: C -*- Time-stamp: "09/06/24 19:37:20 jemarch" * * File: pdf-filter.h * Date: Tue Jul 10 18:40:55 2007 @@ -46,8 +46,6 @@ #if 0 ASCII85DEC_FILTER_ARG, ASCII85ENC_FILTER_ARG, - LZWENC_FILTER_ARG, - LZWDEC_FILTER_ARG, CCITTFAXDEC_FILTER_ARG, JXPDEC_FILTER_ARG, PREDENC_FILTER_ARG, @@ -67,6 +65,9 @@ JBIG2DEC_GLOBAL_SEGMENTS_ARG, JBIG2DEC_PAGE_SIZE, #endif /* HAVE_LIBJBIG2DEC */ + LZWENC_FILTER_ARG, + LZWDEC_FILTER_ARG, + LZW_EARLYCHANGE_ARG, MD5ENC_FILTER_ARG, KEY_ARG, AESENC_FILTER_ARG, # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWRLKrJoABgN/gFV0gMBx9/// f//etL////pgCv31SUAAAACKqoClKoUFVQEcZME0MhkZGTQ0AaDIwgGg0aZDENADjJgmhkMjIyaG gDQZGEA0GjTIYhoAcZME0MhkZGTQ0AaDIwgGg0aZDENABIigSYmp6mjzSZI9I9TQNPUyGhkGgAA0 NDTIcZME0MhkZGTQ0AaDIwgGg0aZDENABJIBAExARo00RMmIwmTInpD0TExAek0bKXUkqxNhg5sW 01BoGMbG9mqnWRZwzVXBkOM4tHdz594Yf2v7mttG7C0i8+JGrwKAZjDEWGGKA8CQsCizCph0qmx1 BF9owpxDcNS5vOjVuzTUlWwaYuB7JDnEyjQD5GI1+Aizmi8lHQmE9YXxhgGgBYmAgpSS3GAfD3qA oAapZ9NWEK6fstDGBVfo+VQchV+DW/UB9l/DDBAWXJwhEkAe49PsD0BBGgqhdrAFuQFUEXo4went 0O4v5M7jwmutyYhSChVVKkZwnAcxB03uaTTjJ6e3W1JxLh4L2wYyFrkROYTPPVCG8sRERFBtGSV0 YS3gqB8BTR+RbEm8/eKN5xRDlCf68fh2e+4zHzls38WyIjFpoE7WDGKZODTSBcVDOenMM+DiKO1j fzKBjr/UrCYjDRma9w8qLa5uCgXd87s9Juf4OXJuboV8Ru41RIT7yN3vrpXGms2BWNmHASlx63wG EvEmEOFixxGBYsCPw/Fgr2nS1/MwHjjUHUFviLQ/iHrCx/eA9LhHn+9j9jzDy86A1nysslmDxjJD jKZEfgBchd28IDBIqNh2jDEDzFbkB3+2s5i57mDxnJFvc4Lg65wEmT7F5hYhE7PVnA9BfLoA8DAN +6EeMNA1hwFoX+TovR9piOIg9Z0EzJeQYVbLRuGecAhCsiO3CZCCNmKgOAgRGFBz6/2IEi0kKb9/ hCkwRWF4xUVBFxYDwXMGewIjKxYCtkaF5FcvOJbh1VQairDMVrDX3vE/GLx7KYT+4JxE8wJXsQbA TNY5V0HRsgapO1cMMeu3ZQt/AuZfSOrFCDM0P+ugXyzGn8LsyHsxEsy87LoBrVz4Xi1mFQxoWlZ4 QnvrUel0q2jt6BbbaopLmyEUAhUn5AVGGtqrUPTxKokGVsyrqDQSqErgqN07+BZFR2ysOk1WlZeY lT7SoDUDF5WYDj5JHarqkXGNLNmgrqBSZIcZtVcSQEiZR46scOU+FZ1Ge8opjihNQOkoQImscewn 3BT43YzRbHeV4xEsh2kxbglIQVEJNIMDMfAyMjXpWteGOpzEOofY1xwsJ5qooEINgXlcxt4tC8kc ugStnErGqMXxe2vODNe7QdUzjTYUeA4oWKqhiQWot2K2TOLdVWRnK1r2Il+753xaJa2pn7Yof2Ff ZGKQSJXjTNhlVv0ODpybmKuwwGMtoOJbd+7IvSoYEiwqIaJPhbEdJoXhbFKZODysfAtjEKEDIpUN kVMYF48nIopOCKXVUYFp01DjeL4hlxLLr63M+CUHORRxqFiwamgUMyglgZDioY43bzxOK9+Y/ZSh iRLipeIwqpY+6F9USt2MhkRGQjdvzqLErCWRAdYRtU6qnvtOtS0NhoRIzL1zPnXxDQ2hmZLJteut +p7lizYTDWOE5KFBYAS3gzd16ZP3PAqKAVI2dnbKWlla4WRwN/IIAyWmJj1CIbHqbBEwZkMkGKs7 /W6m4GmiCa5LHE5wF9+JcyDGry6BYxtiZMg+PlXJEjbwF657VyCPsrKvhJW/sDqJvgB5FYP6mAkI 7RYJl7ld+TtiCbnKjCKrnC5IAuKtGhivtNluEgxhYo9I1UijkvkGukChOjAPuoMBtHUCeQvigJAj rDRnGXaxsbNdGIxi5igkDZF4eJbQdgblBvgweQkDgCB0Ypgce4cBExFHU+SO+yKJQC4k6Qi7SORe QYuHvHAXCDvm+SQM3TePXvlhcB6ys9XaLZs9mscB7qor2/a8pCHAUyKGS/PaC+1g33gcUhcxyFau 8XJaK8KhCooIuSPd/M4kzYdZmGIRXT2npPaQOg1FY8+7XWBrFtTDIYD7bP1WGtsPaJD3/eaPfGAP 4molcYmwgbLr9hIsOwoe/rbaPLTA7T8eBkGjJI5+JLjn9ARLJTErGZiPwYX1sh+bbZzXhEunYeI3 m8zNpYk8mk7YWArUOLSzUL1kDqDl5VdmVkUU74dwkiwYB7C8QRwEvau13Boa3REySpJQxQbYMhDM heyEDPxuy4d08jDwDg4o1YCxOGCKmfqQwGXYq9N5uc4tiEQvGTN4TfDym433FwH6XsMfMkL0cE9b FYHzpkNK3GYUMOk002004mEjVZIdEIC2oLeZqLFYZMLcw5PHJJ5/U/GX7BC1IiKdQuPb16kDuo5H WdR6ig8mkg8BA7SIxtFjcKYHMS836I7SM6NgYbWoMYyF6jlNJJfaMJrb09MVKMkZcoyePSDTqEvA JPmg8QzAMZBPnZlw8qEeTSxdc2Q3BQEWdmg6dCSKQTYAw8o02K8VhgAOkO+BvhsGGGma5CVYeMI9 yechB0lnV3C8es6enIFM+k0YbYL5PsM9gMkpgwhe4HEzwncBnfEN153/BKraCnwNYLyhveoi+fTa LprD39Z6mPpHJMjF54xLkGHM2Lb4y36AbtDgBoZIKMH9welaKViGBqCMQDEdyxHBaJSVmkRUFUC2 3iFDo868KDbnZ0u8LD2e5zuRqYuSFRWheLFY9XVGI0g5V2hFHWJhdp3To03O/4/sUBwngwVC9YYh XuEnLU+gHMSpD5uRXCQpgtrpxUQHnprSe4cnsI2IQ5fL3leGwMEZlPHE4c0rgF7KWgvM5zAdwCsQ XlQGxCHL2J6+JZbijRbhMHLlnSy7NDdMQ3AGl74RoO6fimCIKAkIVVbbbdouAGAZLkvWE8RvliH0 BtKByMwZDnOHMcAYg3estEpHSqArAjSQhKFnDNKFaY9chQve2nByNbJ+ArkIqV9jkD15SBuXZvnu DYEgVBpsqhVnXZRSZhSZiWqKxuXQjGWF9SmaBmrscJDCvE4KyIJ6Nn2FiVCRggzB0jcMURIHDiwB 40h4SKwZwWYvDAIGJ43PGQ10h7DlJOY6XUHqATEUhaK4jWJDEqJLBkH1FY4oIZgM7DMHlodNofuw FwfmyoyWVqokdkSKEbjnDRNbKxZCXw+J3zUfZwu9Hsj0etz1kvbrBecUcxenjE9Cz4JyXeZZhEkr PI9jze16PY5OBcDqEum+AvqH7g7o3EGS75jzcJZpQrZC+v4HxXnE5OgIIgfGv+LuSKcKEgJZVZNA
