diff options
Diffstat (limited to 'miscutils/bbconfig.c')
-rw-r--r-- | miscutils/bbconfig.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/miscutils/bbconfig.c b/miscutils/bbconfig.c index 0d649b4e5..286077168 100644 --- a/miscutils/bbconfig.c +++ b/miscutils/bbconfig.c | |||
@@ -3,10 +3,32 @@ | |||
3 | */ | 3 | */ |
4 | #include "libbb.h" | 4 | #include "libbb.h" |
5 | #include "bbconfigopts.h" | 5 | #include "bbconfigopts.h" |
6 | #if ENABLE_FEATURE_COMPRESS_BBCONFIG | ||
7 | # include "unarchive.h" | ||
8 | # include "bbconfigopts_bz2.h" | ||
9 | #endif | ||
6 | 10 | ||
7 | int bbconfig_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 11 | int bbconfig_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
8 | int bbconfig_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) | 12 | int bbconfig_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) |
9 | { | 13 | { |
14 | #if ENABLE_FEATURE_COMPRESS_BBCONFIG | ||
15 | bunzip_data *bd; | ||
16 | int i = start_bunzip(&bd, | ||
17 | /* src_fd: */ -1, | ||
18 | /* inbuf: */ (void *)bbconfig_config_bz2, | ||
19 | /* len: */ sizeof(bbconfig_config_bz2)); | ||
20 | /* read_bunzip can longjmp to start_bunzip, and ultimately | ||
21 | * end up here with i != 0 on read data errors! Not trivial */ | ||
22 | if (!i) { | ||
23 | /* Cannot use xmalloc: will leak bd in NOFORK case! */ | ||
24 | char *outbuf = malloc_or_warn(sizeof(bbconfig_config)); | ||
25 | if (outbuf) { | ||
26 | read_bunzip(bd, outbuf, sizeof(bbconfig_config)); | ||
27 | full_write1_str(outbuf); | ||
28 | } | ||
29 | } | ||
30 | #else | ||
10 | full_write1_str(bbconfig_config); | 31 | full_write1_str(bbconfig_config); |
32 | #endif | ||
11 | return 0; | 33 | return 0; |
12 | } | 34 | } |