diff options
| author | bors <bors@rust-lang.org> | 2013-09-18 22:15:59 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-09-18 22:15:59 -0700 |
| commit | 3c0013134cecbe9592f02ed5c6a94c06effb19d4 (patch) | |
| tree | 4c4db2e7638a0b3549108ff2aa9692ba5f6c826f /src | |
| parent | 4dacd736510b2ae28a54489fe88571f1a6de019f (diff) | |
| parent | c3ad785d83b583ad693424d9f0f993e36f0990f5 (diff) | |
| download | rust-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.rs | 21 | ||||
| -rw-r--r-- | src/rt/rust_builtin.cpp | 23 | ||||
| -rw-r--r-- | src/rt/rust_run_program.cpp | 71 | ||||
| -rw-r--r-- | src/rt/rustrt.def.in | 1 |
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 |
