aboutsummaryrefslogtreecommitdiff
path: root/archival/gzip.c
Commit message (Collapse)AuthorAgeFilesLines
* gzip: code shrinkGravatar Denys Vlasenko2019-09-061-44/+44
| | | | | | | | | | | | | | | | | | | Converted a few 16-bit variables and small arrays to 32-bit. Stopped pulling desc->FOO members into temporary local variables in gen_bitlen(): on register-starved arches, this is a loss, temporaries go into stack slots. Sprinkled a few "const" on pointer arguments. function old new delta pack_gzip 742 745 +3 gen_codes 101 97 -4 build_tree 886 833 -53 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/2 up/down: 3/-57) Total: -54 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: code shrinkGravatar Denys Vlasenko2019-09-051-9/+9
| | | | | | | function old new delta gzip_main 267 264 -3 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: set default compression level to 6 when CONFIG_FEATURE_GZIP_LEVELS=nGravatar Daniel Edgecumbe2019-09-051-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With this change, GNU gzip -n and BusyBox gzip now produce identical output assuming that CONFIG_GZIP_FAST=2. >> Excuse me, but I wonder one thing: Why should we follow >> strictly with gzip on the no-options default behavior? > First, the default 6 compression level is a de-facto standard. BSD gzip > and Apple gzip (on macOS) use this default as well. So there is a > reasonable expectation that different gzip implementations act the same. > For instance, if the default for busybox gzip becomes 9, then someone > writing a script using busybox gzip could reasonably expect that the > compression level will still be 9 when the same script is run on another > system. That would be wrong. Implementations should not deviate from > de-facto standards without a strong reason. > > Second, the inherent reason for this default has not gone away. While > processor speeds have exploded since the default was set, so has the > typical size of compressed files. Multiple gigabytes are nothing unusual > these days. And gzip is often used for compression on the fly, precisely > because it offers a good compromise between speed and compression ratio. > So I believe 6 continues to be a reasonable default. function old new delta deflate 939 927 -12 Signed-off-by: Daniel Edgecumbe <git@esotericnonsense.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: set compression flags correctly as per standardGravatar Daniel Edgecumbe2019-09-051-8/+18
| | | | | | | | | | With this change and CONFIG_GZIP_FAST=2, CONFIG_FEATURE_GZIP_LEVELS=y, GNU gzip and BusyBox gzip now produce identical output at each compression level (excluding 1..3, as BusyBox does not implement these levels). Signed-off-by: Daniel Edgecumbe <git@esotericnonsense.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: default level with ENABLE_FEATURE_GZIP_LEVELS should be 6Gravatar Daniel Edgecumbe2019-09-051-1/+1
| | | | | | | Fixes an off-by-one that actually resulted in level 7 being used Signed-off-by: Daniel Edgecumbe <git@esotericnonsense.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* libbb: reduce the overhead of single parameter bb_error_msg() callsGravatar James Byrne2019-07-021-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Back in 2007, commit 0c97c9d43707 ("'simple' error message functions by Loic Grenie") introduced bb_simple_perror_msg() to allow for a lower overhead call to bb_perror_msg() when only a string was being printed with no parameters. This saves space for some CPU architectures because it avoids the overhead of a call to a variadic function. However there has never been a simple version of bb_error_msg(), and since 2007 many new calls to bb_perror_msg() have been added that only take a single parameter and so could have been using bb_simple_perror_message(). This changeset introduces 'simple' versions of bb_info_msg(), bb_error_msg(), bb_error_msg_and_die(), bb_herror_msg() and bb_herror_msg_and_die(), and replaces all calls that only take a single parameter, or use something like ("%s", arg), with calls to the corresponding 'simple' version. Since it is likely that single parameter calls to the variadic functions may be accidentally reintroduced in the future a new debugging config option WARN_SIMPLE_MSG has been introduced. This uses some macro magic which will cause any such calls to generate a warning, but this is turned off by default to avoid use of the unpleasant macros in normal circumstances. This is a large changeset due to the number of calls that have been replaced. The only files that contain changes other than simple substitution of function calls are libbb.h, libbb/herror_msg.c, libbb/verror_msg.c and libbb/xfuncs_printf.c. In miscutils/devfsd.c, networking/udhcp/common.h and util-linux/mdev.c additonal macros have been added for logging so that single parameter and multiple parameter logging variants exist. The amount of space saved varies considerably by architecture, and was found to be as follows (for 'defconfig' using GCC 7.4): Arm: -92 bytes MIPS: -52 bytes PPC: -1836 bytes x86_64: -938 bytes Note that for the MIPS architecture only an exception had to be made disabling the 'simple' calls for 'udhcp' (in networking/udhcp/common.h) because it made these files larger on MIPS. Signed-off-by: James Byrne <james.byrne@origamienergy.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* config: update size informationGravatar Denys Vlasenko2018-12-281-1/+1
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: unbreak FEATURE_GZIP_LEVELS, closes 11171Gravatar Denys Vlasenko2018-07-241-6/+6
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* libbb: commonalize a bit of little-endian CRC32 table generation codeGravatar Denys Vlasenko2018-02-011-1/+1
| | | | | | | | | | | | | | | function old new delta global_crc32_new_table_le - 11 +11 crc32_new_table_le - 9 +9 inflate_unzip_internal 560 556 -4 flash_eraseall_main 823 819 -4 unpack_xz_stream 2403 2394 -9 lzop_main 121 112 -9 gzip_main 187 178 -9 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 0/5 up/down: 20/-35) Total: -15 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* libarchive: move bbunpack constants to bb_archive.hGravatar Denys Vlasenko2018-02-011-5/+5
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: "compressed_len" is unused, stop wasting code and time calculating itGravatar Denys Vlasenko2018-01-311-62/+31
| | | | | | | function old new delta flush_block 595 523 -72 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: remove unnecessary forward declarations, no code changesGravatar Denys Vlasenko2018-01-311-9/+0
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: flush output buffer after stored blocks only if necessaryGravatar Denys Vlasenko2018-01-311-1/+2
| | | | | | | function old new delta flush_block 671 680 +9 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: flush output buffer after stored blocks, they are not 32-bit alignedGravatar Denys Vlasenko2018-01-311-15/+20
| | | | | | | function old new delta flush_block 665 671 +6 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: make debugging of bits_sent less ugly, no code changesGravatar Denys Vlasenko2018-01-311-13/+8
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: code shrinkGravatar Denys Vlasenko2018-01-311-6/+5
| | | | | | | function old new delta flush_block 668 665 -3 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: code shrinkGravatar Denys Vlasenko2018-01-311-52/+56
| | | | | | | | | Use one memset to clear part of G1, and all of G2. function old new delta pack_gzip 838 828 -10 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: code shrinkGravatar Denys Vlasenko2018-01-311-4/+8
| | | | | | | function old new delta pack_gzip 861 838 -23 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: code shrink and speedupGravatar Denys Vlasenko2018-01-311-12/+17
| | | | | | | function old new delta pack_gzip 908 861 -47 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: optionally faster put_32bit()Gravatar Denys Vlasenko2018-01-311-2/+14
| | | | | | | function old new delta put_32bit 22 55 +33 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: speed up send_bits()Gravatar Denys Vlasenko2018-01-311-6/+6
| | | | | | | | | Replace one RMW op with store. This speeds up gzip of a png file by ~2%. function old new delta send_bits 62 66 +4 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: use "unsigned" type for bit fields and bit countsGravatar Denys Vlasenko2018-01-301-4/+4
| | | | | | This does not change any logic, those values should always be positive. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: use wider (32-bit, not 16) bi_bufGravatar Denys Vlasenko2018-01-301-11/+22
| | | | | | | | function old new delta bi_windup 76 74 -2 send_bits 70 62 -8 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: code shrinkGravatar Denys Vlasenko2018-01-301-13/+18
| | | | | | | function old new delta send_bits 92 70 -22 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: code shrinkGravatar Denys Vlasenko2018-01-301-13/+15
| | | | | | | | | | | | function old new delta fill_window_if_needed - 238 +238 deflate 924 907 -17 pack_gzip 809 790 -19 fill_window 216 - -216 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 0/2 up/down: 238/-252) Total: -14 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: code shrink (consolidate zeroing on reinit)Gravatar Denys Vlasenko2018-01-301-70/+55
| | | | | | | | function old new delta deflate - 938 +938 pack_gzip 1903 923 -980 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: fix debug code. Closes 10681Gravatar Denys Vlasenko2018-01-261-11/+16
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* regularize format of source file headers, no code changesGravatar Denys Vlasenko2017-09-181-1/+1
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* getopt32: remove applet_long_optionsGravatar Denys Vlasenko2017-08-081-3/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | FEATURE_GETOPT_LONG made dependent on LONG_OPTS. The folloving options are removed, now LONG_OPTS enables long options for affected applets: FEATURE_ENV_LONG_OPTIONS FEATURE_EXPAND_LONG_OPTIONS FEATURE_UNEXPAND_LONG_OPTIONS FEATURE_MKDIR_LONG_OPTIONS FEATURE_MV_LONG_OPTIONS FEATURE_RMDIR_LONG_OPTIONS FEATURE_ADDGROUP_LONG_OPTIONS FEATURE_ADDUSER_LONG_OPTIONS FEATURE_HWCLOCK_LONG_OPTIONS FEATURE_NSENTER_LONG_OPTS FEATURE_CHCON_LONG_OPTIONS FEATURE_RUNCON_LONG_OPTIONS They either had a small number of long options, or their long options are essential. Example: upstream addgroup and adduser have ONLY longopts, we should probably go further and get rid of non-standard short options. To this end, make addgroup and adduser "select LONG_OPTS". We had this breakage caused by us even in our own package! #if ENABLE_LONG_OPTS || !ENABLE_ADDGROUP /* We try to use --gid, not -g, because "standard" addgroup * has no short option -g, it has only long --gid. */ argv[1] = (char*)"--gid"; #else /* Breaks if system in fact does NOT use busybox addgroup */ argv[1] = (char*)"-g"; #endif xargs: its lone longopt no longer depends on DESKTOP, only on LONG_OPTS. hwclock TODO: get rid of incompatible -t, -l aliases to --systz, --localtime Shorten help texts by omitting long option when short opt alternative exists. Reduction of size comes from the fact that store of an immediate (an address of longopts) to a fixed address (global variable) is a longer insn than pushing that immediate or passing it in a register. This effect is CPU-agnostic. function old new delta getopt32 1350 22 -1328 vgetopt32 - 1318 +1318 getopt32long - 24 +24 tftpd_main 562 567 +5 scan_recursive 376 380 +4 collect_cpu 545 546 +1 date_main 1096 1095 -1 hostname_main 262 259 -3 uname_main 259 255 -4 setpriv_main 362 358 -4 rmdir_main 191 187 -4 mv_main 562 558 -4 ipcalc_main 548 544 -4 ifenslave_main 641 637 -4 gzip_main 192 188 -4 gunzip_main 77 73 -4 fsfreeze_main 81 77 -4 flock_main 318 314 -4 deluser_main 337 333 -4 cp_main 374 370 -4 chown_main 175 171 -4 applet_long_options 4 - -4 xargs_main 894 889 -5 wget_main 2540 2535 -5 udhcpc_main 2767 2762 -5 touch_main 436 431 -5 tar_main 1014 1009 -5 start_stop_daemon_main 1033 1028 -5 sed_main 682 677 -5 script_main 1082 1077 -5 run_parts_main 330 325 -5 rtcwake_main 459 454 -5 od_main 2169 2164 -5 nl_main 201 196 -5 modprobe_main 773 768 -5 mkdir_main 160 155 -5 ls_main 568 563 -5 install_main 773 768 -5 hwclock_main 411 406 -5 getopt_main 622 617 -5 fstrim_main 256 251 -5 env_main 198 193 -5 dumpleases_main 635 630 -5 dpkg_main 3991 3986 -5 diff_main 1355 1350 -5 cryptpw_main 233 228 -5 cpio_main 593 588 -5 conspy_main 1135 1130 -5 chpasswd_main 313 308 -5 adduser_main 887 882 -5 addgroup_main 416 411 -5 ftpgetput_main 351 345 -6 get_terminal_width_height 242 234 -8 expand_main 690 680 -10 static.expand_longopts 18 - -18 static.unexpand_longopts 27 - -27 mkdir_longopts 28 - -28 env_longopts 30 - -30 static.ifenslave_longopts 34 - -34 mv_longopts 46 - -46 static.rmdir_longopts 48 - -48 packed_usage 31739 31687 -52 ------------------------------------------------------------------------------ (add/remove: 2/8 grow/shrink: 3/49 up/down: 1352/-1840) Total: -488 bytes text data bss dec hex filename 915681 485 6880 923046 e15a6 busybox_old 915428 485 6876 922789 e14a5 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* config: deindent all help textsGravatar Denys Vlasenko2017-07-211-14/+14
| | | | | | Those two spaces after tab have no effect, and always a nuisance when editing. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* Update menuconfig items with approximate applet sizesGravatar Denys Vlasenko2017-07-181-1/+1
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* archival: add option -k "keep" to gzip/bzip2/lzop, add -U "nokeep" to lzopGravatar Denys Vlasenko2017-06-151-5/+6
| | | | | | | | | | | | function old new delta bbunpack 745 779 +34 lzop_main 93 121 +28 do_lzo_compress 320 328 +8 packed_usage 31685 31653 -32 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/1 up/down: 70/-32) Total: 38 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* fix "ifdef ENABLE_foo": should always be "#if ENABLE_foo"Gravatar Denys Vlasenko2017-06-151-4/+4
| | | | | | | | | | | | function old new delta pack_gzip 1729 1789 +60 fill_window 220 216 -4 static.gzip_level_config 24 - -24 gzip_main 275 192 -83 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 1/2 up/down: 60/-111) Total: -51 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* Big cleanup in config help and descriptionGravatar Denys Vlasenko2017-01-101-3/+1
| | | | | | | | | | | | | Redundant help texts (one which only repeats the description) are deleted. Descriptions and help texts are trimmed. Some config options are moved, even across menus. No config option _names_ are changed. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* Allow 'gzip -d' and 'bzip2 -d' without gunzip or bunzip2Gravatar Kang-Che Sung2017-01-091-7/+17
| | | | | | | Idea copied from the "ip" applet. Signed-off-by: Kang-Che Sung <explorer09@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: fix compression level bug. Closes 9131Gravatar Natanael Copa2016-08-151-4/+1
| | | | | | | | | | | | | | | | | fix broken logic to get the gzip_level_config value from options -1 to -9. This fixes an off-by-one bug that caused gzip -9 output bigger files than the other compression levels. It fixes so that compression level 1 to 3 are actually mapped to level 4 as comments say. It also fixes that levels -4 to -9 is mapped to correct level and avoids out-of-bounds access. Signed-off-by: Natanael Copa <ncopa@alpinelinux.org> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* randomconfig fixes 4Gravatar Denys Vlasenko2016-06-201-1/+3
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: add support for --no-name long optionGravatar Aaro Koskinen2015-10-271-0/+1
| | | | | | | | | | Add support for --no-name long option. Just silently ignore it like the short -n option. This allows to use busybox gzip with Lynx browser. Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* Removes stray empty line from codeGravatar Maninder Singh2015-07-131-3/+0
| | | | | | | | | This patch removes stray empty line from busybox code reported by script find_stray_empty_lines Signed-off-by: Maninder Singh <maninder1.s@samsung.com> Signed-off-by: Akhilesh Kumar <akhilesh.k@samsung.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: add support for compression levels 4-9Gravatar Aaro Koskinen2015-04-261-10/+62
| | | | | | | | | | | | | | function old new delta gzip_main 192 282 +90 static.gzip_level_config - 24 +24 packed_usage 30439 30459 +20 fill_window 216 220 +4 pack_gzip 1789 1729 -60 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 3/1 up/down: 138/-60) Total: 78 bytes Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: trivial code shrink -5 bytesGravatar Denys Vlasenko2015-02-031-4/+4
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: speed up and shrink put_16bit()Gravatar Denys Vlasenko2015-02-021-7/+34
| | | | | | | function old new delta put_16bit 104 98 -6 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* gzip: do not store timestamp in gzip headerGravatar Rich Felker2015-02-021-4/+16
| | | | | | | | | | | | | | | | Storing the original file's modification time in the output file is harmful (precludes deterministic results) and unlike official gzip, the busybox version provides no way to suppress this behavior; the -n option is silently ignored. Rather than trying to make -n work, this patch just removes the timestamp-storing functionality. It should be considered deprecated anyway; it's not Y2038-safe and gunzip ignores it by default. Per RFC 1952, 0 is the correct value to store to indicate that there is no timestamp. Signed-off-by: Rich Felker <dalias@libc.org> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* Rename transformer_aux_data_t -> transformer_state_tGravatar Denys Vlasenko2014-12-071-1/+1
| | | | | | No code changes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* archival/*: move "config:" snippets into .c filesGravatar Denys Vlasenko2013-11-141-2/+26
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* archival/*: move "applet:" snippets into .c filesGravatar Denys Vlasenko2013-11-141-0/+1
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* archival/*: move "kbuild:" snippets into .c filesGravatar Denys Vlasenko2013-11-141-0/+2
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* whitespace fixes. no code changesGravatar Denys Vlasenko2013-01-141-8/+8
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* update seamless uncompression codeGravatar Denys Vlasenko2012-03-061-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change makes "tar tf hello_world.txz" work without adding special-casing for ".txz" extension. It also removes ever-growing magic checking code in rpm2cpio and get_header_tar - we reuse one which lives in setup_unzip_on_fd. function old new delta unpack_gz_stream 7 566 +559 check_signature16 - 70 +70 setup_unzip_on_fd 99 142 +43 handle_SIGCHLD - 41 +41 unpack_bz2_stream 342 376 +34 unzip_main 2352 2385 +33 bbunpack 503 533 +30 open_transformer 74 102 +28 unpack_Z_stream 1278 1304 +26 unpack_gunzip 101 123 +22 init_transformer_aux_data - 18 +18 unpack_xz_stream 2388 2402 +14 open_zipped 131 141 +10 rpm_main 1358 1363 +5 get_header_tar_lzma 52 57 +5 get_header_tar_bz2 52 57 +5 unpack_lzma_stream 2698 2702 +4 hash_find 234 233 -1 get_header_tar 1759 1733 -26 get_header_tar_gz 92 57 -35 unpack_uncompress 51 12 -39 rpm2cpio_main 201 147 -54 unpack_unxz 67 12 -55 unpack_bz2_stream_prime 55 - -55 get_header_tar_Z 86 - -86 unpack_gz_stream_with_info 539 - -539 ------------------------------------------------------------------------------ (add/remove: 3/3 grow/shrink: 14/6 up/down: 947/-890) Total: 57 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* rename archive.h to bb_archive.h. no code changesGravatar Denys Vlasenko2011-09-221-1/+1
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>