Changeset 3588 for lang/perl/Archive-Lha/trunk/Lha.xs
- Timestamp:
- 12/26/07 12:00:47 (13 months ago)
- Files:
-
- 1 modified
-
lang/perl/Archive-Lha/trunk/Lha.xs (modified) (18 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/perl/Archive-Lha/trunk/Lha.xs
r3413 r3588 10 10 #include "ppport.h" 11 11 #include "Lha.h" 12 13 /* 14 these are not from LHa for UNIX 15 */ 16 17 void 18 destroy_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 34 void 35 safe_croak(LhaStash * stash, unsigned char * dying_message) 36 { 37 destroy_stash(stash); 38 croak(dying_message); 39 } 12 40 13 41 void … … 40 68 SPAGAIN; 41 69 if (n != 1) 42 croak("There's something wrong in 'read' callback");70 safe_croak(stash, "There's something wrong in 'read' callback"); 43 71 Copy(POPp, stash->bit->readbuf, len, unsigned char); 44 72 PUTBACK; … … 46 74 LEAVE; 47 75 } 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 */ 48 83 49 84 unsigned short … … 62 97 n -= bit->pos; 63 98 bit->value = shiftbits(bit, bit->pos); 64 if (stash-> packed_size > 0) {99 if (stash->encoded_size > 0) { 65 100 if (bit->readpos == 0) { 66 if (stash-> packed_size > READBUF_SIZE)101 if (stash->encoded_size > READBUF_SIZE) 67 102 len = READBUF_SIZE; 68 103 else 69 len = stash-> packed_size;104 len = stash->encoded_size; 70 105 input(stash, len); 71 106 } … … 73 108 if (bit->readpos == READBUF_SIZE) 74 109 bit->readpos = 0; 75 stash-> packed_size--;110 stash->encoded_size--; 76 111 } 77 112 else … … 97 132 return bits; 98 133 } 134 135 void 136 init_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 */ 99 156 100 157 void … … 112 169 113 170 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"); 115 172 } 116 173 … … 122 179 for(i = 0; i < nchar; i++) 123 180 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"); 125 182 } 126 183 else … … 133 190 } 134 191 if (total & USHORT_MAX) { 135 croak("Table is broken: total mismatch");192 safe_croak(stash, "Table is broken: total mismatch"); 136 193 } 137 194 … … 162 219 j = start[bit]; 163 220 if ((j >> bits_to_shift) > table->size) { 164 croak("Table is broken");221 safe_croak(stash, "Table is broken"); 165 222 } 166 223 p = &(table->table[j >> bits_to_shift]); … … 183 240 } 184 241 } 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 */ 185 249 186 250 void … … 328 392 } 329 393 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 330 400 unsigned short 331 401 calc_crc16(unsigned short crc, unsigned char * str, unsigned int len) … … 335 405 return crc; 336 406 } 407 408 /* 409 this is not from LHa for UNIX 410 */ 337 411 338 412 void … … 377 451 } 378 452 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_ 453 MODULE = Archive::Lha PACKAGE = Archive::Lha::Decode::Base PREFIX = xs_ 416 454 417 455 PROTOTYPES: 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 #*/ 418 463 419 464 unsigned short … … 442 487 Newxz(stash, sizeof(LhaStash), LhaStash); 443 488 489 stash->queue = queue; 490 444 491 stash->read = self_sv("read"); 445 492 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"); 448 495 449 496 init_tables(self, stash); … … 485 532 } 486 533 487 free_tables(stash); 488 free_bitstream(stash); 489 Safefree(stash); 490 Safefree(queue); 534 destroy_stash(stash); 491 535 492 536 RETVAL = crc16; … … 495 539 RETVAL 496 540 497 unsigned short 498 xs_crc16(unsigned short crc, SV * str, unsigned int len) 541 MODULE = Archive::Lha PACKAGE = Archive::Lha::CRC PREFIX = xs_ 542 543 PROTOTYPES: DISABLE 544 545 #/* this is not from LHa for UNIX */ 546 547 unsigned short 548 xs_update(unsigned short crc, SV * str, unsigned int len) 499 549 CODE: 500 550 RETVAL = calc_crc16(crc, SvPV(str, len), len); … … 502 552 OUTPUT: 503 553 RETVAL 554 555 MODULE = Archive::Lha PACKAGE = Archive::Lha PREFIX = xs_ 556 557 PROTOTYPES: DISABLE
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)