12018-12-03 Stuart Caie <kyzer@cabextract.org.uk> 2 3 * test: support builddir being on a path that includes spaces 4 52018-11-09 Stuart Caie <kyzer@cabextract.org.uk> 6 7 * test/case-utf8.test: Some environments (e.g. DJGPP) don't have a 8 UTF-8 locale, so won't pass the case.test testcase. Break it into 9 case-ascii.test and case-utf8.test, and skip the latter if 10 "cabextract -L" has no effect on non-ASCII filenames. Thanks to 11 Robert Riebisch for highlighting this. 12 132018-11-08 Stuart Caie <kyzer@cabextract.org.uk> 14 15 * src/cabextract.c: make multiple attempts at iconv_open() with 16 different names for the UTF-8 encoding: "UTF-8", "UTF8" and "UTF_8". 17 18 "UTF8" works with glibc, libiconv, newlib, Solaris libc and FreeBSD 19 libc, while "UTF-8" doesn't work with newlib. But if you have 20 libiconv >= 1.13, it removes "UTF8" support unless you define 21 USE_HPUX_ALIASES, or patch it back in (as Cygwin does). 22 Thanks to Ryan Schmidt for letting me know about this. 23 242018-11-03 Stuart Caie <kyzer@cabextract.org.uk> 25 26 * test: use the autotools test system instead of a custom makefile. 27 You can now use 'make check' to test cabextract, and the test files 28 are now distributed with cabextract. 29 302018-10-30 Stuart Caie <kyzer@cabextract.org.uk> 31 32 * configure.ac: remove obsolescent C library tests. AC_HEADER_STDC is 33 removed, and so are most checks for standard C headers. cabextract now 34 makes these assumptions: 35 - <ctype.h> <dirent.h> <errno.h> <limits.h> <locale.h> <stdarg.h> 36 <stdlib.h> <string.h> <sys/stat.h> <sys/types.h> <time.h> exist 37 - <time.h> is protected from double-inclusion (AC_HEADER_TIME obsolete) 38 - if you have iconv(), towlower(), utime(), utimes(), you also 39 have their header files 40 - BSD has memcpy(), memmove(), strrchr() in <string.h> and has 41 strcasecmp() in <strings.h> 42 432018-10-26 Stuart Caie <kyzer@cabextract.org.uk> 44 45 * configure.ac, Makefile.am: use pkg-config's PKG_CHECK_MODULES 46 when looking for an external libmspack. You still need to supply 47 --with-external-libmspack to use an external libmspack. If you 48 don't like or use pkg-config, you can set the environment variables 49 libmspack_CFLAGS and libmspack_LIBS before running configure. 50 512018-10-26 Stuart Caie <kyzer@cabextract.org.uk> 52 53 * autogen.sh, distcheck.sh: I've introduced new build scripts. 54 Use cleanup.sh to remove all generated files, autogen.sh to 55 generate the configure script, rebuild.sh to (re)build and test 56 cabextract, and finally use distcheck.sh to both build and 57 distcheck cabextract, both with the --with-external-libmspack 58 configure option and without. 59 602018-10-22 Stuart Caie <kyzer@cabextract.org.uk> 61 62 * amibuild.sh: include cabinfo in the Amiga distribution. Thanks to 63 Stefan Haubenthal for the suggestion. 64 652018-10-16 Stuart Caie <kyzer@cabextract.org.uk> 66 67 * src/cabinfo.c: thanks to Micah Snyder for sending some very corrupt 68 files, where cabinet blocks can be found absolutely anywhere, not in 69 a continguous sequence after the file entries, I found cabinfo unfit 70 for purpose. I've updated it with a new output format, where the 71 blocks for a folder appear immediately after each folder, rather than 72 all at the end. 73 742018-10-16 Stuart Caie <kyzer@cabextract.org.uk> 75 76 * src/cabextract.c: use libmspack's new MSCABD_PARAM_SALVAGE mode 77 for cabextract -f, to allow extracting even more data from broken 78 cabinet files. 79 802018-07-31 Stuart Caie <kyzer@cabextract.org.uk> 81 82 * configure.ac: drop AC_FUNC_MKTIME. Looking into it, even C89 has 83 a mktime() function, the configure test is mostly checking if it 84 is POSIX-conformant or not, and substitutes mktime.c if not. But 85 even the replacement has no TZ handling, so it seems OK to me to 86 accept the system mktime() in any case. The fnmatch() and getopt() 87 substitutions remain because they enable GNU extensions that 88 cabextract uses (FNM_CASEFOLD and getopt_long() respectively). 89 Thanks to Stefan Haubenthal for bringing up the issue. 90 912018-07-28 Stuart Caie <kyzer@cabextract.org.uk> 92 93 * src/cabinfo.c: cabinfo now supports examining more than one file 94 952018-07-17 Stuart Caie <kyzer@cabextract.org.uk> 96 97 * amibuild.sh: support using setlocale()/iconv() in the OS4 version. 98 99 * amibuild.sh: build the 68K version with -noixemul so the resulting 100 executable doesn't need ixemul.library, libnix is used instead. 101 Because libnix has no umask(), add a HAVE_UMASK feature test. 102 103 * src/cabextract.c: add a new feature flag, LATIN1_FILENAMES, 104 which should be defined if the host environment expects ISO-8859-1 105 filenames rather than UTF-8. This adds in a step to translate 106 even UTF-8 filenames to ISO-8859-1. It's only enabled for the 107 Amiga build so far. 108 1092018-03-07 Stuart Caie <kyzer@cabextract.org.uk> 110 111 * configure.ac, src/cabextract.c: add support for choosing the 112 character encoding of non-UTF8 filenames, using the iconv library. 113 This is based on a patch originally developed by Kevin Tardif. 114 115 * src/cabextract.c: try setting various UTF8 locales for LC_CTYPE, 116 in order to get tolower() / towlower() to lowercase non-ASCII 117 characters. Again, thanks to Kevin Tardif for discussing this 118 and supplying a proposed patch. 119 1202016-04-16 Stuart Caie <kyzer@cabextract.org.uk> 121 122 * configure.ac: change my email address to kyzer@cabextract.org.uk 123 1242015-05-10 Stuart Caie <kyzer@4u.net> 125 126 * wince_rename, wince_info: allow the possibility that strings have 127 more than one null byte. Thanks to Stefan Riegler for the suggestion. 128 1292015-05-10 Stuart Caie <kyzer@4u.net> 130 131 * Makefile.am: Add subdir-objects option as suggested by autoreconf. 132 133 * configure.ac: Add AM_PROG_AR as suggested by autoreconf. 134 1352015-02-25 Stuart Caie <kyzer@4u.net> 136 137 * create_output_name(): Simplify code; do path checking only after 138 output name has been constructed. Use towlower to lowercase UTF-8 139 characters. Remove both leading '/' and '\' from cab filenames and 140 change both "../" and "..\" to "xx", for Cygwin and other Cygwin-like 141 environments that use both '/' and '\' as path separators. Thanks to 142 Alexander Cherepanov and the MITRE team. 143 1442015-02-18 Stuart Caie <kyzer@4u.net> 145 146 * create_output_name(): the check against leading slashes could be 147 evaded with malformed UTF-8. Thanks to Alexander Cherepanov for 148 reporting the issue. 149 1502015-01-18 Stuart Caie <kyzer@4u.net> 151 152 * wince_rename: installed files now include their install directories. 153 Thanks to Alfonso Acosta for sending a patch. 154 1552015-01-08 Stuart Caie <kyzer@4u.net> 156 157 * create_output_name: avoid invalid memory reads because of invalid 158 UTF-8 encodings. Use the Unicode substitution character for most 159 bad UTF-8 or Unicode encodings. Thanks to Hanno Böck. 160 161 * src/cabinfo.c: stop trying to convert UTF-8 to ASCII in filename. 162 Instead, prepend "UTF: " and print it to the terminal verbatim. 163 1642011-07-19 Stuart Caie <kyzer@4u.net> 165 166 * doc/ja/cabextract.1: Katsumi Saito updated the Japanese translation 167 of cabextract's manpage to include the -t option. Thanks again! 168 1692011-05-11 Stuart Caie <kyzer@4u.net> 170 171 * src/cabinfo.c: changed the largefile detection header to the same 172 as mspack/system.h 173 1742011-04-27 Stuart Caie <kyzer@4u.net> 175 176 * src/cabextract.c: changed char* to const char* in line with changes 177 in libmspack. See mspack/ChangeLog for more details. 178 1792011-04-25 Stuart Caie <kyzer@4u.net> 180 181 * load_spanning_cabinets(): Print the error code caused by a failed 182 cabinet merge, before ruining the error code by calling cabd->close(). 183 Thanks to Drew D'Addesio for reporting the problem. 184 1852011-01-19 Stuart Caie <kyzer@4u.net> 186 187 * doc/wince_cab_format.html: Identified a new file flag in the WinCE 188 header file. Thanks to Paul Sokolovsky for asking me to look into it. 189 1902010-07-19 Stuart Caie <kyzer@4u.net> 191 192 * mspack: MS-ZIP recovery now recovers more bytes. Also, when a file 193 fails to unpack because of a read error during decompression, all 194 subsequent files in the same folder will give the same error, instead 195 of claiming to be OK. See mspack/ChangeLog for full details. 196 1972010-07-17 Stuart Caie <kyzer@4u.net> 198 199 * src/cabsplit: added new program, cabsplit, which splits cabinet 200 files into one cabinet file per folder. Useful for debugging. 201 2022010-06-17 Stuart Caie <kyzer@4u.net> 203 204 * configure.ac: Added --external-libmspack option, which allows 205 you to use the libmspack library installed on your system rather 206 than the copy bundled with cabextract. Thanks to Patrice Dumas 207 for the patch. 208 2092010-06-10 Stuart Caie <kyzer@4u.net> 210 211 * mspack: bugs in MS-ZIP and Quantum decoders have been fixed. See 212 mspack/ChangeLog for full details. 213 2142010-05-06 Stuart Caie <kyzer@4u.net> 215 216 * configure.ac, cabextract.c: added support for the one-arg mkdir() 217 found in the MinGW32 environment. Thanks to Kevin O'Rourke for 218 reporting this. 219 2202009-09-24 Stuart Caie <kyzer@4u.net> 221 222 * doc/wince_cab_format.html, src/wince_info, src/wince_rename: 223 The files in Windows CE cabinets are numbered after the first 224 ID in the FILES section, rather than what I termed the "real ID". 225 Fixed the documentation and the wince tools to match. The purpose 226 of the field previously called "real ID" is now unknown. Thanks 227 to Marco Schindler for discovering this. 228 2292007-08-07 Stuart Caie <kyzer@4u.net> 230 231 * all: cabextract and libmspack have moved to the domain 232 www.cabextract.org.uk. Updated the documentation to reflect this. 233 2342007-01-20 Stuart Caie <kyzer@4u.net> 235 236 * create_output_name(): add UTF-8 support for 6-byte characters. 237 Apparently they go that far these days. 238 2392007-01-20 Stuart Caie <kyzer@4u.net> 240 241 * doc/wince_cab_format.html, src/wince_info: The REGKEYS "unknown" 242 flag appears to be a boolean indicating whether variable 243 substitution should take place. Thanks to Dominique Gallot for 244 discovering it. 245 2462006-06-21 Stuart Caie <kyzer@4u.net> 247 248 * create_output_name(): add UTF-8 support for 4-byte characters. 249 2502006-03-01 Stuart Caie <kyzer@4u.net> 251 252 * process_cabinets(): on the advice of Mike Mohr, cabextract no 253 longer skips entire cabinets, when create_output_filename() 254 returns NULL, it only skips the affected files now. 255 2562005-10-30 Stuart Caie <kyzer@4u.net> 257 258 * src/cabextract.c: added test mode to cabextract, wherein files 259 aren't extracted, only passed through an MD5 checksum generator. 260 cabextract then lists which files passed and which files failed. 261 262 * process_cabinets(): fixed the problem where filters don't match 263 when -d option is also used. The filters match on the full 264 output-file path, including the -d directory specified. We now 265 trim this off before matching. 266 2672005-10-29 Stuart Caie <kyzer@4u.net> 268 269 * fnmatch.c, getopt.c: finally resolved problems with all the GNU 270 replacement functions. Obtained new versions of fnmatch and 271 getopt, removing the need for alloca.c, coded out the requirement 272 for mempcpy in getopt.c (I don't think it was needed anyway, but 273 just to be sure I changed it to use just memcpy). Tested on Mac OS X 274 (both native and using fink), Solaris 8 and Cygwin as well as Debian. 275 276 * configure.ac: Removed the AC_FUNC_ALLOCA and 277 AC_REPLACE_FUNCS([mempcpy]) 278 2792005-07-05 Stuart Caie <kyzer@4u.net> 280 281 * src/cabinfo.c: This can now search and print accurate output for 282 cabinets (and files containing cabinets) over 2GB. 283 2842005-04-21 Stuart Caie <kyzer@4u.net> 285 286 * src/cabinfo.c: This now prints if the NAME_IS_UTF flag is set for 287 each file. 288 2892004-10-19 Stuart Caie <kyzer@4u.net> 290 291 * create_output_name(): fixed out-by-one error in UTF-8 decoder. All 292 UTF-8 filenames would reach the "error in UTF-8 decode" section, 293 because the test for that section was "pointer >= last_character", 294 not "pointer > last_character". 295 2962004-10-18 Stuart Caie <kyzer@4u.net> 297 298 * process_cabinet(): now accepts that failure of create_output_name() 299 is an error, and also lets that function print an error message 300 rather than printing one itself. 301 302 * create_output_name(): improved the two error messages that could 303 be printed. 304 3052004-10-15 Stuart Caie <kyzer@4u.net> 306 307 * create_output_name(): removes leading "./" and "../" as well as 308 leading slashes from the input filename. Thanks to David Banz for 309 pointing this out, as well as http://www.securityfocus.com/bid/11376/ 310 3112004-07-16 Stuart Caie <kyzer@4u.net> 312 313 * Makefile.am: added -DMSPACK_NO_DEFAULT_SYSTEM. Why wasn't this in 314 earlier? 315 316 * src/cabextract.c: added prototypes of the cabx_ functions, 317 removed the prototype of cabextract_system and moved the real 318 cabextract_system to before main(). This is so AIX doesn't fail on 319 seeing an extern and a static definition of the same 320 global. That's messed up! 321 322 * alloca.c, fnmatch*, getopt*, mempcpy.c: imported these from 323 gcc's latest libiberty. This should fix problems with Cygwin. 324 3252004-03-18 Stuart Caie <kyzer@4u.net> 326 327 * process_cabinet(): added missing printf argument when errors on 328 extracting to stdout occur. Thanks to Moritz Barsnick for finding 329 it. 330 3312004-03-08 Stuart Caie <kyzer@4u.net> 332 333 * all: tidy-ups for 1.0 release 334 3352003-09-04 Stuart Caie <kyzer@4u.net> 336 337 * set_date_and_perm(): implemented the utimes() alternative to 338 utime(). 339 340 * set_date_and_perm(): sets the date before the permissions are set, 341 in case read-only files really do get -r--r--r-- permissions and 342 your dumb OS won't let the date can't be changed. 343 3442003-08-14 Stuart Caie <kyzer@4u.net> 345 346 * wince_cab_format.html: Shaun Jackman worked out six more fields 347 in the header. 348 3492003-08-12 Stuart Caie <kyzer@4u.net> 350 351 * cabextract.c: rewrote all function documentation in javadoc / 352 doxygen format. 353 354 * configure.ac: added AC_FUNC_ALLOCA / @ALLOCA@ / alloca.c because 355 I noticed that fnmatch.c uses alloca(). 356 3572003-08-11 Stuart Caie <kyzer@4u.net> 358 359 * main(): Removed the redundant args.list with args.view. I was 360 wondering why cabextract -l file.cab was trying to extract instead 361 of list... 362 3632003-08-06 Stuart Caie <kyzer@4u.net> 364 365 * configure.in, Makefile.am: rewrote the configure and build 366 scripts, in the new style. fnmatch sources are now bundled, and 367 now all the support code and tools are in the top directory, 368 leaving src/ with nothing but cabextract code in it. 369 3702003-08-05 Stuart Caie <kyzer@4u.net> 371 372 * wince_cab_format.html: converted the WinCE CAB format document 373 from text to HTML. 374 3752003-07-29 Stuart Caie <kyzer@4u.net> 376 377 * cabextract.c: now rewritten to use libmspack. 378 379 * process_cabinet(): the cabinet listing now has space for 10 380 digits in the size field, for those really big compressed files. 381 The maximum size of a file is 4294967295 bytes. 382 3832003-07-18 Stuart Caie <kyzer@4u.net> 384 385 * cabextract.c: started refactoring cabextract to use the 386 libmspack library. Moved everything out of cabextract.c and will 387 start moving things back in as necessary. 388 389 * doc, mspack: added a doc directory, where fun things like manual 390 pages, magic files and file format documents go. Made a directory for 391 libmspack files. 392 3932003-06-07 Stuart Caie <kyzer@4u.net> 394 395 * mspack: started creation of the libmspack library, based on the 396 cabextract code. See http://www.kyz.uklinux.net/libmspack/ for more 397 details about the library. 398 3992003-05-14 Stuart Caie <kyzer@4u.net> 400 401 * magic.cabinet: fixed errors in CAB magic definition 402 403 * magic.wince: added magic file entry for WinCE install format 404 405 * configure.in: added large file support 406 4072003-04-21 Stuart Caie <kyzer@4u.net> 408 409 * ja/cabextract.1: Katsumi Saito kindly translated the updated 410 manual page into Japanese for me. 411 4122003-04-20 Stuart Caie <kyzer@4u.net> 413 414 * cabextract.1: finally decided on feature set for cabextract 0.7, 415 so I updated the manual to reflect that. 416 4172003-03-12 Stuart Caie <kyzer@4u.net> 418 419 * wince_cab_format.txt: reverse engineered most of the file format 420 for Windows CE installation CAB header files. Windows CE uses 421 normal cabinet files, but the files inside the cabinets use short 422 filenames and a special binary header to specify full filenames, 423 install directories, registry entries and symbolic links. If 424 anyone wants to help fill in the remaining fields, I'm all ears. 425 4262002-11-19 Stuart Caie <kyzer@4u.net> 427 428 * cabextract.c: moved the generation of the correct unix filename 429 for an extracted file out of file_open() and into the main 430 process_cabinet() function (it now has a helper function called 431 create_output_name()). This is to make the real filename available 432 outside of file_open(). (See below) 433 434 * file_close(): chmod() and utime() are now called on the correct 435 filename :) 436 4372002-11-13 Stuart Caie <kyzer@4u.net> 438 439 * unix_directory_seperators(): this is a new function added to 440 determine whether the CAB file is using "wrong" UNIX-style forward 441 slashes as directory seperators. Microsoft CAB files use 442 MS-DOS backslashes, however the tools Cablinux and PowerArchiver 443 create CABs with forward-slashes. 444 4452002-09-12 Stuart Caie <kyzer@4u.net> 446 447 * file_cabs_in_file(): if the file itself doesn't exist, we no 448 longer print "Not a Microsoft cabinet file" for not finding any 449 cabinets in that file. 450 4512002-09-08 Stuart Caie <kyzer@4u.net> 452 453 * cabextract.c: cabextract used to segv if an LZX or Quantum 454 folder came after an MSZIP folder, because the window pointer 455 would be filled in by MSZIP's state. To solve this, I took the 456 window pointers and associated variables out of the state union, 457 and I also started clearing the state structure on startup. I also 458 removed the 'what was the old compression type / free window' code 459 and replaced it with a simple 'free LZX/QTM window if it exists' 460 before ZIP initialisation. 461 4622002-09-08 Stuart Caie <kyzer@4u.net> 463 464 * find_cabs_in_file(): if a file begins with "ISc(", cabextract 465 now prints a message about how to unpack InstallShield '.cab' 466 files, which begin with this signature. 467 4682002-09-08 Stuart Caie <kyzer@4u.net> 469 470 * cabextract.c: After seeing what some people think the command 471 line syntax is for cabextract is 472 (e.g. http://slashdot.org/comments.pl?sid=39401&cid=4210033) I 473 have decided to be nice to people who don't read manuals, and 474 refuse to extract files given on the command line if they've 475 already been extracted as part of another cabinet. This does 476 preclude the scenario where a file is not only part of a 477 multi-part set, but has a cabinet at offset 0 and _also_ has 478 embedded cabs later on. The new functionality is implemented by 479 the new functions remember_cabinet() and known_cabinet(), which 480 use a simple linked list. If you want the old behaviour of 481 cabextract back, do "find <cabs> -exec cabextract {} \;". 482 4832002-09-08 Stuart Caie <kyzer@4u.net> 484 485 * configure.in: Upgraded my autoconf to one that has the AC_EXEEXT 486 bug fixed (look up AC_EXEEXT xSYM on the Internet :). Now it 487 complains about me writing to LIBOBJS directly, so I use the macro 488 AC_LIBOBJ twice to add getopt and getopt1 to LIBOBJS. 489 4902002-08-20 Stuart Caie <kyzer@4u.net> 491 492 * AUTHORS, ChangeLog, NEWS, cabextract.c: fixed mis-spellings of 493 Matthew Russotto's name. 494 495 * ChangeLog: finished a half-completed changelog entry. 496 497 4982002-08-12 Stuart Caie <kyzer@4u.net> 499 500 * cabextract.c: now prints all errors and warnings to stderr 501 rather that stdout. I finally noticed that perror() prints to 502 stderr, and I want to follow suit. 503 5042002-08-11 Stuart Caie <kyzer@4u.net> 505 506 * extract_file(): now prints out the correct cabinet name in error 507 messages, in the case of files which are split over multiple 508 cabinet files and the 2nd or later split cabinet contains the 509 error. 510 511 * QTMdecompress(): fixed the QTM decoding error - basically, Matthew 512 used the bitstream reading macros from my LZX decompressor. Sadly, 513 these macros can only guarantee at maximum 17 bits available in the 514 bit buffer, and Quantum uses up to 19 bits. I rewrote the Quantum 515 bit buffer macros to be multi-pass (and therefore slower) so they 516 can get the requisite number of bits. 517 518 * QTMinit(): after fixing the decoding bug, I noticed that files 519 always failed extraction when going to a second folder. It turns out 520 that I forgot to reset QTM's window_posn. 521 522 * configure.in: added limits.h to the list of checked includes 523 524 * cabextract.c: ULONG_BITS now defined in terms of CHAR_BIT from 525 <limits.h> rather than fixed to 8 bits per char. Oddly, my system 526 seems to include <linux/limits.h> rather than <limits.h>. So, for 527 people like me, I also define CHAR_BIT to be 8 if it's not already 528 defined. 529 5302002-07-29 Stuart Caie <kyzer@4u.net> 531 532 * cabextract.c: The Ministry of Sensible Naming dictates that 533 load_cab() be renamed find_cabs_in_file(), and lose the 'search' 534 argument. Calls to load_cab() where the search argument = 0 (i.e., 535 when loading spanning cabinets) be changed to load_cab_offset(x,0). 536 5372002-07-25 Stuart Caie <kyzer@4u.net> 538 539 * load_cab(): Bah! off_t is defined as a signed long int, and 540 not an unsigned long int as I had previously thought. This means the 541 'valid cabinet' comparisions may fail. I have fixed this by making 542 these comparisons unsigned. 543 544 * cabinfo.c: added the new search mechanism to cabinfo. 545 5462002-07-25 Stuart Caie <kyzer@4u.net> 547 548 * process_cabinet(): rewrote the loading mechanism. Uses the new 549 load_cab() to get a list of cabinets in the base file. Also does 550 bi-directional loading of spanning cabinets. 551 552 * load_cab(): now takes a 'search' parameter. if search=0, the old 553 loading behaviour is performed, but if search=1, it now does the 554 exhaustive search for all matching cabinets and tries to load 555 them. If a load succeeds, it skips that section of the 556 file. Therefore, all embedded cabinets are found, yet most of the 557 file does not need to be searched. 558 559 * cabinet_find_header(): removed, see above. Also, in shifting the 560 search, I altered the search mechanism. It now uses a state 561 machine to get around border cases, rather than the flaky 'save 562 the last 20 bytes and put them at the start the next time around'. 563 564 * cabinet_read_entries(): now checks the MSCF signature, as there 565 is no longer a cabinet_find_header() to do this. 566 5672002-07-23 Stuart Caie <kyzer@4u.net> 568 569 * LZXdecompress(), QTMdecompress(): On systems where the LZ window 570 pointer is in "low memory", runsrc (window pointer - match offset) 571 could be below address 0, which wraps around to the end of memory, 572 so it appears runsrc is ahead of the LZ window, and so it does not 573 need 'fixing' before the match copy. Therefore the match data is 574 read from the incorrect, high address. Thanks to the NetBSD team 575 for discovering this and providing the patch. 576 5772002-07-22 Stuart Caie <kyzer@4u.net> 578 579 * file_close(): now honours your umask settings when extracting 580 files. Thanks to the NetBSD team for the patch. 581 582 * cabinet_seek(), cabinet_skip(): these now print errors if 583 fseek() returns an error. 584 585 * QTMdecompress(): finally! Added an implementation of the Quantum 586 method which was researched and written by Matthew Russotto. Many 587 thanks to him for all the hard work he did to produce this. I 588 tidied up the code to be more my style (and to be quite a bit 589 faster by inlining the bit buffer, H, L and C), but it's still all 590 his code running. 591 592 * find_next_cabinet_file(): this is a new function which finds the 593 "next cabinet" by opening the directory it would be in and reading 594 each filename case-insensitively. It also handles any such "next 595 cabinets" with directory elements (delimited with MS-DOS 596 backslashes). 597 598 * process_cabinet(): now uses find_next_cabinet_file() to get the 599 next cabinet file. This function also replaces the hack that gets 600 any directory path which might be embedded in the base cabinet 601 filename (as mentioned on the command line). 602 6032002-07-21 Stuart Caie <kyzer@4u.net> 604 605 * file_close(): fixed off-by-one error in setting the extracted 606 file date. Thanks to Claus Rasmussen. 607 6082002-07-20 Stuart Caie <kyzer@4u.net> 609 610 * file_open(): now removes any leading slashes from the name of 611 the file to be extracted. Thanks to the James Henstridge and 612 David Leonard for patches. 613 614 * ensure_filepath(): now does not try to examine the directory "" 615 (i.e. no directory at all) if given an absolute path (one that 616 start with a slash). Thanks to the James Henstridge for the patch. 617 6182002-04-30 Stuart Caie <kyzer@4u.net> 619 620 * cabextract.spec.in: changed the fixed version number to @VERSION@ 621 6222002-04-06 Stuart Caie <kyzer@4u.net> 623 624 * Makefile.am, configure.in: used the guide no_getopt_long.txt 625 included with the gengetopt package to add getopt_long 626 configuration to cabextract. Hopefully it all works now. Thanks to 627 the many people who pointed out this problem and to the many 628 people who offered solutions. 629 6302001-09-06 Stuart Caie <kyzer@4u.net> 631 632 * Makefile.am, configure.in: made cabextract.spec one of the auto- 633 generated files. Now I can do 'make distcheck' here to build a 634 distribution which can be installed using 'rpm -tb 635 cabextract-0.6.tar.gz'. Thanks to Daniel Resare for the know-how. 636 6372001-08-20 Stuart Caie <kyzer@4u.net> 638 639 * Makefile.am: added an LDADD line for cabextract's LIBOBJS 640 generated by configure. This means the AC_REPLACE_FUNCS line 641 should actually have an effect. 642 643 * configure.in: Removed getopt_long and mktime from the 644 AC_CHECK_FUNCS, as this is done anyway. 645 6462001-08-19 Stuart Caie <kyzer@4u.net> 647 648 * Makefile.am, configure.in, cabextract.c: moved the GNU getopt 649 sources to become an automatically added dependency if 650 getopt_long() can't be found in the standard library, just like 651 mktime() is handled. The getopt_long(), struct option and optarg 652 and optind definitions are taken from getopt.h if possible. If 653 they're not there, but getopt_long() was found with standard 654 includes files, it's assumed they're defined in the standard 655 include files. Otherwise, we define them ourselves. 656 657 * cabextract.c: now gets VERSION defined from configure via 658 config.h. 659 660 * decompress(): if the 'fix' option was used, the output buffer 661 would always be cleared before block decompression. A nice idea, 662 but the MSZIP method likes to keep the output buffer between 663 blocks. Thanks to Fernando Trias for spotting this. Stopped 664 clearing the output buffer. 665 666 * main(): the 'fix' variable wasn't initialised to zero, so on 667 some architectures, where the stack-space allocated to the 668 variable isn't cleared to zero, you always got the 'fix' option 669 selected. See above for why this was bad. 670 671 * process_cabinet(): now prints "Finished processing cabinet" when 672 finished extracting, instead of just a blank line. Still prints 673 blank lines for listing files. 674 6752001-08-05 Stuart Caie <kyzer@4u.net> 676 677 * Makefile.am: the manpage wasn't included in the distribution. 678 Fixed and re-issued the 0.3 release. 679 6802001-08-02 Stuart Caie <kyzer@4u.net> 681 682 * decompress(): now takes a 'fix' flag, which causes MSZIP errors 683 to be ignored. 684 685 * cabinet_get_entries(): now keeps the printable information about 686 previous and next cabinet parts 687 688 * process_cabinet(): now prints the printable information about 689 the next cabinet part in a multi-part cabinet 690 691 * file_open(): now prepends a given directory if wanted, and can 692 make the filename lowercase if wanted. 693 694 * main(): changed to using getopt_long to parse arguments. Added 695 -L (lowercase), -d (output to directory), -f (fix corrupt cabs), 696 -h (help), -q (quiet) and -v was recycled to become --version, 697 when used on its own. 698 699 * LZXdecompress(): major bug fixed; the updated R0, R1 and R2 in 700 uncompressed blocks were being stored in the uncomp_state block, 701 not local variables. At the end of the function, the local values 702 are always written back to the uncomp_state block. So the values 703 placed there by the uncompressed block header were always 704 overwritten. Thanks to Pavel Turbin for providing an example of 705 this. 706 707 * rindex(): this is the BSD precursor of the ANSI standard 708 function strrchr(). Oops! Now uses strrchr(), or rindex() if 709 strrchr() isn't available. 710 711 * cabinet_find_header(): now prints an error message if it can't 712 find a header. 713 7142001-04-30 Stuart Caie <kyzer@4u.net> 715 716 * fixed includes to include both <strings.h> and <string.h> if 717 they both exist, and made some signedness conversions explicit. 718 This should let cabextract compile with SGI's native 719 compiler. Thanks to Markus Nullmeier for the patch. 720 7212001-03-04 Stuart Caie <kyzer@4u.net> 722 723 * main(): now prints the version of cabextract in the copyright 724 line. 725 726 * cabinet_find_header(): now searches any kind of file, not just 727 files beginning with 'MZ' header. Also, always searches entire 728 file. This slows the search down, but increases the usefulness of 729 the search overall, IMHO. Thanks to Eric Sharkey for pointing this 730 out. 731 732 * LZXdecompress(): fixed problem in intel decoding: E8 must not 733 appear in the last 10 bytes, not the last 6 bytes... Thanks to Jae 734 Jung who pointed this out to me. I didn't believe him at first, 735 but he was quite right. Also thanks to Antoine Amanieux for 736 providing example files affected by this. 737 738 * process_cabinet(): now extends multipart cabinet filenames to be 739 in the same directory as the base cabinet. 740 741 * cabinet_open(): now only lowercases the filename part of a 742 cabinet name, not the path part. 743 7442001-03-03 Stuart Caie <kyzer@4u.net> 745 746 * LZXdecompress(): fixed LZX bit buffer exhaustion in where 747 READ_HUFFSYM() requests more bits than the buffer actually 748 contains: top-of-loop overflow check now allows for the input 749 pointer to be 16 bits past the end of the buffer, but checks to 750 ensure none of those 16 bits are actually used. Also increased 751 decomp_state.inbuf by two bytes and clear the two bytes after 752 loaded block in decompress(). Thanks to Jae Jung for pointing out 753 this bug, and for providing example files which exposed the bug. 754 7552001-02-26 Stuart Caie <kyzer@4u.net> 756 757 * added configure script / makefile using automake. 758 759 * file_close(): now sets the timestamp on extracted files. 760