On Mon, 4 May 2009, Jon K Hellan wrote: > Allin Cottrell wrote: > > I'm trying some tests with the hope of switching to libgsf in > > place of low-level fiddling with pkzip structures in reading and > > writing zipfiles. So far I'm only partially successful and I'd > > much appreciate any guidance. > > > > I have the following C source (with correct headers included, and > > followed by a trivial main() function). The idea is to print the > > structure of a zipfile and then "unzip" it to a specified > > location. > > > > The printing part, "print_kids", is working fine, but the > > "unzipping" part is giving me an empty directory "foo". I have > > removed error-checking from the following for brevity, but no > > errors were triggered when running the full version of the code. > > There is example code in the 'tests' subdirectory. You may > already have discovered this. It looks like test-cp-zip.c should > be a good starting point.
Thanks, you're right. But I have a couple of questions about test-cp-zip.c. It contains a function "clone" which does a recursive read/write. That's fine, but I'd have thought that gsf_input_copy() would provide an automated route to the same result. Apparently not. So I'm not sure what gsf_input_copy() does. Second, this test program writes out a new zip file, and I'd like to write out an unzipped version. It seems non-trivial to make the change. The trope in test-cp-zip.c is input = gsf_input_stdio_new (argv[1], &err); ... infile = gsf_infile_zip_new (input, &err); ... output = gsf_output_stdio_new (argv[2], &err); ... outfile = gsf_outfile_zip_new (output, &err); By symmetry one might think that I could replace the last of these lines with outfile = gsf_outfile_stdio_new (output, &err); for stdio output, but that won't work. Rather, I skip the gsf_output_stdio_new() line and do outfile = gsf_outfile_stdio_new (argv[2], &err); and pass outfile as the second argument to clone(). This works to produce unzipped output, but it gives GLib-GObject-WARNING **: invalid cast from `GsfOutputStdio' to `GsfOutfile' Having tried a few variants, I'm not sure of the right way to use the API for this task. Allin Cottrell _______________________________________________ gnumeric-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/gnumeric-list
