about summary refs log tree commit diff
path: root/src/librustpkg
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2013-09-24 16:34:23 -0700
committerBrian Anderson <banderson@mozilla.com>2013-09-24 16:34:23 -0700
commit6d03897376f8737e28a93693f90bd651e9d08e92 (patch)
treedbf0199323e50ab9c39d0349f9eeed74b0616593 /src/librustpkg
parent753547963340cb973210ad2df5590c29bf46ddf1 (diff)
downloadrust-6d03897376f8737e28a93693f90bd651e9d08e92.tar.gz
rust-6d03897376f8737e28a93693f90bd651e9d08e92.zip
Don't use libc::exit. #9473
This can cause unexpected errors in the runtime when done while
scheduler threads are still initializing. Required some restructuring
of the main_args functions in our libraries.
Diffstat (limited to 'src/librustpkg')
-rw-r--r--src/librustpkg/rustpkg.rs24
1 files changed, 14 insertions, 10 deletions
diff --git a/src/librustpkg/rustpkg.rs b/src/librustpkg/rustpkg.rs
index 25d0802b9ad..c10ea2fb424 100644
--- a/src/librustpkg/rustpkg.rs
+++ b/src/librustpkg/rustpkg.rs
@@ -615,11 +615,10 @@ impl CtxMethods for BuildContext {
 
 pub fn main() {
     io::println("WARNING: The Rust package manager is experimental and may be unstable");
-    let args = os::args();
-    main_args(args);
+    os::set_exit_status(main_args(os::args()));
 }
 
-pub fn main_args(args: &[~str]) {
+pub fn main_args(args: &[~str]) -> int {
     let opts = ~[getopts::optflag("h"), getopts::optflag("help"),
                                         getopts::optflag("no-link"),
                                         getopts::optflag("no-trans"),
@@ -645,7 +644,7 @@ pub fn main_args(args: &[~str]) {
         result::Err(f) => {
             error(fmt!("%s", f.to_err_msg()));
 
-            return;
+            return 1;
         }
     };
     let mut help = matches.opt_present("h") ||
@@ -662,7 +661,7 @@ pub fn main_args(args: &[~str]) {
     if matches.opt_present("v") ||
        matches.opt_present("version") {
         rustc::version(args[0]);
-        return;
+        return 0;
     }
 
     let use_rust_path_hack = matches.opt_present("r") ||
@@ -701,7 +700,8 @@ pub fn main_args(args: &[~str]) {
     args.shift();
 
     if (args.len() < 1) {
-        return usage::general();
+        usage::general();
+        return 1;
     }
 
     let rustc_flags = RustcFlags {
@@ -739,11 +739,14 @@ pub fn main_args(args: &[~str]) {
         }
     }
     let cmd = match cmd_opt {
-        None => return usage::general(),
+        None => {
+            usage::general();
+            return 0;
+        }
         Some(cmd) => {
             help |= context::flags_ok_for_cmd(&rustc_flags, cfgs, *cmd, user_supplied_opt_level);
             if help {
-                return match *cmd {
+                match *cmd {
                     ~"build" => usage::build(),
                     ~"clean" => usage::clean(),
                     ~"do" => usage::do_cmd(),
@@ -757,6 +760,7 @@ pub fn main_args(args: &[~str]) {
                     ~"unprefer" => usage::unprefer(),
                     _ => usage::general()
                 };
+                return 0;
             } else {
                 cmd
             }
@@ -794,8 +798,8 @@ pub fn main_args(args: &[~str]) {
     // and at least one test case succeeds if rustpkg returns COPY_FAILED_CODE,
     // when actually, it might set the exit code for that even if a different
     // unhandled condition got raised.
-    if result.is_err() { os::set_exit_status(COPY_FAILED_CODE); }
-
+    if result.is_err() { return COPY_FAILED_CODE; }
+    return 0;
 }
 
 /**