swaponoff: add support for -e
[oweals/busybox.git] / miscutils / bbconfig.c
index f2c692c9b55f380c7bed68b8ad359b8a4cfbec9f..e5f4eb379f0d2d9410e792dc4bb968ec078f77fc 100644 (file)
@@ -1,8 +1,40 @@
-#include "busybox.h"
+/* vi: set sw=4 ts=4: */
+/* This file was released into the public domain by Paul Fox.
+ */
+
+//usage:#define bbconfig_trivial_usage
+//usage:       ""
+//usage:#define bbconfig_full_usage "\n\n"
+//usage:       "Print the config file used by busybox build"
+
+#include "libbb.h"
 #include "bbconfigopts.h"
+#if ENABLE_FEATURE_COMPRESS_BBCONFIG
+# include "bb_archive.h"
+# include "bbconfigopts_bz2.h"
+#endif
 
-int bbconfig_main(int argc, char **argv)
+int bbconfig_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+int bbconfig_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
 {
-       printf(bbconfig_config);
+#if ENABLE_FEATURE_COMPRESS_BBCONFIG
+       bunzip_data *bd;
+       int i = start_bunzip(&bd,
+                       /* src_fd: */ -1,
+                       /* inbuf:  */ 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;
 }