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 1.405 second using v1.01-cache-2.11-cpan-e1769b4cff6 )