Hi all, I attach a patch for task #87, tested with null filter and seems to work ok.
## # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: [email protected] # target_branch: file:///home/gerel/PROJECTS/libgnupdf/trunk/ # testament_sha1: c271e74e7724f89cb47855ddb6bcd4e1ddf7efda # timestamp: 2009-01-24 17:38:53 -0300 # base_revision_id: [email protected] # # Begin patch === modified file 'ChangeLog' --- ChangeLog 2009-01-19 22:29:21 +0000 +++ ChangeLog 2009-01-24 20:38:14 +0000 @@ -1,3 +1,9 @@ +2009-01-24 Gerardo E. Gidoni <[email protected]> + + * utils/pdf-filter.c: added --input-file and --output-file options. + + * utils/pdf-filter.h: same. + 2009-01-19 Jose E. Marchesi <[email protected]> * src/base/pdf-types.h: Progress monitor data types implemented. === modified file 'utils/pdf-filter.c' --- utils/pdf-filter.c 2009-01-13 21:56:12 +0000 +++ utils/pdf-filter.c 2009-01-24 20:38:14 +0000 @@ -1,4 +1,4 @@ -/* -*- mode: C -*- Time-stamp: "09/01/13 22:30:03 jemarch" +/* -*- mode: C -*- Time-stamp: "2009-01-24 17:33:37 gerel" * * File: pdf-filter.c * Date: Tue Jul 10 18:42:07 2007 @@ -52,6 +52,8 @@ {"usage", no_argument, NULL, USAGE_ARG}, {"version", no_argument, NULL, VERSION_ARG}, {"readmode", no_argument, NULL, READ_ARG}, + {"input-file", required_argument, NULL, INFILE_ARG}, + {"output-file", required_argument, NULL, OUTFILE_ARG}, {"cache", required_argument, NULL, CACHE_ARG}, {"null", no_argument, NULL, NULL_FILTER_ARG}, {"ahexdec", no_argument, NULL, ASCIIHEXDEC_FILTER_ARG}, @@ -96,6 +98,8 @@ available options\n\ --readmode test the stream in read mode instead\n\ of write mode.\n\ + -i FILE, --input-file=FILE Use a given file as the input.\n\ + -o FILE, --output-file=FILE Use a given file as the output.\n\ --cache=NUM set the stream cache size.\n\n\ available filters\n\ --null use the NULL filter\n\ @@ -138,31 +142,44 @@ char *pdf_filter_help_msg = ""; static pdf_stm_t -create_stream (int argc, char* argv[], pdf_bool_t* mode, pdf_status_t* last_ret); +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); static void install_filters (int argc, char* argv[], pdf_stm_t stm, pdf_status_t ret); static void -process_stream (pdf_stm_t, pdf_bool_t mode); +process_stream (pdf_stm_t, pdf_bool_t mode, pdf_bool_t read_pdf_fsys, + pdf_bool_t write_pdf_fsys, pdf_stm_t fsys_stm); + +static +open_file (pdf_char_t * name, pdf_fsys_file_t * file, + enum pdf_fsys_file_mode_e mode); int main (int argc, char *argv[]) { - pdf_stm_t stm; - pdf_bool_t read_mode; + pdf_stm_t stm,fsys_stm; + pdf_bool_t read_mode,read_pdf_fsys,write_pdf_fsys; pdf_status_t last_ret; - stm = create_stream (argc, argv, &read_mode, &last_ret); + stm = create_stream (argc, argv, &read_mode, &last_ret, &read_pdf_fsys, + &write_pdf_fsys, &fsys_stm); install_filters (argc, argv, stm, last_ret); - process_stream (stm, read_mode); + process_stream (stm, read_mode, read_pdf_fsys,write_pdf_fsys, fsys_stm); pdf_stm_destroy (stm); + if (read_pdf_fsys || write_pdf_fsys) + { + pdf_stm_destroy (fsys_stm); + } return 0; } static void -process_stream (pdf_stm_t stm, pdf_bool_t read_mode) +process_stream (pdf_stm_t stm, pdf_bool_t read_mode, pdf_bool_t read_pdf_fsys, + pdf_bool_t write_pdf_fsys, pdf_stm_t fsys_stm) { #define BUF_SIZE 256 @@ -174,15 +191,27 @@ if (read_mode) { /* Read from the buffer which will process anything on stdin - and push to stdout */ + and push to stdout */ do { ret = pdf_stm_read (stm, buf, BUF_SIZE, &read_bytes); - if(fwrite (buf, 1, read_bytes, stdout) != read_bytes) - { - fprintf(stderr,"fwrite failed (%ld)", (long)read_bytes); - } - } + if (write_pdf_fsys) + { + ret = pdf_stm_write (fsys_stm, buf, read_bytes, &written_bytes); + if (ret != PDF_OK) + { + pdf_error (ret, stderr, "while writing to stream"); + exit (1); + } + } + else + { + if(fwrite (buf, 1, read_bytes, stdout) != read_bytes) + { + fprintf(stderr,"fwrite failed (%ld)", (long)read_bytes); + } + } + } while (read_bytes == BUF_SIZE); } else @@ -190,25 +219,35 @@ /* Write stdin into the write stream, which will be transparently writting the output to stdout. */ do - { - read_bytes = fread (buf, 1, BUF_SIZE, stdin); - ret = pdf_stm_write (stm, buf, read_bytes, &written_bytes); - } + { + if (read_pdf_fsys) + { + ret = pdf_stm_read (fsys_stm, buf, BUF_SIZE, &read_bytes); + } + else + { + read_bytes = fread (buf, 1, BUF_SIZE, stdin); + } + ret = pdf_stm_write (stm, buf, read_bytes, &written_bytes); + } while (read_bytes == BUF_SIZE); } - + #undef BUF_SIZE } static pdf_stm_t create_stream (int argc, char* argv[], pdf_bool_t* read_mode, - pdf_status_t* last_ret) + pdf_status_t* last_ret, pdf_bool_t * read_pdf_fsys, + pdf_bool_t * write_pdf_fsys, pdf_stm_t * fsys_stm) { char c; pdf_status_t ret; pdf_size_t cache_size; pdf_stm_t stm; pdf_bool_t finish; + pdf_char_t *infile_name=NULL,*outfile_name=NULL; + pdf_fsys_file_t infile, outfile; finish = PDF_FALSE; cache_size = 0; @@ -217,7 +256,7 @@ while (!finish && (ret = getopt_long (argc, argv, - "", + "i:o:", GNU_longOptions, NULL)) != -1) { @@ -253,6 +292,20 @@ cache_size = atoi (optarg); break; } + case INFILE_ARG: + case 'i': + { + infile_name = pdf_alloc (strlen(optarg)+1); + strcpy (infile_name, optarg); + break; + } + case OUTFILE_ARG: + case 'o': + { + outfile_name = pdf_alloc (strlen(optarg)+1); + strcpy (outfile_name, optarg); + break; + } case '?': default: { @@ -269,16 +322,75 @@ */ *last_ret = ret; - ret = pdf_stm_cfile_new (*read_mode ? stdin : stdout, + if (pdf_text_init() != PDF_OK) + { + fprintf (stderr, "Error initializing the text module.\n"); + exit(1); + } + + *read_pdf_fsys = PDF_FALSE; + *write_pdf_fsys = PDF_FALSE; + if (infile_name == NULL && outfile_name == NULL) + { + ret = pdf_stm_cfile_new (*read_mode ? stdin : stdout, 0, cache_size, *read_mode ? PDF_STM_READ : PDF_STM_WRITE, &stm); - - if (ret != PDF_OK) + if (ret != PDF_OK) + { + pdf_error (ret, stderr, "while creating the write stream"); + exit (1); + } + } + else { - pdf_error (ret, stderr, "while creating the write stream"); - exit (1); + if (infile_name != NULL) + { + open_file (infile_name, &infile, PDF_FSYS_OPEN_MODE_READ); + *read_pdf_fsys = PDF_TRUE; + ret = pdf_stm_file_new (infile,0,cache_size,PDF_STM_READ, + *read_mode ? &stm : fsys_stm); + if (ret != PDF_OK) + { + pdf_error (ret, stderr, "while creating the read stream"); + exit (1); + } + } + else + { + ret = pdf_stm_cfile_new (stdin,0,cache_size,PDF_STM_READ, + *read_mode ? &stm : fsys_stm); + if (ret != PDF_OK) + { + pdf_error (ret, stderr, "while creating the read stream"); + exit (1); + } + } + + if (outfile_name != NULL) + { + open_file (outfile_name, &outfile, PDF_FSYS_OPEN_MODE_WRITE); + *write_pdf_fsys = PDF_TRUE; + ret = pdf_stm_file_new (outfile,0,cache_size,PDF_STM_WRITE, + *read_mode ? fsys_stm : &stm); + if (ret != PDF_OK) + { + pdf_error (ret, stderr, "while creating the write stream"); + exit (1); + } + } + else + { + ret = pdf_stm_cfile_new (stdout,0,cache_size,PDF_STM_WRITE, + *read_mode ? fsys_stm : &stm); + if (ret != PDF_OK) + { + pdf_error (ret, stderr, "while creating the write stream"); + exit (1); + } + + } } return stm; @@ -747,4 +859,28 @@ } +static +open_file (pdf_char_t * name, pdf_fsys_file_t * file, + enum pdf_fsys_file_mode_e mode) +{ + pdf_status_t ret; + pdf_text_t path; + pdf_char_t * rem; + pdf_size_t rem_len; + + ret = pdf_text_new_from_pdf_string(name, strlen(name), &rem, &rem_len, &path); + if (ret != PDF_OK) + { + pdf_error (ret, stderr, "while creating pdf text path"); + exit (1); + } + + ret = pdf_fsys_file_open (NULL, path, mode, file); + if (ret != PDF_OK) + { + pdf_error (ret, stderr, "while opening file '%s'", name); + exit (1); + } +} + /* End of pdf_filter.c */ === modified file 'utils/pdf-filter.h' --- utils/pdf-filter.h 2008-12-27 19:54:54 +0000 +++ utils/pdf-filter.h 2009-01-24 20:38:14 +0000 @@ -1,4 +1,4 @@ -/* -*- mode: C -*- Time-stamp: "08/12/27 20:11:16 jemarch" +/* -*- mode: C -*- Time-stamp: "2009-01-23 12:06:54 gerel" * * File: pdf-filter.h * Date: Tue Jul 10 18:40:55 2007 @@ -37,6 +37,8 @@ USAGE_ARG, VERSION_ARG, READ_ARG, + INFILE_ARG, + OUTFILE_ARG, CACHE_ARG, NULL_FILTER_ARG, ASCIIHEXDEC_FILTER_ARG, # Begin bundle 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 /i7kinChIAXtpLw= ### regards, -gerel
