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 )