Archive-Tar-Builder

 view release on metacpan or  search on metacpan

src/Builder.xs  view on Meta::CPAN

    ENTER;
    SAVETMPS;

    /*
     * Prepare the stack for $cache->getpwuid()
     */
    PUSHMARK(SP);
    XPUSHs(cache);
    XPUSHs(sv_2mortal(newSViv(uid)));
    XPUSHs(sv_2mortal(newSViv(gid)));
    PUTBACK;

    retc = call_method("lookup", G_ARRAY);

    SPAGAIN;

    if (retc < 2) {
        goto error_lookup;
    }

    if (retc == 2) {

src/Builder.xs  view on Meta::CPAN


        if ((item = POPs) != NULL && SvOK(item)) {
            tmp = SvPV(item, len);

            if ((*user = b_string_new_len(tmp, len)) == NULL) {
                goto error_string_new_user;
            }
        }
    }

    PUTBACK;

    FREETMPS;
    LEAVE;

    return 0;

error_string_new_user:
    b_string_free(*group);

error_string_new_group:

error_lookup:
    PUTBACK;

    FREETMPS;
    LEAVE;

    return -1;
}

static b_string *hardlink_lookup(SV *cache, dev_t dev, ino_t ino, b_string *path) {
    dSP;
    I32 retc;

src/Builder.xs  view on Meta::CPAN

    SAVETMPS;

    /*
     * Prepare the stack for $cache->lookup()
     */
    PUSHMARK(SP);
    XPUSHs(cache);
    XPUSHs(sv_2mortal(newSViv(dev)));
    XPUSHs(sv_2mortal(newSViv(ino)));
    XPUSHs(sv_2mortal(newSVpv(path->str, path->len)));
    PUTBACK;

    path = NULL;
    retc = call_method("lookup", G_ARRAY);

    SPAGAIN;

    if (retc != 1) {
        goto leave;
    }

    if ((item = POPs) != NULL && SvOK(item)) {
        tmp = SvPV(item, len);

        if ((path = b_string_new_len(tmp, len)) == NULL) {
            goto leave;
        }
    }

leave:
    PUTBACK;

    FREETMPS;
    LEAVE;

    return path;
}

static void builder_warn(b_error *err) {
    if (err == NULL) return;

src/Builder.xs  view on Meta::CPAN

        }

        /*
         * Call Archive::Tar::Builder::UserCache->new()
         */
        ENTER;
        SAVETMPS;

        PUSHMARK(SP);
        XPUSHs(sv_2mortal(newSVpvf("Archive::Tar::Builder::UserCache")));
        PUTBACK;

        retc = call_method("new", G_SCALAR);

        SPAGAIN;

        if (retc == 1) {
            cache = POPs;
            SvREFCNT_inc(cache);
        }

        PUTBACK;
        FREETMPS;
        LEAVE;

        b_builder_set_user_lookup(builder, B_USER_LOOKUP(user_lookup), cache); 

        if (builder->options & B_BUILDER_PRESERVE_HARDLINKS) {
            /*
             * Call Archive::Tar::Builder::HardlinkCache->new()
             */
            ENTER;
            SAVETMPS;

            PUSHMARK(SP);
            XPUSHs(sv_2mortal(newSVpvf("Archive::Tar::Builder::HardlinkCache")));
            PUTBACK;

            retc = call_method("new", G_SCALAR);

            SPAGAIN;

            if (retc == 1) {
                cache = POPs;
                SvREFCNT_inc(cache);
            }

            PUTBACK;
            FREETMPS;
            LEAVE;

            b_builder_set_hardlink_cache(builder, B_HARDLINK_LOOKUP(hardlink_lookup), cache);
        }

        RETVAL = builder;

    OUTPUT:
        RETVAL

void
builder_DESTROY(builder)
    Archive::Tar::Builder builder

    CODE:
        b_builder_destroy(builder);

void

src/Builder.xs  view on Meta::CPAN

        }

int
builder_is_excluded(builder, path)
    Archive::Tar::Builder builder
    const char *path

    CODE:
        RETVAL = b_builder_is_excluded(builder, path);

    OUTPUT:
        RETVAL

void
builder_set_handle(builder, fh)
    Archive::Tar::Builder builder
    PerlIO *fh

    CODE:
        b_buffer *buf = b_builder_get_buffer(builder);;

src/Builder.xs  view on Meta::CPAN

                if (error_path == NULL) {
                    error_path = path;
                }

                croak("%s: %s: %s\n", "b_find()", error_path->str, strerror(errno));
            }
        }

        RETVAL = builder->total;

    OUTPUT:
        RETVAL

ssize_t
builder_flush(builder)
    Archive::Tar::Builder builder

    CODE:
        ssize_t ret;

        b_buffer *buf = b_builder_get_buffer(builder);

src/Builder.xs  view on Meta::CPAN

        if (b_buffer_get_fd(buf) == 0) {
            croak("No file handle set");
        }

        if ((ret = b_buffer_flush(buf)) < 0) {
            croak("%s: %s", "b_buffer_flush()", strerror(errno));
        }

        RETVAL = ret;

    OUTPUT:
        RETVAL

ssize_t
builder_finish(builder)
    Archive::Tar::Builder builder

    CODE:
        ssize_t ret;

        b_buffer *buf = b_builder_get_buffer(builder);

src/Builder.xs  view on Meta::CPAN

        }

        if (b_error_warn(err) && !(options & B_BUILDER_IGNORE_ERRORS)) {
            croak("Delayed nonzero exit status");
        }

        b_error_reset(err);

        RETVAL = ret;

    OUTPUT:
        RETVAL

src/ppport.h  view on Meta::CPAN

PTR2ul|5.007001||p
PTRV|5.006000||p
PUSHMARK|||
PUSH_MULTICALL||5.011000|
PUSHi|||
PUSHmortal|5.009002||p
PUSHn|||
PUSHp|||
PUSHs|||
PUSHu|5.004000||p
PUTBACK|||
PerlIO_clearerr||5.007003|
PerlIO_close||5.007003|
PerlIO_context_layers||5.009004|
PerlIO_eof||5.007003|
PerlIO_error||5.007003|
PerlIO_fileno||5.007003|
PerlIO_fill||5.007003|
PerlIO_flush||5.007003|
PerlIO_get_base||5.007003|
PerlIO_get_bufsiz||5.007003|

src/ppport.h  view on Meta::CPAN

{
    dSP;
    SV* sv = newSVpv(p, 0);

    PUSHMARK(sp);
    eval_sv(sv, G_SCALAR);
    SvREFCNT_dec(sv);

    SPAGAIN;
    sv = POPs;
    PUTBACK;

    if (croak_on_error && SvTRUE(GvSV(errgv)))
	croak(SvPVx(GvSV(errgv), na));

    return sv;
}

#endif
#endif



( run in 0.501 second using v1.01-cache-2.11-cpan-4e96b696675 )