diff options
author | Denys Vlasenko | 2009-06-12 13:16:21 +0200 |
---|---|---|
committer | Denys Vlasenko | 2009-06-12 13:16:21 +0200 |
commit | a99aa6e9c410bb0fc43ac37f105801a9b330438f (patch) | |
tree | f96f1c989b0f442a4a2fd1836c6a239337232806 | |
parent | 641dd7b0804838f334137accd6df6802254f7f54 (diff) | |
download | busybox-a99aa6e9c410bb0fc43ac37f105801a9b330438f.zip busybox-a99aa6e9c410bb0fc43ac37f105801a9b330438f.tar.gz |
readlink: support -n, -v, -s and -q too if support for -f is requested
function old new delta
readlink_main 104 135 +31
packed_usage 26322 26321 -1
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 31/-1) Total: 30 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | coreutils/readlink.c | 33 | ||||
-rw-r--r-- | include/usage.h | 7 |
2 files changed, 33 insertions, 7 deletions
diff --git a/coreutils/readlink.c b/coreutils/readlink.c index 8d44562..20df38b 100644 --- a/coreutils/readlink.c +++ b/coreutils/readlink.c @@ -6,9 +6,31 @@ * * Licensed under GPL v2 or later, see file LICENSE in this tarball for details. */ - #include "libbb.h" +/* + * # readlink --version + * readlink (GNU coreutils) 6.10 + * # readlink --help + * -f, --canonicalize + * canonicalize by following every symlink in + * every component of the given name recursively; + * all but the last component must exist + * -e, --canonicalize-existing + * canonicalize by following every symlink in + * every component of the given name recursively, + * all components must exist + * -m, --canonicalize-missing + * canonicalize by following every symlink in + * every component of the given name recursively, + * without requirements on components existence + * -n, --no-newline do not output the trailing newline + * -q, --quiet, -s, --silent suppress most error messages + * -v, --verbose report error messages + * + * bbox supports: -f -n -v (fully), -q -s (accepts but ignores) + */ + int readlink_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int readlink_main(int argc UNUSED_PARAM, char **argv) { @@ -20,7 +42,7 @@ int readlink_main(int argc UNUSED_PARAM, char **argv) unsigned opt; /* We need exactly one non-option argument. */ opt_complementary = "=1"; - opt = getopt32(argv, "f"); + opt = getopt32(argv, "fnvsq"); fname = argv[optind]; ) IF_NOT_FEATURE_READLINK_FOLLOW( @@ -30,9 +52,10 @@ int readlink_main(int argc UNUSED_PARAM, char **argv) ) /* compat: coreutils readlink reports errors silently via exit code */ - logmode = LOGMODE_NONE; + if (!(opt & 4)) /* not -v */ + logmode = LOGMODE_NONE; - if (opt) { + if (opt & 1) { /* -f */ buf = realpath(fname, pathbuf); } else { buf = xmalloc_readlink_or_warn(fname); @@ -40,7 +63,7 @@ int readlink_main(int argc UNUSED_PARAM, char **argv) if (!buf) return EXIT_FAILURE; - puts(buf); + printf((opt & 2) ? "%s" : "%s\n", buf); if (ENABLE_FEATURE_CLEAN_UP && !opt) free(buf); diff --git a/include/usage.h b/include/usage.h index e606925..6fb31e2 100644 --- a/include/usage.h +++ b/include/usage.h @@ -3466,12 +3466,15 @@ "files do not block on disk I/O" #define readlink_trivial_usage \ - IF_FEATURE_READLINK_FOLLOW("[-f] ") "FILE" + IF_FEATURE_READLINK_FOLLOW("[-fnv] ") "FILE" #define readlink_full_usage "\n\n" \ "Display the value of a symlink" \ IF_FEATURE_READLINK_FOLLOW( "\n" \ "\nOptions:" \ - "\n -f Canonicalize by following all symlinks") \ + "\n -f Canonicalize by following all symlinks" \ + "\n -n Don't add newline" \ + "\n -v Verbose" \ + ) \ #define readprofile_trivial_usage \ "[OPTIONS]..." |