blob: 7fac471eb547e90431e41346f2436c300574cf60 [file] [log] [blame]
Bernhard Reutner-Fischerc7801c42006-05-19 18:35:03 +00001/* vi: set sw=4 ts=4: */
Glenn L McGrath62fae302002-12-10 00:14:33 +00002
Manuel Novoa III cad53642003-03-19 09:13:01 +00003/* BB_AUDIT SUSv3 N/A -- Apparently a busybox extension. */
4
5/* Mar 16, 2003 Manuel Novoa III (mjn3@codepoet.org)
6 *
7 * Now does proper error checking on output and returns a failure exit code
Denis Vlasenkoe1a0d482006-10-20 13:28:22 +00008 * if one or more paths cannot be resolved.
Bernhard Reutner-Fischerc7801c42006-05-19 18:35:03 +00009 *
10 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
Manuel Novoa III cad53642003-03-19 09:13:01 +000011 */
12
Glenn L McGrath62fae302002-12-10 00:14:33 +000013#include "busybox.h"
14
15int realpath_main(int argc, char **argv)
16{
Manuel Novoa III cad53642003-03-19 09:13:01 +000017 int retval = EXIT_SUCCESS;
18
"Vladimir N. Oleynik"a2eec602005-10-15 13:45:32 +000019#if PATH_MAX > (BUFSIZ+1)
Glenn L McGrath7b4e89b2002-12-10 03:16:37 +000020 RESERVE_CONFIG_BUFFER(resolved_path, PATH_MAX);
"Vladimir N. Oleynik"a2eec602005-10-15 13:45:32 +000021# define resolved_path_MUST_FREE 1
22#else
23#define resolved_path bb_common_bufsiz1
24# define resolved_path_MUST_FREE 0
25#endif
Glenn L McGrath62fae302002-12-10 00:14:33 +000026
Glenn L McGrath7b4e89b2002-12-10 03:16:37 +000027 if (--argc == 0) {
Manuel Novoa III cad53642003-03-19 09:13:01 +000028 bb_show_usage();
Glenn L McGrath62fae302002-12-10 00:14:33 +000029 }
30
Glenn L McGrath7b4e89b2002-12-10 03:16:37 +000031 do {
32 argv++;
33 if (realpath(*argv, resolved_path) != NULL) {
Glenn L McGrath62fae302002-12-10 00:14:33 +000034 puts(resolved_path);
35 } else {
Manuel Novoa III cad53642003-03-19 09:13:01 +000036 retval = EXIT_FAILURE;
37 bb_perror_msg("%s", *argv);
Glenn L McGrath62fae302002-12-10 00:14:33 +000038 }
Glenn L McGrath7b4e89b2002-12-10 03:16:37 +000039 } while (--argc);
40
"Vladimir N. Oleynik"a2eec602005-10-15 13:45:32 +000041#if ENABLE_FEATURE_CLEAN_UP && resolved_path_MUST_FREE
Glenn L McGrath7b4e89b2002-12-10 03:16:37 +000042 RELEASE_CONFIG_BUFFER(resolved_path);
Manuel Novoa III cad53642003-03-19 09:13:01 +000043#endif
Glenn L McGrath62fae302002-12-10 00:14:33 +000044
Denis Vlasenkof0ed3762006-10-26 23:21:47 +000045 fflush_stdout_and_exit(retval);
Glenn L McGrath7b4e89b2002-12-10 03:16:37 +000046}