diff options
author | Denys Vlasenko | 2017-08-04 16:46:17 +0200 |
---|---|---|
committer | Denys Vlasenko | 2017-08-04 16:46:17 +0200 |
commit | dd5a40246b91bd5d3d165998e6ac3cc4f7083f63 (patch) | |
tree | ffbd1f118040b36ae23f43d491bd8de097fd0843 /archival/tar.c | |
parent | 727948e585cb133c32c8d42570e5524c58190307 (diff) | |
download | busybox-dd5a40246b91bd5d3d165998e6ac3cc4f7083f63.zip busybox-dd5a40246b91bd5d3d165998e6ac3cc4f7083f63.tar.gz |
getopt32: move support for "always treat first arg as option" to users (tar/ar)
Now getopt() never leaks (and never performs) any xmalloc's.
function old new delta
ar_main 522 556 +34
tar_main 986 1014 +28
getopt32 1458 1350 -108
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 62/-108) Total: -46 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'archival/tar.c')
-rw-r--r-- | archival/tar.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/archival/tar.c b/archival/tar.c index 280ded4..f62b330 100644 --- a/archival/tar.c +++ b/archival/tar.c @@ -966,7 +966,9 @@ int tar_main(int argc UNUSED_PARAM, char **argv) tar_handle->ah_flags |= ARCHIVE_DONT_RESTORE_PERM; /* Prepend '-' to the first argument if required */ - opt_complementary = "--:" // first arg is options + if (argv[1] && argv[1][0] != '-' && argv[1][0] != '\0') + argv[1] = xasprintf("-%s", argv[1]); + opt_complementary = "tt:vv:" // count -t,-v #if ENABLE_FEATURE_TAR_LONG_OPTIONS && ENABLE_FEATURE_TAR_FROM "\xff::" // --exclude=PATTERN is a list |