about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-09-18 22:15:59 -0700
committerbors <bors@rust-lang.org>2013-09-18 22:15:59 -0700
commit3c0013134cecbe9592f02ed5c6a94c06effb19d4 (patch)
tree4c4db2e7638a0b3549108ff2aa9692ba5f6c826f /src
parent4dacd736510b2ae28a54489fe88571f1a6de019f (diff)
parentc3ad785d83b583ad693424d9f0f993e36f0990f5 (diff)
downloadrust-3c0013134cecbe9592f02ed5c6a94c06effb19d4.tar.gz
rust-3c0013134cecbe9592f02ed5c6a94c06effb19d4.zip
auto merge of #9280 : alexcrichton/rust/less-c++, r=brson
Some of the functions could be converted to rust, but the functions dealing with
signals were moved to rust_builtin.cpp instead (no reason to keep the original
file around for one function).

Closes #2674

Because less C++ is better C++!
Diffstat (limited to 'src')
-rw-r--r--src/libstd/run.rs21
-rw-r--r--src/rt/rust_builtin.cpp23
-rw-r--r--src/rt/rust_run_program.cpp71
-rw-r--r--src/rt/rustrt.def.in1
4 files changed, 40 insertions, 76 deletions
diff --git a/src/libstd/run.rs b/src/libstd/run.rs
index 7fdee0a7be6..362eab17fe7 100644
--- a/src/libstd/run.rs
+++ b/src/libstd/run.rs
@@ -643,15 +643,28 @@ fn spawn_process_os(prog: &str, args: &[~str],
     use libc::funcs::bsd44::getdtablesize;
 
     mod rustrt {
-        use libc::c_void;
-
         #[abi = "cdecl"]
         extern {
             pub fn rust_unset_sigprocmask();
-            pub fn rust_set_environ(envp: *c_void);
         }
     }
 
+    #[cfg(windows)]
+    unsafe fn set_environ(_envp: *c_void) {}
+    #[cfg(target_os = "macos")]
+    unsafe fn set_environ(envp: *c_void) {
+        externfn!(fn _NSGetEnviron() -> *mut *c_void);
+
+        *_NSGetEnviron() = envp;
+    }
+    #[cfg(not(target_os = "macos"), not(windows))]
+    unsafe fn set_environ(envp: *c_void) {
+        extern {
+            static mut environ: *c_void;
+        }
+        environ = envp;
+    }
+
     unsafe {
 
         let pid = fork();
@@ -685,7 +698,7 @@ fn spawn_process_os(prog: &str, args: &[~str],
 
         do with_envp(env) |envp| {
             if !envp.is_null() {
-                rustrt::rust_set_environ(envp);
+                set_environ(envp);
             }
             do with_argv(prog, args) |argv| {
                 execvp(*argv, argv);
diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp
index 4b718303f2c..8877b082588 100644
--- a/src/rt/rust_builtin.cpp
+++ b/src/rt/rust_builtin.cpp
@@ -643,6 +643,29 @@ rust_valgrind_stack_deregister(unsigned int id) {
   VALGRIND_STACK_DEREGISTER(id);
 }
 
+#if defined(__WIN32__)
+
+extern "C" CDECL void
+rust_unset_sigprocmask() {
+    // empty stub for windows to keep linker happy
+}
+
+#else
+
+#include <signal.h>
+#include <unistd.h>
+
+extern "C" CDECL void
+rust_unset_sigprocmask() {
+    // this can't be safely converted to rust code because the
+    // representation of sigset_t is platform-dependent
+    sigset_t sset;
+    sigemptyset(&sset);
+    sigprocmask(SIG_SETMASK, &sset, NULL);
+}
+
+#endif
+
 //
 // Local Variables:
 // mode: C++
diff --git a/src/rt/rust_run_program.cpp b/src/rt/rust_run_program.cpp
deleted file mode 100644
index 25cbaf822f0..00000000000
--- a/src/rt/rust_run_program.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-
-#include "rust_globals.h"
-
-#ifdef __APPLE__
-#include <crt_externs.h>
-#endif
-
-#if defined(__WIN32__)
-
-extern "C" CDECL void
-rust_unset_sigprocmask() {
-    // empty stub for windows to keep linker happy
-}
-
-extern "C" CDECL void
-rust_set_environ(void* envp) {
-    // empty stub for windows to keep linker happy
-}
-
-#elif defined(__GNUC__)
-
-#include <signal.h>
-#include <unistd.h>
-
-#ifdef __FreeBSD__
-extern char **environ;
-#endif
-
-extern "C" CDECL void
-rust_unset_sigprocmask() {
-    // this can't be safely converted to rust code because the
-    // representation of sigset_t is platform-dependent
-    sigset_t sset;
-    sigemptyset(&sset);
-    sigprocmask(SIG_SETMASK, &sset, NULL);
-}
-
-extern "C" CDECL void
-rust_set_environ(void* envp) {
-    // FIXME: this could actually be converted to rust (see issue #2674)
-#ifdef __APPLE__
-    *_NSGetEnviron() = (char **) envp;
-#else
-    environ = (char **) envp;
-#endif
-}
-
-#else
-#error "Platform not supported."
-#endif
-
-//
-// Local Variables:
-// mode: C++
-// fill-column: 78;
-// indent-tabs-mode: nil
-// c-basic-offset: 4
-// buffer-file-coding-system: utf-8-unix
-// compile-command: "make -k -C $RBUILD 2>&1 | sed -e 's/\\/x\\//x:\\//g'";
-// End:
-//
diff --git a/src/rt/rustrt.def.in b/src/rt/rustrt.def.in
index 6059d647614..7a9149187d8 100644
--- a/src/rt/rustrt.def.in
+++ b/src/rt/rustrt.def.in
@@ -25,7 +25,6 @@ rust_list_dir_wfd_fp_buf
 rust_log_console_on
 rust_log_console_off
 rust_should_log_console
-rust_set_environ
 rust_unset_sigprocmask
 rust_env_pairs
 upcall_rust_personality