[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: Re: [PATCH 2/2 v7] truncate: new applet
From: Denys Vlasenko <vda.linux () googlemail ! com>
Date: 2015-03-22 16:57:08
Message-ID: CAK1hOcOiXuYE2aGFL_utyd+6mRts5VPmDAwBNH_m849-8JD62Q () mail ! gmail ! com
[Download RAW message or body]
Applied, thanks!
On Thu, Mar 19, 2015 at 2:30 PM, Ari Sundholm <ari@tuxera.com> wrote:
> Denys, is this patch acceptable? It has 7 iterations of review behind it
> and I find it generally useful. It won't bloat busybox much and is of
> course optional even if mainlined.
>
> On Fri, 2015-03-06 at 18:43 +0200, Ari Sundholm wrote:
>> From: Ari Sundholm <ari@tuxera.com>
>>
>> bloat-o-meter:
>>
>> function old new delta
>> truncate_main - 178 +178
>> .rodata 154411 154462 +51
>> packed_usage 30197 30214 +17
>> applet_names 2483 2492 +9
>> applet_main 2888 2896 +8
>> applet_nameofs 722 724 +2
>> ------------------------------------------------------------------------------
>> (add/remove: 2/0 grow/shrink: 5/0 up/down: 265/0) Total: 265 bytes
>>
>> 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().
>> v5: Add correct bloat-o-meter data.
>> v6: Use opt_complementary to check the presence of filenames, juggle the flags
>> to xopen() and shorten an error message.
>> v7: Do not die on first file on which ftruncate() fails.
>>
>> Signed-off-by: Ari Sundholm <ari@tuxera.com>
>> ---
>> coreutils/truncate.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 72 insertions(+)
>> create mode 100644 coreutils/truncate.c
>>
>> diff --git a/coreutils/truncate.c b/coreutils/truncate.c
>> new file mode 100644
>> index 0000000..d5b9b6a
>> --- /dev/null
>> +++ b/coreutils/truncate.c
>> @@ -0,0 +1,72 @@
>> +/*
>> + * Mini truncate implementation for busybox
>> + *
>> + * Copyright (C) 2015 by Ari Sundholm <ari@tuxera.com>
>> + *
>> + * 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_RDWR;
>> + int ret = EXIT_SUCCESS;
>> + char *size_str;
>> + off_t size;
>> +
>> + enum {
>> + OPT_NOCREATE = (1 << 0),
>> + OPT_SIZE = (1 << 1),
>> + };
>> +
>> + opt_complementary = "s:-1";
>> + opts = getopt32(argv, "cs:", &size_str);
>> +
>> + if (!(opts & OPT_NOCREATE))
>> + flags |= O_CREAT;
>> +
>> + size = XATOU_SFX(size_str, cwbkMG_suffixes);
>> +
>> + argv += optind;
>> + while (*argv) {
>> + int fd = xopen(*argv, flags);
>> + if (ftruncate(fd, size) == -1) {
>> + bb_perror_msg("%s: ftruncate", *argv);
>> + ret = EXIT_FAILURE;
>> + }
>> + xclose(fd);
>> + ++argv;
>> + }
>> +
>> + return ret;
>> +}
>
>
> _______________________________________________
> busybox mailing list
> busybox@busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic