bbconfig: add COMPRESS_BBCONFIG option

function                                             old     new   delta
bbconfig_config_bz2                                    -    4905   +4905
bbconfig_main                                         13      70     +57
bbconfig_config                                    21811       -  -21811
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 1/0 up/down: 4962/-21811)    Total: -16849 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2010-08-29 14:36:11 +02:00
parent 7715b48c36
commit 9ce07e778f
5 changed files with 70 additions and 9 deletions

View File

@@ -22,6 +22,20 @@ config BBCONFIG
The bbconfig applet will print the config file with which
busybox was built.
config FEATURE_COMPRESS_BBCONFIG
bool "Compress bbconfig data"
default y
depends on BBCONFIG
help
Store bbconfig data in compressed form, uncompress them on-the-fly
before output.
If you have a really tiny busybox with few applets enabled (and
bunzip2 isn't one of them), the overhead of the decompressor might
be noticeable. Also, if you run executables directly from ROM
and have very little memory, this might not be a win. Otherwise,
you probably want this.
config BEEP
bool "beep"
default y

View File

@@ -3,10 +3,32 @@
*/
#include "libbb.h"
#include "bbconfigopts.h"
#if ENABLE_FEATURE_COMPRESS_BBCONFIG
# include "unarchive.h"
# include "bbconfigopts_bz2.h"
#endif
int bbconfig_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int bbconfig_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
{
#if ENABLE_FEATURE_COMPRESS_BBCONFIG
bunzip_data *bd;
int i = start_bunzip(&bd,
/* src_fd: */ -1,
/* inbuf: */ (void *)bbconfig_config_bz2,
/* len: */ sizeof(bbconfig_config_bz2));
/* read_bunzip can longjmp to start_bunzip, and ultimately
* end up here with i != 0 on read data errors! Not trivial */
if (!i) {
/* Cannot use xmalloc: will leak bd in NOFORK case! */
char *outbuf = malloc_or_warn(sizeof(bbconfig_config));
if (outbuf) {
read_bunzip(bd, outbuf, sizeof(bbconfig_config));
full_write1_str(outbuf);
}
}
#else
full_write1_str(bbconfig_config);
#endif
return 0;
}