Archive-Lha
view release on metacpan or search on metacpan
lib/Archive/Lha.xs view on Meta::CPAN
}
void
output(LhaStash * stash, unsigned char * queue, int len)
{
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSVpv(queue, len)));
PUTBACK;
call_sv(stash->write, G_VOID);
SPAGAIN;
PUTBACK;
FREETMPS;
LEAVE;
}
void
input(LhaStash * stash, int len)
{
int n;
SV *sv;
STRLEN got;
const char *ptr;
dSP;
ENTER;
SAVETMPS;
PUSHMARK(SP);
XPUSHs(sv_2mortal(newSViv(len)));
PUTBACK;
n = call_sv(stash->read, G_SCALAR);
SPAGAIN;
if (n != 1)
safe_croak(stash, "There's something wrong in 'read' callback");
sv = POPs;
ptr = SvPVbyte(sv, got);
Copy(ptr, stash->bit->readbuf, (STRLEN)len <= got ? (STRLEN)len : got, unsigned char);
PUTBACK;
FREETMPS;
LEAVE;
}
/*
modified from LHa for UNIX: bitio.c ver 1.14
original authors:
Source All chagned 1995.01.14 N.Watazaki
Separated from crcio.c 2002.10.26 Koji Arai
*/
lib/Archive/Lha.xs view on Meta::CPAN
}
if (loc) {
output(stash, queue, loc);
crc16 = calc_crc16(crc16, queue, loc);
}
destroy_stash(stash);
RETVAL = crc16;
OUTPUT:
RETVAL
MODULE = Archive::Lha PACKAGE = Archive::Lha::CRC PREFIX = xs_
PROTOTYPES: DISABLE
#/* this is not from LHa for UNIX */
unsigned short
xs_update(unsigned short crc, SV * str, STRLEN len)
CODE:
RETVAL = calc_crc16(crc, SvPV(str, len), len);
OUTPUT:
RETVAL
MODULE = Archive::Lha PACKAGE = Archive::Lha::Header::Utils PREFIX = xs_
PROTOTYPES: DISABLE
unsigned char
xs_checksum(SV * buf, STRLEN offset)
CODE:
STRLEN len;
unsigned char * s = (unsigned char *) SvPV(buf, len);
unsigned char sum = 0;
STRLEN i;
for (i = offset; i < len; i++)
sum += s[i];
RETVAL = sum;
OUTPUT:
RETVAL
IV
xs_dostime2utime(U32 v)
CODE:
struct tm t;
time_t result;
if (v == 0) {
RETVAL = 0;
} else {
t.tm_sec = (v & 0x1F) * 2;
t.tm_min = (v >> 5) & 0x3F;
t.tm_hour = (v >> 11) & 0x1F;
t.tm_mday = (v >> 16) & 0x1F;
t.tm_mon = ((v >> 21) & 0x0F) - 1;
t.tm_year = ((v >> 25) & 0x7F) + 80;
t.tm_isdst = -1;
result = mktime(&t);
RETVAL = (result == (time_t)-1) ? 0 : (IV)result;
}
OUTPUT:
RETVAL
MODULE = Archive::Lha PACKAGE = Archive::Lha PREFIX = xs_
PROTOTYPES: DISABLE
lib/Archive/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|
lib/Archive/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.493 second using v1.01-cache-2.11-cpan-e1769b4cff6 )