summary refs log tree commit diff
path: root/src/librustdoc/rustdoc.rs
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-09-24 23:40:54 -0700
committerbors <bors@rust-lang.org>2013-09-24 23:40:54 -0700
commitdad32f703d3df22f4d6b021c23cf2c08ae0f3d66 (patch)
tree90481a078ea52746f03c4487485e6bd05e6eadbf /src/librustdoc/rustdoc.rs
parent6ed338caa7fd4017d57254cdc13a77e38505dd02 (diff)
parent6d03897376f8737e28a93693f90bd651e9d08e92 (diff)
downloadrust-dad32f703d3df22f4d6b021c23cf2c08ae0f3d66.tar.gz
rust-dad32f703d3df22f4d6b021c23cf2c08ae0f3d66.zip
auto merge of #9480 : brson/rust/noexit, r=thestinger
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/librustdoc/rustdoc.rs')
-rw-r--r--src/librustdoc/rustdoc.rs20
1 files changed, 8 insertions, 12 deletions
diff --git a/src/librustdoc/rustdoc.rs b/src/librustdoc/rustdoc.rs
index bc7e6c8926d..c3d8cdf028e 100644
--- a/src/librustdoc/rustdoc.rs
+++ b/src/librustdoc/rustdoc.rs
@@ -52,7 +52,7 @@ enum OutputFormat {
 }
 
 pub fn main() {
-    main_args(std::os::args());
+    std::os::set_exit_status(main_args(std::os::args()));
 }
 
 pub fn opts() -> ~[groups::OptGroup] {
@@ -76,14 +76,14 @@ pub fn usage(argv0: &str) {
                                   argv0), opts()));
 }
 
-pub fn main_args(args: &[~str]) {
+pub fn main_args(args: &[~str]) -> int {
     //use extra::getopts::groups::*;
 
     let matches = groups::getopts(args.tail(), opts()).unwrap();
 
     if matches.opt_present("h") || matches.opt_present("help") {
         usage(args[0]);
-        return;
+        return 0;
     }
 
     let (format, cratefile) = match matches.free.clone() {
@@ -92,17 +92,17 @@ pub fn main_args(args: &[~str]) {
         [s, _] => {
             println!("Unknown output format: `{}`", s);
             usage(args[0]);
-            exit(1);
+            return 1;
         }
         [_, .._] => {
             println!("Expected exactly one crate to process");
             usage(args[0]);
-            exit(1);
+            return 1;
         }
         _ => {
             println!("Expected an output format and then one crate");
             usage(args[0]);
-            exit(1);
+            return 1;
         }
     };
 
@@ -179,6 +179,8 @@ pub fn main_args(args: &[~str]) {
     }
     let ended = time::precise_time_ns();
     info2!("Took {:.03f}s", (ended as f64 - started as f64) / 1000000000f64);
+
+    return 0;
 }
 
 fn jsonify(crate: clean::Crate, res: ~[plugins::PluginJson], dst: Path) {
@@ -208,9 +210,3 @@ fn jsonify(crate: clean::Crate, res: ~[plugins::PluginJson], dst: Path) {
     let output = extra::json::Object(json).to_str();
     file.write(output.as_bytes());
 }
-
-fn exit(status: int) -> ! {
-    #[fixed_stack_segment]; #[inline(never)];
-    use std::libc;
-    unsafe { libc::exit(status as libc::c_int) }
-}