- make append_option and multiconvert static.
[oweals/busybox.git] / coreutils / realpath.c
index 7ef935ee078fabd9214e6c665e15685f24f0fa03..90402c95410eb86cdd592c248a52a81df9bc7b6c 100644 (file)
  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
+/* BB_AUDIT SUSv3 N/A -- Apparently a busybox extension. */
+
+/* Mar 16, 2003      Manuel Novoa III   (mjn3@codepoet.org)
+ *
+ * Now does proper error checking on output and returns a failure exit code
+ * if one or more paths can not be resolved.
+ */
+
 #include <limits.h>
 #include <stdlib.h>
-
 #include "busybox.h"
 
 int realpath_main(int argc, char **argv)
 {
-       char *resolved_path;
-       int count;
+       int retval = EXIT_SUCCESS;
 
-       if (argc == 1) {
-               show_usage();
-       }
+#if PATH_MAX > (BUFSIZ+1)
+       RESERVE_CONFIG_BUFFER(resolved_path, PATH_MAX);
+# define resolved_path_MUST_FREE 1
+#else
+#define resolved_path bb_common_bufsiz1
+# define resolved_path_MUST_FREE 0
+#endif
 
-       resolved_path = malloc(PATH_MAX);
+       if (--argc == 0) {
+               bb_show_usage();
+       }
 
-       for (count = 1; count < argc; count++) {
-               resolved_path = realpath(argv[count], resolved_path);
-               if (resolved_path) {
+       do {
+               argv++;
+               if (realpath(*argv, resolved_path) != NULL) {
                        puts(resolved_path);
                } else {
-                       perror_msg("%s", argv[count]);
+                       retval = EXIT_FAILURE;
+                       bb_perror_msg("%s", *argv);
                }
-       }
-       free(resolved_path);
+       } while (--argc);
+
+#if ENABLE_FEATURE_CLEAN_UP && resolved_path_MUST_FREE
+       RELEASE_CONFIG_BUFFER(resolved_path);
+#endif
 
-       return(EXIT_SUCCESS);
-}
\ No newline at end of file
+       bb_fflush_stdout_and_exit(retval);
+}