grokking libgsf

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

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.

static void print_kids (GsfInfile *infile, int level)
    int nkids = gsf_infile_num_children(infile);
    const char *cname;
    GsfInput *child;
    gsf_off_t sz;
    int i, j;

    for (i=0; i<nkids; i++) {
        child = gsf_infile_child_by_index(infile, i);
        cname = gsf_input_name(child);
        sz = gsf_input_size(child);
        for (j=0; j<level; j++) {
            putchar(' ');
        printf("child %d: '%s' (%d bytes)\n", i, cname, (int) sz);
        print_kids(GSF_INFILE(child), ++level);

static int gsf_test_zipread (const char *fname)
    GsfInput *src, *uncomp;
    GsfInfile *zipfile;
    GsfOutfile *outfile;


    src = gsf_input_stdio_new(fname, NULL);
    zipfile = gsf_infile_zip_new(src, NULL);

    print_kids(zipfile, 0);

    uncomp = gsf_input_uncompress(GSF_INPUT(zipfile));

    outfile = gsf_outfile_stdio_new("foo", &err);

    gsf_input_seek(uncomp, 0, G_SEEK_SET);
    gsf_output_seek(GSF_OUTPUT(outfile), 0, G_SEEK_SET);

    if (!gsf_input_copy(uncomp, GSF_OUTPUT(outfile))) {
        fprintf(stderr, "gsf_input_copy failed\n");


    return 0;

Please, what am I doing wrong in gsf_test_zipread?

Allin Cottrell
Department of Economics
Wake Forest University

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