Show
Ignore:
Timestamp:
12/26/07 12:00:47 (13 months ago)
Author:
charsbar
Message:

lang/perl/Archive-Lha: lots of changes, cleanups, pods and 0.02 -> CPAN

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Archive-Lha/trunk/Lha.xs

    r3413 r3588  
    1010#include "ppport.h" 
    1111#include "Lha.h" 
     12 
     13/* 
     14  these are not from LHa for UNIX 
     15*/ 
     16 
     17void 
     18destroy_stash(LhaStash * stash) 
     19{ 
     20  Safefree(stash->tree->left); 
     21  Safefree(stash->tree->right); 
     22  Safefree(stash->tree); 
     23  Safefree(stash->pt->table); 
     24  Safefree(stash->pt->length); 
     25  Safefree(stash->pt); 
     26  Safefree(stash->c->table); 
     27  Safefree(stash->c->length); 
     28  Safefree(stash->c); 
     29  Safefree(stash->bit); 
     30  Safefree(stash->queue); 
     31  Safefree(stash); 
     32} 
     33 
     34void 
     35safe_croak(LhaStash * stash, unsigned char * dying_message) 
     36{ 
     37  destroy_stash(stash); 
     38  croak(dying_message); 
     39} 
    1240 
    1341void 
     
    4068  SPAGAIN; 
    4169  if (n != 1) 
    42     croak("There's something wrong in 'read' callback"); 
     70    safe_croak(stash, "There's something wrong in 'read' callback"); 
    4371  Copy(POPp, stash->bit->readbuf, len, unsigned char); 
    4472  PUTBACK; 
     
    4674  LEAVE; 
    4775} 
     76 
     77/* 
     78  modified from LHa for UNIX: bitio.c ver 1.14 
     79    original authors: 
     80      Source All chagned       1995.01.14  N.Watazaki 
     81      Separated from crcio.c   2002.10.26  Koji Arai 
     82*/ 
    4883 
    4984unsigned short 
     
    6297    n -= bit->pos; 
    6398    bit->value = shiftbits(bit, bit->pos); 
    64     if (stash->packed_size > 0) { 
     99    if (stash->encoded_size > 0) { 
    65100      if (bit->readpos == 0) { 
    66         if (stash->packed_size > READBUF_SIZE) 
     101        if (stash->encoded_size > READBUF_SIZE) 
    67102          len = READBUF_SIZE; 
    68103        else 
    69           len = stash->packed_size; 
     104          len = stash->encoded_size; 
    70105        input(stash, len); 
    71106      } 
     
    73108      if (bit->readpos == READBUF_SIZE) 
    74109        bit->readpos = 0; 
    75       stash->packed_size--; 
     110      stash->encoded_size--; 
    76111    } 
    77112    else 
     
    97132  return bits; 
    98133} 
     134 
     135void 
     136init_bitstream(LhaStash * stash) 
     137{ 
     138  LhaBitstream  * bitstream; 
     139 
     140  Newxz(bitstream, sizeof(LhaBitstream), LhaBitstream); 
     141  stash->bit = bitstream; 
     142 
     143  stash->bit->blocksize = 0; 
     144  stash->bit->readpos = 0; 
     145  stash->bit->value = 0; 
     146  stash->bit->buf = 0; 
     147  stash->bit->pos = 0; 
     148  fillbuf(stash, USHORT_BIT); 
     149} 
     150 
     151/* 
     152  modified from LHa for UNIX: maketbl.c ver 1.14 
     153    original author(s): 
     154      Source All chagned       1995.01.14  N.Watazaki 
     155*/ 
    99156 
    100157void 
     
    112169 
    113170  if (table->bit > USHORT_BIT) { 
    114     croak("Table is broken: table bit is too large"); 
     171    safe_croak(stash, "Table is broken: table bit is too large"); 
    115172  } 
    116173 
     
    122179  for(i = 0; i < nchar; i++) 
    123180    if (table->length[i] > USHORT_BIT) { 
    124       croak("Table is broken: bit length is too large"); 
     181      safe_croak(stash, "Table is broken: bit length is too large"); 
    125182    } 
    126183    else 
     
    133190  } 
    134191  if (total & USHORT_MAX) { 
    135     croak("Table is broken: total mismatch"); 
     192    safe_croak(stash, "Table is broken: total mismatch"); 
    136193  } 
    137194 
     
    162219      j = start[bit]; 
    163220      if ((j >> bits_to_shift) > table->size) { 
    164         croak("Table is broken"); 
     221        safe_croak(stash, "Table is broken"); 
    165222      } 
    166223      p = &(table->table[j >> bits_to_shift]); 
     
    183240  } 
    184241} 
     242 
     243/* 
     244  modified from LHa for UNIX: huf.c ver 1.14 
     245    original authors: 
     246      Source All chagned       1995.01.14  N.Watazaki 
     247      Support LH7 & Bug Fixed  2000.10. 6  t.okamoto 
     248*/ 
    185249 
    186250void 
     
    328392} 
    329393 
     394/* 
     395  modified from LHa for UNIX: crcio.c ver 1.14 
     396    original author(s): 
     397      Source All chagned       1995.01.14  N.Watazaki 
     398*/ 
     399 
    330400unsigned short 
    331401calc_crc16(unsigned short crc, unsigned char * str, unsigned int len) 
     
    335405  return crc; 
    336406} 
     407 
     408/* 
     409  this is not from LHa for UNIX 
     410*/ 
    337411 
    338412void 
     
    377451} 
    378452 
    379 void 
    380 free_tables(LhaStash * stash) 
    381 { 
    382   Safefree(stash->tree->left); 
    383   Safefree(stash->tree->right); 
    384   Safefree(stash->tree); 
    385   Safefree(stash->pt->table); 
    386   Safefree(stash->pt->length); 
    387   Safefree(stash->pt); 
    388   Safefree(stash->c->table); 
    389   Safefree(stash->c->length); 
    390   Safefree(stash->c); 
    391 } 
    392  
    393 void 
    394 init_bitstream(LhaStash * stash) 
    395 { 
    396   LhaBitstream  * bitstream; 
    397  
    398   Newxz(bitstream, sizeof(LhaBitstream), LhaBitstream); 
    399   stash->bit = bitstream; 
    400  
    401   stash->bit->blocksize = 0; 
    402   stash->bit->readpos = 0; 
    403   stash->bit->value = 0; 
    404   stash->bit->buf = 0; 
    405   stash->bit->pos = 0; 
    406   fillbuf(stash, USHORT_BIT); 
    407 } 
    408  
    409 void 
    410 free_bitstream(LhaStash * stash) 
    411 { 
    412   Safefree(stash->bit); 
    413 } 
    414  
    415 MODULE = Archive::Lha PACKAGE = Archive::Lha PREFIX = xs_ 
     453MODULE = Archive::Lha PACKAGE = Archive::Lha::Decode::Base PREFIX = xs_ 
    416454 
    417455PROTOTYPES: DISABLE 
     456 
     457#/* 
     458#  modified from LHa for UNIX: slide.c ver 1.14 
     459#    original authors: 
     460#      Modified                                   Nobutaka Watazaki 
     461#  Ver. 1.14d  Exchanging a search algorithm  1997.01.11  T.Okamoto 
     462#*/ 
    418463 
    419464unsigned short 
     
    442487    Newxz(stash, sizeof(LhaStash), LhaStash); 
    443488 
     489    stash->queue = queue; 
     490 
    444491    stash->read          = self_sv("read"); 
    445492    stash->write         = self_sv("write"); 
    446     stash->original_size = self_uint("original"); 
    447     stash->packed_size   = self_uint("packed"); 
     493    stash->original_size = self_uint("original_size"); 
     494    stash->encoded_size  = self_uint("encoded_size"); 
    448495 
    449496    init_tables(self, stash); 
     
    485532    } 
    486533 
    487     free_tables(stash); 
    488     free_bitstream(stash); 
    489     Safefree(stash); 
    490     Safefree(queue); 
     534    destroy_stash(stash); 
    491535 
    492536    RETVAL = crc16; 
     
    495539    RETVAL 
    496540 
    497 unsigned short 
    498 xs_crc16(unsigned short crc, SV * str, unsigned int len) 
     541MODULE = Archive::Lha PACKAGE = Archive::Lha::CRC PREFIX = xs_ 
     542 
     543PROTOTYPES: DISABLE 
     544 
     545#/* this is not from LHa for UNIX */ 
     546 
     547unsigned short 
     548xs_update(unsigned short crc, SV * str, unsigned int len) 
    499549  CODE: 
    500550    RETVAL = calc_crc16(crc, SvPV(str, len), len); 
     
    502552  OUTPUT: 
    503553    RETVAL 
     554 
     555MODULE = Archive::Lha PACKAGE = Archive::Lha PREFIX = xs_ 
     556 
     557PROTOTYPES: DISABLE