realpath.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /*
  2. * This program is free software; you can redistribute it and/or modify
  3. * it under the terms of the GNU General Public License as published by
  4. * the Free Software Foundation; either version 2 of the License, or
  5. * (at your option) any later version.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. *
  12. * You should have received a copy of the GNU General Public License
  13. * along with this program; if not, write to the Free Software
  14. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  15. */
  16. /* BB_AUDIT SUSv3 N/A -- Apparently a busybox extension. */
  17. /* Mar 16, 2003 Manuel Novoa III (mjn3@codepoet.org)
  18. *
  19. * Now does proper error checking on output and returns a failure exit code
  20. * if one or more paths can not be resolved.
  21. */
  22. #include <limits.h>
  23. #include <stdlib.h>
  24. #include "busybox.h"
  25. int realpath_main(int argc, char **argv)
  26. {
  27. int retval = EXIT_SUCCESS;
  28. RESERVE_CONFIG_BUFFER(resolved_path, PATH_MAX);
  29. if (--argc == 0) {
  30. bb_show_usage();
  31. }
  32. do {
  33. argv++;
  34. if (realpath(*argv, resolved_path) != NULL) {
  35. puts(resolved_path);
  36. } else {
  37. retval = EXIT_FAILURE;
  38. bb_perror_msg("%s", *argv);
  39. }
  40. } while (--argc);
  41. #ifdef CONFIG_FEATURE_CLEAN_UP
  42. RELEASE_CONFIG_BUFFER(resolved_path);
  43. #endif
  44. bb_fflush_stdout_and_exit(retval);
  45. }