busybox/coreutils/realpath.c
<<
>>
Prefs
   1/* vi: set sw=4 ts=4: */
   2
   3/* 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
   8 * if one or more paths cannot be resolved.
   9 *
  10 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  11 */
  12
  13#include "libbb.h"
  14
  15int realpath_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
  16int realpath_main(int argc UNUSED_PARAM, char **argv)
  17{
  18        int retval = EXIT_SUCCESS;
  19
  20#if PATH_MAX > (BUFSIZ+1)
  21        RESERVE_CONFIG_BUFFER(resolved_path, PATH_MAX);
  22# define resolved_path_MUST_FREE 1
  23#else
  24#define resolved_path bb_common_bufsiz1
  25# define resolved_path_MUST_FREE 0
  26#endif
  27
  28        if (!*++argv) {
  29                bb_show_usage();
  30        }
  31
  32        do {
  33                if (realpath(*argv, resolved_path) != NULL) {
  34                        puts(resolved_path);
  35                } else {
  36                        retval = EXIT_FAILURE;
  37                        bb_simple_perror_msg(*argv);
  38                }
  39        } while (*++argv);
  40
  41#if ENABLE_FEATURE_CLEAN_UP && resolved_path_MUST_FREE
  42        RELEASE_CONFIG_BUFFER(resolved_path);
  43#endif
  44
  45        fflush_stdout_and_exit(retval);
  46}
  47