On March 5, 2015 8:08:13 PM GMT+01:00, Ari Sundholm <[email protected]> wrote: >On Thu, 2015-03-05 at 19:17 +0100, Bernhard Reutner-Fischer wrote: >> On March 5, 2015 2:28:28 PM GMT+01:00, Ari Sundholm <[email protected]> >wrote: >> >From: Ari Sundholm <[email protected]> >> > >> >bloat-o-meter: >> > >> >function old new >> >delta >> >.rodata 154411 154480 >> >+69 >> >>------------------------------------------------------------------------------ >> >(add/remove: 0/0 grow/shrink: 1/0 up/down: 69/0) >Total: >> >69 bytes >> >> Wrong baseline? > >I rechecked and got the same result. It is entirely possible that I am >using bloat-o-meter wrong, so here is what I did: > >1. git checkout <last commit before the truncate patch> >2. make >3. mv busybox busybox-beforetruncate >4. git checkout <commit with the truncate patch> >5. make oldconfig, say Y to truncate >6. make >7. scripts/bloat-o-meter busybox-beforetruncate busybox >8. get the results above: +69 bytes. > >Now that I think of it, I probably should use the unstripped >executables? The results look different and seem to make more sense >when >I compare those.
Yes. Thanks > >If this is indeed the case, I guess I'll roll a v5 with the correct >values. > >> Why is that C impl better than a shell script around dd? > >In terms of size or in general? The applet's small in terms of code and >the usage strings are compressed, but now that I think of it, 69 bytes >just sounds too little. If you meant the latter, it is a matter of >taste, I guess. I actually used such a dd wrapper script for quite a >while until I wrote this applet. > >Best regards, >Ari Sundholm >[email protected] > >> Thanks, >> > >> >v2: Make dd and truncate share a common suffix struct. >> >v3: Split suffix struct move into separate commit, make applet >NOFORK, >> >adjust >> > error message. >> >v4: Use bb_error_msg_and_die() instead of bb_error_msg() + >xfunc_die(). >> > >> >Signed-off-by: Ari Sundholm <[email protected]> >> >--- >> >coreutils/truncate.c | 73 >> >++++++++++++++++++++++++++++++++++++++++++++++++++++ >> > 1 file changed, 73 insertions(+) >> > create mode 100644 coreutils/truncate.c >> > >> >diff --git a/coreutils/truncate.c b/coreutils/truncate.c >> >new file mode 100644 >> >index 0000000..5d7c4f9 >> >--- /dev/null >> >+++ b/coreutils/truncate.c >> >@@ -0,0 +1,73 @@ >> >+/* >> >+ * Mini truncate implementation for busybox >> >+ * >> >+ * Copyright (C) 2015 by Ari Sundholm <[email protected]> >> >+ * >> >+ * Licensed under GPLv2 or later, see file LICENSE in this source >> >tree. >> >+ */ >> >+ >> >+//config:config TRUNCATE >> >+//config: bool "truncate" >> >+//config: default y >> >+//config: help >> >+//config: truncate truncates files to a given size. If a file >does >> >+//config: not exist, it is created unless told otherwise. >> >+ >> >+//kbuild:lib-$(CONFIG_TRUNCATE) += truncate.o >> >+//applet:IF_TRUNCATE(APPLET_NOFORK(truncate, truncate, >BB_DIR_USR_BIN, >> >BB_SUID_DROP, truncate)) >> >+ >> >+//usage:#define truncate_trivial_usage >> >+//usage: "[-c] -s SIZE FILE..." >> >+//usage:#define truncate_full_usage "\n\n" >> >+//usage: "Truncate FILEs to the given size.\n" >> >+//usage: "\n -c Do not create any files." >> >+//usage: "\n -s SIZE Truncate to SIZE." >> >+//usage: >> >+//usage:#define truncate_example_usage >> >+//usage: "$ truncate -s 1G foo" >> >+ >> >+#include "libbb.h" >> >+ >> >+#if ENABLE_LFS >> >+# define XATOU_SFX xatoull_sfx >> >+#else >> >+# define XATOU_SFX xatoul_sfx >> >+#endif >> >+ >> >+/* This is a NOFORK applet. Be very careful! */ >> >+ >> >+int truncate_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; >> >+int truncate_main(int argc UNUSED_PARAM, char **argv) { >> >+ unsigned opts; >> >+ int flags = O_CREAT|O_RDWR; >> >+ int fd; >> >+ char *size_str; >> >+ off_t size; >> >+ >> >+ enum { >> >+ OPT_NOCREATE = (1 << 0), >> >+ OPT_SIZE = (1 << 1), >> >+ }; >> >+ >> >+ opt_complementary = "s"; >> >+ opts = getopt32(argv, "cs:", &size_str); >> >+ >> >+ argv += optind; >> >+ if (!*argv) >> >+ bb_error_msg_and_die("no files specified!"); >> >+ >> >+ if (opts & OPT_NOCREATE) >> >+ flags = O_RDWR; >> >+ >> >+ size = XATOU_SFX(size_str, cwbkMG_suffixes); >> >+ >> >+ while (*argv) { >> >+ fd = xopen(*argv, flags); >> >+ if (ftruncate(fd, size) == -1) >> >+ bb_perror_msg_and_die("ftruncate failed"); >> >+ xclose(fd); >> >+ ++argv; >> >+ } >> >+ >> >+ return 0; >> >+} >> >> _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
