about summary refs log tree commit diff
path: root/src/libcore
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2012-09-27 14:08:37 -0700
committerGraydon Hoare <graydon@mozilla.com>2012-09-27 14:08:47 -0700
commitb41d5146cc4a80568a7a1e9bff2e6b89a91f9c11 (patch)
tree569427192721bb4d42b840595383366be18f3c32 /src/libcore
parent0bcb3bc536ec30a7a15c276de8e3c3c1e4643e1e (diff)
De-export os and libc. Close #2006.
Diffstat (limited to 'src/libcore')
-rw-r--r--src/libcore/core.rc3
-rw-r--r--src/libcore/core.rs2
-rw-r--r--src/libcore/libc.rs1401
-rw-r--r--src/libcore/os.rs219
4 files changed, 731 insertions, 894 deletions
diff --git a/src/libcore/core.rc b/src/libcore/core.rc
index d3a41d3d395..93e08562d3b 100644
--- a/src/libcore/core.rc
+++ b/src/libcore/core.rc
@@ -37,6 +37,7 @@ Implicitly, all crates behave as if they included the following prologue:
 #[no_core];
 
 #[legacy_modes];
+#[legacy_exports];
 
 #[warn(vecs_implicitly_copyable)];
 #[deny(non_camel_case_types)];
@@ -307,9 +308,7 @@ mod pipes;
 mod gc;
 #[legacy_exports]
 mod io;
-#[legacy_exports]
 mod libc;
-#[legacy_exports]
 mod os;
 #[legacy_exports]
 mod path;
diff --git a/src/libcore/core.rs b/src/libcore/core.rs
index dae77d66f25..c7261aa8c29 100644
--- a/src/libcore/core.rs
+++ b/src/libcore/core.rs
@@ -2,8 +2,6 @@
 
 // Export various ubiquitous types, constructors, methods.
 
-#[legacy_exports];
-
 use option::{Some, None};
 use Option = option::Option;
 use result::{Result, Ok, Err};
diff --git a/src/libcore/libc.rs b/src/libcore/libc.rs
index f99bc455466..88920d725c6 100644
--- a/src/libcore/libc.rs
+++ b/src/libcore/libc.rs
@@ -2,40 +2,40 @@
 #[forbid(deprecated_mode)];
 #[forbid(deprecated_pattern)];
 /*!
- * Bindings for libc.
- *
- * We consider the following specs reasonably normative with respect
- * to interoperating with the C standard library (libc/msvcrt):
- *
- * * ISO 9899:1990 ('C95', 'ANSI C', 'Standard C'), NA1, 1995.
- * * ISO 9899:1999 ('C99' or 'C9x').
- * * ISO 9945:1988 / IEEE 1003.1-1988 ('POSIX.1').
- * * ISO 9945:2001 / IEEE 1003.1-2001 ('POSIX:2001', 'SUSv3').
- * * ISO 9945:2008 / IEEE 1003.1-2008 ('POSIX:2008', 'SUSv4').
- *
- * Despite having several names each, these are *reasonably* coherent
- * point-in-time, list-of-definition sorts of specs. You can get each under a
- * variety of names but will wind up with the same definition in each case.
- *
- * Our interface to these libraries is complicated by the non-universality of
- * conformance to any of them. About the only thing universally supported is
- * the first (C95), beyond that definitions quickly become absent on various
- * platforms.
- *
- * We therefore wind up dividing our module-space up (mostly for the sake of
- * sanity while editing, filling-in-details and eliminating duplication) into
- * definitions common-to-all (held in modules named c95, c99, posix88, posix01
- * and posix08) and definitions that appear only on *some* platforms (named
- * 'extra'). This would be things like significant OSX foundation kit, or
- * win32 library kernel32.dll, or various fancy glibc, linux or BSD
- * extensions.
- *
- * In addition to the per-platform 'extra' modules, we define a module of
- * 'common BSD' libc routines that never quite made it into POSIX but show up
- * in multiple derived systems. This is the 4.4BSD r2 / 1995 release, the
- * final one from Berkeley after the lawsuits died down and the CSRG
- * dissolved.
- */
+* Bindings for libc.
+*
+* We consider the following specs reasonably normative with respect
+* to interoperating with the C standard library (libc/msvcrt):
+*
+* * ISO 9899:1990 ('C95', 'ANSI C', 'Standard C'), NA1, 1995.
+* * ISO 9899:1999 ('C99' or 'C9x').
+* * ISO 9945:1988 / IEEE 1003.1-1988 ('POSIX.1').
+* * ISO 9945:2001 / IEEE 1003.1-2001 ('POSIX:2001', 'SUSv3').
+* * ISO 9945:2008 / IEEE 1003.1-2008 ('POSIX:2008', 'SUSv4').
+*
+* Despite having several names each, these are *reasonably* coherent
+* point-in-time, list-of-definition sorts of specs. You can get each under a
+* variety of names but will wind up with the same definition in each case.
+*
+* Our interface to these libraries is complicated by the non-universality of
+* conformance to any of them. About the only thing universally supported is
+* the first (C95), beyond that definitions quickly become absent on various
+* platforms.
+*
+* We therefore wind up dividing our module-space up (mostly for the sake of
+* sanity while editing, filling-in-details and eliminating duplication) into
+* definitions common-to-all (held in modules named c95, c99, posix88, posix01
+* and posix08) and definitions that appear only on *some* platforms (named
+* 'extra'). This would be things like significant OSX foundation kit, or
+* win32 library kernel32.dll, or various fancy glibc, linux or BSD
+* extensions.
+*
+* In addition to the per-platform 'extra' modules, we define a module of
+* 'common BSD' libc routines that never quite made it into POSIX but show up
+* in multiple derived systems. This is the 4.4BSD r2 / 1995 release, the
+* final one from Berkeley after the lawsuits died down and the CSRG
+* dissolved.
+*/
 
 #[allow(non_camel_case_types)];
 
@@ -44,19 +44,19 @@
 
 // FIXME (#2006): change these to glob-exports when sufficiently supported.
 
-use types::common::c95::*;
-use types::common::c99::*;
-use types::common::posix88::*;
-use types::common::posix01::*;
-use types::common::posix08::*;
-use types::common::bsd44::*;
-use types::os::arch::c95::*;
-use types::os::arch::c99::*;
-use types::os::arch::posix88::*;
-use types::os::arch::posix01::*;
-use types::os::arch::posix08::*;
-use types::os::arch::bsd44::*;
-use types::os::arch::extra::*;
+pub use types::common::c95::*;
+pub use types::common::c99::*;
+pub use types::common::posix88::*;
+pub use types::common::posix01::*;
+pub use types::common::posix08::*;
+pub use types::common::bsd44::*;
+pub use types::os::arch::c95::*;
+pub use types::os::arch::c99::*;
+pub use types::os::arch::posix88::*;
+pub use types::os::arch::posix01::*;
+pub use types::os::arch::posix08::*;
+pub use types::os::arch::bsd44::*;
+pub use types::os::arch::extra::*;
 
 use consts::os::c95::*;
 use consts::os::c99::*;
@@ -83,756 +83,682 @@ use funcs::posix08::unistd::*;
 use funcs::bsd44::*;
 use funcs::extra::*;
 
-// FIXME (#2006): remove these 3 exports (and their uses next door in os::)
-// when export globs work. They provide access (for now) for os:: to dig
-// around in the rest of the platform-specific definitions.
-
-export types, funcs, consts;
-
 // Explicit export lists for the intersection (provided here) mean that
 // you can write more-platform-agnostic code if you stick to just these
 // symbols.
 
-export c_float, c_double, c_void, FILE, fpos_t;
-export DIR, dirent;
-export c_char, c_schar, c_uchar;
-export c_short, c_ushort, c_int, c_uint, c_long, c_ulong;
-export size_t, ptrdiff_t, clock_t, time_t;
-export c_longlong, c_ulonglong, intptr_t, uintptr_t;
-export off_t, dev_t, ino_t, pid_t, mode_t, ssize_t;
+pub use size_t;
+pub use c_float, c_double, c_void, FILE, fpos_t;
+pub use DIR, dirent;
+pub use c_char, c_schar, c_uchar;
+pub use c_short, c_ushort, c_int, c_uint, c_long, c_ulong;
+pub use size_t, ptrdiff_t, clock_t, time_t;
+pub use c_longlong, c_ulonglong, intptr_t, uintptr_t;
+pub use off_t, dev_t, ino_t, pid_t, mode_t, ssize_t;
 
-export EXIT_FAILURE, EXIT_SUCCESS, RAND_MAX,
-       EOF, SEEK_SET, SEEK_CUR, SEEK_END, _IOFBF, _IONBF, _IOLBF,
-       BUFSIZ, FOPEN_MAX, FILENAME_MAX, L_tmpnam, TMP_MAX,
-       O_RDONLY, O_WRONLY, O_RDWR, O_APPEND, O_CREAT, O_EXCL, O_TRUNC,
-       S_IFIFO, S_IFCHR, S_IFBLK, S_IFDIR, S_IFREG, S_IFMT, S_IEXEC,
-       S_IWRITE, S_IREAD, S_IRWXU, S_IXUSR, S_IWUSR, S_IRUSR, F_OK, R_OK,
-       W_OK, X_OK, STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO;
+pub use EXIT_FAILURE, EXIT_SUCCESS, RAND_MAX,
+EOF, SEEK_SET, SEEK_CUR, SEEK_END, _IOFBF, _IONBF, _IOLBF,
+BUFSIZ, FOPEN_MAX, FILENAME_MAX, L_tmpnam, TMP_MAX,
+O_RDONLY, O_WRONLY, O_RDWR, O_APPEND, O_CREAT, O_EXCL, O_TRUNC,
+S_IFIFO, S_IFCHR, S_IFBLK, S_IFDIR, S_IFREG, S_IFMT, S_IEXEC,
+S_IWRITE, S_IREAD, S_IRWXU, S_IXUSR, S_IWUSR, S_IRUSR, F_OK, R_OK,
+W_OK, X_OK, STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO;
 
-export isalnum, isalpha, iscntrl, isdigit, islower, isprint, ispunct,
-       isspace, isupper, isxdigit, tolower, toupper;
+pub use isalnum, isalpha, iscntrl, isdigit, islower, isprint, ispunct,
+isspace, isupper, isxdigit, tolower, toupper;
 
-export fopen, freopen, fflush, fclose, remove, tmpfile, setvbuf, setbuf,
-       fgetc, fgets, fputc, fputs, puts, ungetc, fread, fwrite, fseek, ftell,
-       rewind, fgetpos, fsetpos, feof, ferror, perror;
+pub use fopen, freopen, fflush, fclose, remove, tmpfile, setvbuf, setbuf,
+fgetc, fgets, fputc, fputs, puts, ungetc, fread, fwrite, fseek, ftell,
+rewind, fgetpos, fsetpos, feof, ferror, perror;
 
-export abs, labs, atof, atoi, strtod, strtol, strtoul, calloc, malloc,
-       realloc, free, abort, exit, system, getenv, rand, srand;
+pub use abs, labs, atof, atoi, strtod, strtol, strtoul, calloc, malloc,
+realloc, free, abort, exit, system, getenv, rand, srand;
 
-export strcpy, strncpy, strcat, strncat, strcmp, strncmp, strcoll, strchr,
-       strrchr, strspn, strcspn, strpbrk, strstr, strlen, strerror, strtok,
-       strxfrm, memcpy, memmove, memcmp, memchr, memset;
+pub use strcpy, strncpy, strcat, strncat, strcmp, strncmp, strcoll, strchr,
+strrchr, strspn, strcspn, strpbrk, strstr, strlen, strerror, strtok,
+strxfrm, memcpy, memmove, memcmp, memchr, memset;
 
-export chmod, mkdir;
-export popen, pclose, fdopen, fileno;
-export open, creat;
-export access, chdir, close, dup, dup2, execv, execve, execvp, getcwd,
-       getpid, isatty, lseek, pipe, read, rmdir, unlink, write;
+pub use chmod, mkdir;
+pub use popen, pclose, fdopen, fileno;
+pub use open, creat;
+pub use access, chdir, close, dup, dup2, execv, execve, execvp, getcwd,
+getpid, isatty, lseek, pipe, read, rmdir, unlink, write;
 
 
 mod types {
-    #[legacy_exports];
 
     // Types tend to vary *per architecture* so we pull their definitions out
     // into this module.
 
     // Standard types that are opaque or common, so are not per-target.
-    mod common {
-        #[legacy_exports];
-        mod c95 {
-            #[legacy_exports];
-            enum c_void {}
-            enum FILE {}
-            enum fpos_t {}
+    pub mod common {
+        pub mod c95 {
+            pub enum c_void {}
+            pub enum FILE {}
+            pub enum fpos_t {}
         }
-        mod c99 {
-            #[legacy_exports];
-            type int8_t = i8;
-            type int16_t = i16;
-            type int32_t = i32;
-            type int64_t = i64;
-            type uint8_t = u8;
-            type uint16_t = u16;
-            type uint32_t = u32;
-            type uint64_t = u64;
+        pub mod c99 {
+            pub type int8_t = i8;
+            pub type int16_t = i16;
+            pub type int32_t = i32;
+            pub type int64_t = i64;
+            pub type uint8_t = u8;
+            pub type uint16_t = u16;
+            pub type uint32_t = u32;
+            pub type uint64_t = u64;
         }
-        mod posix88 {
-            #[legacy_exports];
-            enum DIR {}
-            enum dirent {}
+        pub mod posix88 {
+            pub enum DIR {}
+            pub enum dirent {}
         }
-        mod posix01 {
-            #[legacy_exports]; }
-        mod posix08 {
-            #[legacy_exports]; }
-        mod bsd44 {
-            #[legacy_exports]; }
+        pub mod posix01 {}
+        pub mod posix08 {}
+        pub mod bsd44 {}
     }
 
     // Standard types that are scalar but vary by OS and arch.
 
     #[cfg(target_os = "linux")]
-    mod os {
-        #[legacy_exports];
+    pub mod os {
         #[cfg(target_arch = "x86")]
-        mod arch {
-            #[legacy_exports];
-            mod c95 {
-                #[legacy_exports];
-                type c_char = i8;
-                type c_schar = i8;
-                type c_uchar = u8;
-                type c_short = i16;
-                type c_ushort = u16;
-                type c_int = i32;
-                type c_uint = u32;
-                type c_long = i32;
-                type c_ulong = u32;
-                type c_float = f32;
-                type c_double = f64;
-                type size_t = u32;
-                type ptrdiff_t = i32;
-                type clock_t = i32;
-                type time_t = i32;
-                type wchar_t = i32;
+        pub mod arch {
+            pub mod c95 {
+                pub type c_char = i8;
+                pub type c_schar = i8;
+                pub type c_uchar = u8;
+                pub type c_short = i16;
+                pub type c_ushort = u16;
+                pub type c_int = i32;
+                pub type c_uint = u32;
+                pub type c_long = i32;
+                pub type c_ulong = u32;
+                pub type c_float = f32;
+                pub type c_double = f64;
+                pub type size_t = u32;
+                pub type ptrdiff_t = i32;
+                pub type clock_t = i32;
+                pub type time_t = i32;
+                pub type wchar_t = i32;
             }
-            mod c99 {
-                #[legacy_exports];
-                type c_longlong = i64;
-                type c_ulonglong = u64;
-                type intptr_t = int;
-                type uintptr_t = uint;
+            pub mod c99 {
+                pub type c_longlong = i64;
+                pub type c_ulonglong = u64;
+                pub type intptr_t = int;
+                pub type uintptr_t = uint;
             }
-            mod posix88 {
-                #[legacy_exports];
-                type off_t = i32;
-                type dev_t = u64;
-                type ino_t = u32;
-                type pid_t = i32;
-                type uid_t = u32;
-                type gid_t = u32;
-                type useconds_t = u32;
-                type mode_t = u32;
-                type ssize_t = i32;
-            }
-            mod posix01 {
-                #[legacy_exports]; }
-            mod posix08 {
-                #[legacy_exports]; }
-            mod bsd44 {
-                #[legacy_exports]; }
-            mod extra {
-                #[legacy_exports];
+            pub mod posix88 {
+                pub type off_t = i32;
+                pub type dev_t = u64;
+                pub type ino_t = u32;
+                pub type pid_t = i32;
+                pub type uid_t = u32;
+                pub type gid_t = u32;
+                pub type useconds_t = u32;
+                pub type mode_t = u32;
+                pub type ssize_t = i32;
             }
+            pub mod posix01 {}
+            pub mod posix08 {}
+            pub mod bsd44 {}
+            pub mod extra {}
         }
 
         #[cfg(target_arch = "x86_64")]
-        mod arch {
-            #[legacy_exports];
-            mod c95 {
-                #[legacy_exports];
-                type c_char = i8;
-                type c_schar = i8;
-                type c_uchar = u8;
-                type c_short = i16;
-                type c_ushort = u16;
-                type c_int = i32;
-                type c_uint = u32;
-                type c_long = i64;
-                type c_ulong = u64;
-                type c_float = f32;
-                type c_double = f64;
-                type size_t = u64;
-                type ptrdiff_t = i64;
-                type clock_t = i64;
-                type time_t = i64;
-                type wchar_t = i32;
+        pub mod arch {
+            pub mod c95 {
+                pub type c_char = i8;
+                pub type c_schar = i8;
+                pub type c_uchar = u8;
+                pub type c_short = i16;
+                pub type c_ushort = u16;
+                pub type c_int = i32;
+                pub type c_uint = u32;
+                pub type c_long = i64;
+                pub type c_ulong = u64;
+                pub type c_float = f32;
+                pub type c_double = f64;
+                pub type size_t = u64;
+                pub type ptrdiff_t = i64;
+                pub type clock_t = i64;
+                pub type time_t = i64;
+                pub type wchar_t = i32;
+            }
+            pub mod c99 {
+                pub type c_longlong = i64;
+                pub type c_ulonglong = u64;
+                pub type intptr_t = int;
+                pub type uintptr_t = uint;
             }
-            mod c99 {
-                #[legacy_exports];
-                type c_longlong = i64;
-                type c_ulonglong = u64;
-                type intptr_t = int;
-                type uintptr_t = uint;
+            pub mod posix88 {
+                pub type off_t = i64;
+                pub type dev_t = u64;
+                pub type ino_t = u64;
+                pub type pid_t = i32;
+                pub type uid_t = u32;
+                pub type gid_t = u32;
+                pub type useconds_t = u32;
+                pub type mode_t = u32;
+                pub type ssize_t = i64;
             }
-            mod posix88 {
-                #[legacy_exports];
-                type off_t = i64;
-                type dev_t = u64;
-                type ino_t = u64;
-                type pid_t = i32;
-                type uid_t = u32;
-                type gid_t = u32;
-                type useconds_t = u32;
-                type mode_t = u32;
-                type ssize_t = i64;
+            pub mod posix01 {
             }
-            mod posix01 {
-                #[legacy_exports]; }
-            mod posix08 {
-                #[legacy_exports]; }
-            mod bsd44 {
-                #[legacy_exports]; }
-            mod extra {
-                #[legacy_exports];
+            pub mod posix08 {
+            }
+            pub mod bsd44 {
+            }
+            pub mod extra {
             }
         }
     }
 
     #[cfg(target_os = "freebsd")]
-    mod os {
-        #[legacy_exports];
+    pub mod os {
         #[cfg(target_arch = "x86_64")]
-        mod arch {
-            #[legacy_exports];
-            mod c95 {
-                #[legacy_exports];
-                type c_char = i8;
-                type c_schar = i8;
-                type c_uchar = u8;
-                type c_short = i16;
-                type c_ushort = u16;
-                type c_int = i32;
-                type c_uint = u32;
-                type c_long = i64;
-                type c_ulong = u64;
-                type c_float = f32;
-                type c_double = f64;
-                type size_t = u64;
-                type ptrdiff_t = i64;
-                type clock_t = i32;
-                type time_t = i64;
-                type wchar_t = i32;
+        pub mod arch {
+            pub mod c95 {
+                pub type c_char = i8;
+                pub type c_schar = i8;
+                pub type c_uchar = u8;
+                pub type c_short = i16;
+                pub type c_ushort = u16;
+                pub type c_int = i32;
+                pub type c_uint = u32;
+                pub type c_long = i64;
+                pub type c_ulong = u64;
+                pub type c_float = f32;
+                pub type c_double = f64;
+                pub type size_t = u64;
+                pub type ptrdiff_t = i64;
+                pub type clock_t = i32;
+                pub type time_t = i64;
+                pub type wchar_t = i32;
+            }
+            pub mod c99 {
+                pub type c_longlong = i64;
+                pub type c_ulonglong = u64;
+                pub type intptr_t = int;
+                pub type uintptr_t = uint;
             }
-            mod c99 {
-                #[legacy_exports];
-                type c_longlong = i64;
-                type c_ulonglong = u64;
-                type intptr_t = int;
-                type uintptr_t = uint;
+            pub mod posix88 {
+                pub type off_t = i64;
+                pub type dev_t = u32;
+                pub type ino_t = u32;
+                pub type pid_t = i32;
+                pub type uid_t = u32;
+                pub type gid_t = u32;
+                pub type useconds_t = u32;
+                pub type mode_t = u16;
+                pub type ssize_t = i64;
             }
-            mod posix88 {
-                #[legacy_exports];
-                type off_t = i64;
-                type dev_t = u32;
-                type ino_t = u32;
-                type pid_t = i32;
-                type uid_t = u32;
-                type gid_t = u32;
-                type useconds_t = u32;
-                type mode_t = u16;
-                type ssize_t = i64;
+            pub mod posix01 {
             }
-            mod posix01 {
-                #[legacy_exports]; }
-            mod posix08 {
-                #[legacy_exports]; }
-            mod bsd44 {
-                #[legacy_exports]; }
-            mod extra {
-                #[legacy_exports];
+            pub mod posix08 {
+            }
+            pub mod bsd44 {
+            }
+            pub mod extra {
             }
         }
     }
 
     #[cfg(target_os = "win32")]
-    mod os {
-        #[legacy_exports];
+    pub mod os {
         #[cfg(target_arch = "x86")]
-        mod arch {
-            #[legacy_exports];
-            mod c95 {
-                #[legacy_exports];
-                type c_char = i8;
-                type c_schar = i8;
-                type c_uchar = u8;
-                type c_short = i16;
-                type c_ushort = u16;
-                type c_int = i32;
-                type c_uint = u32;
-                type c_long = i32;
-                type c_ulong = u32;
-                type c_float = f32;
-                type c_double = f64;
-                type size_t = u32;
-                type ptrdiff_t = i32;
-                type clock_t = i32;
-                type time_t = i32;
-                type wchar_t = u16;
+        pub mod arch {
+            pub mod c95 {
+                pub type c_char = i8;
+                pub type c_schar = i8;
+                pub type c_uchar = u8;
+                pub type c_short = i16;
+                pub type c_ushort = u16;
+                pub type c_int = i32;
+                pub type c_uint = u32;
+                pub type c_long = i32;
+                pub type c_ulong = u32;
+                pub type c_float = f32;
+                pub type c_double = f64;
+                pub type size_t = u32;
+                pub type ptrdiff_t = i32;
+                pub type clock_t = i32;
+                pub type time_t = i32;
+                pub type wchar_t = u16;
+            }
+            pub mod c99 {
+                pub type c_longlong = i64;
+                pub type c_ulonglong = u64;
+                pub type intptr_t = int;
+                pub type uintptr_t = uint;
             }
-            mod c99 {
-                #[legacy_exports];
-                type c_longlong = i64;
-                type c_ulonglong = u64;
-                type intptr_t = int;
-                type uintptr_t = uint;
+            pub mod posix88 {
+                pub type off_t = i32;
+                pub type dev_t = u32;
+                pub type ino_t = i16;
+                pub type pid_t = i32;
+                pub type useconds_t = u32;
+                pub type mode_t = u16;
+                pub type ssize_t = i32;
             }
-            mod posix88 {
-                #[legacy_exports];
-                type off_t = i32;
-                type dev_t = u32;
-                type ino_t = i16;
-                type pid_t = i32;
-                type useconds_t = u32;
-                type mode_t = u16;
-                type ssize_t = i32;
+            pub mod posix01 {
             }
-            mod posix01 {
-                #[legacy_exports]; }
-            mod posix08 {
-                #[legacy_exports]; }
-            mod bsd44 {
-                #[legacy_exports]; }
-            mod extra {
-                #[legacy_exports];
-                type BOOL = c_int;
-                type BYTE = u8;
-                type CCHAR = c_char;
-                type CHAR = c_char;
+            pub mod posix08 {
+            }
+            pub mod bsd44 {
+            }
+            pub mod extra {
+                pub type BOOL = c_int;
+                pub type BYTE = u8;
+                pub type CCHAR = c_char;
+                pub type CHAR = c_char;
 
-                type DWORD = c_ulong;
-                type DWORDLONG = c_ulonglong;
+                pub type DWORD = c_ulong;
+                pub type DWORDLONG = c_ulonglong;
 
-                type HANDLE = LPVOID;
-                type HMODULE = c_uint;
+                pub type HANDLE = LPVOID;
+                pub type HMODULE = c_uint;
 
-                type LONG_PTR = c_long;
+                pub type LONG_PTR = c_long;
 
-                type LPCWSTR = *WCHAR;
-                type LPCSTR = *CHAR;
+                pub type LPCWSTR = *WCHAR;
+                pub type LPCSTR = *CHAR;
 
-                type LPWSTR = *mut WCHAR;
-                type LPSTR = *mut CHAR;
+                pub type LPWSTR = *mut WCHAR;
+                pub type LPSTR = *mut CHAR;
 
                 // Not really, but opaque to us.
-                type LPSECURITY_ATTRIBUTES = LPVOID;
+                pub type LPSECURITY_ATTRIBUTES = LPVOID;
 
-                type LPVOID = *mut c_void;
-                type LPWORD = *mut WORD;
+                pub type LPVOID = *mut c_void;
+                pub type LPWORD = *mut WORD;
 
-                type LRESULT = LONG_PTR;
-                type PBOOL = *mut BOOL;
-                type WCHAR = wchar_t;
-                type WORD = u16;
+                pub type LRESULT = LONG_PTR;
+                pub type PBOOL = *mut BOOL;
+                pub type WCHAR = wchar_t;
+                pub type WORD = u16;
             }
         }
     }
 
     #[cfg(target_os = "macos")]
-    mod os {
-        #[legacy_exports];
+    pub mod os {
         #[cfg(target_arch = "x86")]
-        mod arch {
-            #[legacy_exports];
-            mod c95 {
-                #[legacy_exports];
-                type c_char = i8;
-                type c_schar = i8;
-                type c_uchar = u8;
-                type c_short = i16;
-                type c_ushort = u16;
-                type c_int = i32;
-                type c_uint = u32;
-                type c_long = i32;
-                type c_ulong = u32;
-                type c_float = f32;
-                type c_double = f64;
-                type size_t = u32;
-                type ptrdiff_t = i32;
-                type clock_t = u32;
-                type time_t = i32;
-                type wchar_t = i32;
+        pub mod arch {
+            pub mod c95 {
+                pub type c_char = i8;
+                pub type c_schar = i8;
+                pub type c_uchar = u8;
+                pub type c_short = i16;
+                pub type c_ushort = u16;
+                pub type c_int = i32;
+                pub type c_uint = u32;
+                pub type c_long = i32;
+                pub type c_ulong = u32;
+                pub type c_float = f32;
+                pub type c_double = f64;
+                pub type size_t = u32;
+                pub type ptrdiff_t = i32;
+                pub type clock_t = u32;
+                pub type time_t = i32;
+                pub type wchar_t = i32;
+            }
+            pub mod c99 {
+                pub type c_longlong = i64;
+                pub type c_ulonglong = u64;
+                pub type intptr_t = int;
+                pub type uintptr_t = uint;
             }
-            mod c99 {
-                #[legacy_exports];
-                type c_longlong = i64;
-                type c_ulonglong = u64;
-                type intptr_t = int;
-                type uintptr_t = uint;
+            pub mod posix88 {
+                pub type off_t = i64;
+                pub type dev_t = i32;
+                pub type ino_t = u64;
+                pub type pid_t = i32;
+                pub type uid_t = u32;
+                pub type gid_t = u32;
+                pub type useconds_t = u32;
+                pub type mode_t = u16;
+                pub type ssize_t = i32;
             }
-            mod posix88 {
-                #[legacy_exports];
-                type off_t = i64;
-                type dev_t = i32;
-                type ino_t = u64;
-                type pid_t = i32;
-                type uid_t = u32;
-                type gid_t = u32;
-                type useconds_t = u32;
-                type mode_t = u16;
-                type ssize_t = i32;
+            pub mod posix01 {
             }
-            mod posix01 {
-                #[legacy_exports]; }
-            mod posix08 {
-                #[legacy_exports]; }
-            mod bsd44 {
-                #[legacy_exports]; }
-            mod extra {
-                #[legacy_exports];
+            pub mod posix08 {
+            }
+            pub mod bsd44 {
+            }
+            pub mod extra {
             }
         }
 
         #[cfg(target_arch = "x86_64")]
-        mod arch {
-            #[legacy_exports];
-            mod c95 {
-                #[legacy_exports];
-                type c_char = i8;
-                type c_schar = i8;
-                type c_uchar = u8;
-                type c_short = i16;
-                type c_ushort = u16;
-                type c_int = i32;
-                type c_uint = u32;
-                type c_long = i64;
-                type c_ulong = u64;
-                type c_float = f32;
-                type c_double = f64;
-                type size_t = u64;
-                type ptrdiff_t = i64;
-                type clock_t = u64;
-                type time_t = i64;
-                type wchar_t = i32;
+        pub mod arch {
+            pub mod c95 {
+                pub type c_char = i8;
+                pub type c_schar = i8;
+                pub type c_uchar = u8;
+                pub type c_short = i16;
+                pub type c_ushort = u16;
+                pub type c_int = i32;
+                pub type c_uint = u32;
+                pub type c_long = i64;
+                pub type c_ulong = u64;
+                pub type c_float = f32;
+                pub type c_double = f64;
+                pub type size_t = u64;
+                pub type ptrdiff_t = i64;
+                pub type clock_t = u64;
+                pub type time_t = i64;
+                pub type wchar_t = i32;
+            }
+            pub mod c99 {
+                pub type c_longlong = i64;
+                pub type c_ulonglong = u64;
+                pub type intptr_t = int;
+                pub type uintptr_t = uint;
             }
-            mod c99 {
-                #[legacy_exports];
-                type c_longlong = i64;
-                type c_ulonglong = u64;
-                type intptr_t = int;
-                type uintptr_t = uint;
+            pub mod posix88 {
+                pub type off_t = i64;
+                pub type dev_t = i32;
+                pub type ino_t = u64;
+                pub type pid_t = i32;
+                pub type uid_t = u32;
+                pub type gid_t = u32;
+                pub type useconds_t = u32;
+                pub type mode_t = u16;
+                pub type ssize_t = i64;
             }
-            mod posix88 {
-                #[legacy_exports];
-                type off_t = i64;
-                type dev_t = i32;
-                type ino_t = u64;
-                type pid_t = i32;
-                type uid_t = u32;
-                type gid_t = u32;
-                type useconds_t = u32;
-                type mode_t = u16;
-                type ssize_t = i64;
+            pub mod posix01 {
             }
-            mod posix01 {
-                #[legacy_exports]; }
-            mod posix08 {
-                #[legacy_exports]; }
-            mod bsd44 {
-                #[legacy_exports]; }
-            mod extra {
-                #[legacy_exports];
+            pub mod posix08 {
+            }
+            pub mod bsd44 {
+            }
+            pub mod extra {
             }
         }
     }
 }
 
-mod consts {
-    #[legacy_exports];
-
+pub mod consts {
     // Consts tend to vary per OS so we pull their definitions out
     // into this module.
 
     #[cfg(target_os = "win32")]
-    mod os {
-        #[legacy_exports];
-        mod c95 {
-            #[legacy_exports];
-            const EXIT_FAILURE : int = 1;
-            const EXIT_SUCCESS : int = 0;
-            const RAND_MAX : int = 32767;
-            const EOF : int = -1;
-            const SEEK_SET : int = 0;
-            const SEEK_CUR : int = 1;
-            const SEEK_END : int = 2;
-            const _IOFBF : int = 0;
-            const _IONBF : int = 4;
-            const _IOLBF : int = 64;
-            const BUFSIZ : uint = 512_u;
-            const FOPEN_MAX : uint = 20_u;
-            const FILENAME_MAX : uint = 260_u;
-            const L_tmpnam : uint = 16_u;
-            const TMP_MAX : uint = 32767_u;
+    pub mod os {
+        pub mod c95 {
+            pub const EXIT_FAILURE : int = 1;
+            pub const EXIT_SUCCESS : int = 0;
+            pub const RAND_MAX : int = 32767;
+            pub const EOF : int = -1;
+            pub const SEEK_SET : int = 0;
+            pub const SEEK_CUR : int = 1;
+            pub const SEEK_END : int = 2;
+            pub const _IOFBF : int = 0;
+            pub const _IONBF : int = 4;
+            pub const _IOLBF : int = 64;
+            pub const BUFSIZ : uint = 512_u;
+            pub const FOPEN_MAX : uint = 20_u;
+            pub const FILENAME_MAX : uint = 260_u;
+            pub const L_tmpnam : uint = 16_u;
+            pub const TMP_MAX : uint = 32767_u;
         }
-        mod c99 {
-            #[legacy_exports]; }
-        mod posix88 {
-            #[legacy_exports];
-            const O_RDONLY : int = 0;
-            const O_WRONLY : int = 1;
-            const O_RDWR : int = 2;
-            const O_APPEND : int = 8;
-            const O_CREAT : int = 256;
-            const O_EXCL : int = 1024;
-            const O_TRUNC : int = 512;
-            const S_IFIFO : int = 4096;
-            const S_IFCHR : int = 8192;
-            const S_IFBLK : int = 12288;
-            const S_IFDIR : int = 16384;
-            const S_IFREG : int = 32768;
-            const S_IFMT : int = 61440;
-            const S_IEXEC : int = 64;
-            const S_IWRITE : int = 128;
-            const S_IREAD : int = 256;
-            const S_IRWXU : int = 448;
-            const S_IXUSR : int = 64;
-            const S_IWUSR : int = 128;
-            const S_IRUSR : int = 256;
-            const F_OK : int = 0;
-            const R_OK : int = 4;
-            const W_OK : int = 2;
-            const X_OK : int = 1;
-            const STDIN_FILENO : int = 0;
-            const STDOUT_FILENO : int = 1;
-            const STDERR_FILENO : int = 2;
+        pub mod c99 {
         }
-        mod posix01 {
-            #[legacy_exports]; }
-        mod posix08 {
-            #[legacy_exports]; }
-        mod bsd44 {
-            #[legacy_exports]; }
-        mod extra {
-            #[legacy_exports];
-            const O_TEXT : int = 16384;
-            const O_BINARY : int = 32768;
-            const O_NOINHERIT: int = 128;
-
-            const ERROR_SUCCESS : int = 0;
-            const ERROR_INSUFFICIENT_BUFFER : int = 122;
+        pub mod posix88 {
+            pub const O_RDONLY : int = 0;
+            pub const O_WRONLY : int = 1;
+            pub const O_RDWR : int = 2;
+            pub const O_APPEND : int = 8;
+            pub const O_CREAT : int = 256;
+            pub const O_EXCL : int = 1024;
+            pub const O_TRUNC : int = 512;
+            pub const S_IFIFO : int = 4096;
+            pub const S_IFCHR : int = 8192;
+            pub const S_IFBLK : int = 12288;
+            pub const S_IFDIR : int = 16384;
+            pub const S_IFREG : int = 32768;
+            pub const S_IFMT : int = 61440;
+            pub const S_IEXEC : int = 64;
+            pub const S_IWRITE : int = 128;
+            pub const S_IREAD : int = 256;
+            pub const S_IRWXU : int = 448;
+            pub const S_IXUSR : int = 64;
+            pub const S_IWUSR : int = 128;
+            pub const S_IRUSR : int = 256;
+            pub const F_OK : int = 0;
+            pub const R_OK : int = 4;
+            pub const W_OK : int = 2;
+            pub const X_OK : int = 1;
+            pub const STDIN_FILENO : int = 0;
+            pub const STDOUT_FILENO : int = 1;
+            pub const STDERR_FILENO : int = 2;
+        }
+        pub mod posix01 {
+        }
+        pub mod posix08 {
+        }
+        pub mod bsd44 {
+        }
+        pub mod extra {
+            pub const O_TEXT : int = 16384;
+            pub const O_BINARY : int = 32768;
+            pub const O_NOINHERIT: int = 128;
+
+            pub const ERROR_SUCCESS : int = 0;
+            pub const ERROR_INSUFFICIENT_BUFFER : int = 122;
         }
     }
 
 
     #[cfg(target_os = "linux")]
-    mod os {
-        #[legacy_exports];
-        mod c95 {
-            #[legacy_exports];
-            const EXIT_FAILURE : int = 1;
-            const EXIT_SUCCESS : int = 0;
-            const RAND_MAX : int = 2147483647;
-            const EOF : int = -1;
-            const SEEK_SET : int = 0;
-            const SEEK_CUR : int = 1;
-            const SEEK_END : int = 2;
-            const _IOFBF : int = 0;
-            const _IONBF : int = 2;
-            const _IOLBF : int = 1;
-            const BUFSIZ : uint = 8192_u;
-            const FOPEN_MAX : uint = 16_u;
-            const FILENAME_MAX : uint = 4096_u;
-            const L_tmpnam : uint = 20_u;
-            const TMP_MAX : uint = 238328_u;
+    pub mod os {
+        pub mod c95 {
+            pub const EXIT_FAILURE : int = 1;
+            pub const EXIT_SUCCESS : int = 0;
+            pub const RAND_MAX : int = 2147483647;
+            pub const EOF : int = -1;
+            pub const SEEK_SET : int = 0;
+            pub const SEEK_CUR : int = 1;
+            pub const SEEK_END : int = 2;
+            pub const _IOFBF : int = 0;
+            pub const _IONBF : int = 2;
+            pub const _IOLBF : int = 1;
+            pub const BUFSIZ : uint = 8192_u;
+            pub const FOPEN_MAX : uint = 16_u;
+            pub const FILENAME_MAX : uint = 4096_u;
+            pub const L_tmpnam : uint = 20_u;
+            pub const TMP_MAX : uint = 238328_u;
+        }
+        pub mod c99 {
         }
-        mod c99 {
-            #[legacy_exports]; }
-        mod posix88 {
-            #[legacy_exports];
-            const O_RDONLY : int = 0;
-            const O_WRONLY : int = 1;
-            const O_RDWR : int = 2;
-            const O_APPEND : int = 1024;
-            const O_CREAT : int = 64;
-            const O_EXCL : int = 128;
-            const O_TRUNC : int = 512;
-            const S_IFIFO : int = 4096;
-            const S_IFCHR : int = 8192;
-            const S_IFBLK : int = 24576;
-            const S_IFDIR : int = 16384;
-            const S_IFREG : int = 32768;
-            const S_IFMT : int = 61440;
-            const S_IEXEC : int = 64;
-            const S_IWRITE : int = 128;
-            const S_IREAD : int = 256;
-            const S_IRWXU : int = 448;
-            const S_IXUSR : int = 64;
-            const S_IWUSR : int = 128;
-            const S_IRUSR : int = 256;
-            const F_OK : int = 0;
-            const R_OK : int = 4;
-            const W_OK : int = 2;
-            const X_OK : int = 1;
-            const STDIN_FILENO : int = 0;
-            const STDOUT_FILENO : int = 1;
-            const STDERR_FILENO : int = 2;
-            const F_LOCK : int = 1;
-            const F_TEST : int = 3;
-            const F_TLOCK : int = 2;
-            const F_ULOCK : int = 0;
+        pub mod posix88 {
+            pub const O_RDONLY : int = 0;
+            pub const O_WRONLY : int = 1;
+            pub const O_RDWR : int = 2;
+            pub const O_APPEND : int = 1024;
+            pub const O_CREAT : int = 64;
+            pub const O_EXCL : int = 128;
+            pub const O_TRUNC : int = 512;
+            pub const S_IFIFO : int = 4096;
+            pub const S_IFCHR : int = 8192;
+            pub const S_IFBLK : int = 24576;
+            pub const S_IFDIR : int = 16384;
+            pub const S_IFREG : int = 32768;
+            pub const S_IFMT : int = 61440;
+            pub const S_IEXEC : int = 64;
+            pub const S_IWRITE : int = 128;
+            pub const S_IREAD : int = 256;
+            pub const S_IRWXU : int = 448;
+            pub const S_IXUSR : int = 64;
+            pub const S_IWUSR : int = 128;
+            pub const S_IRUSR : int = 256;
+            pub const F_OK : int = 0;
+            pub const R_OK : int = 4;
+            pub const W_OK : int = 2;
+            pub const X_OK : int = 1;
+            pub const STDIN_FILENO : int = 0;
+            pub const STDOUT_FILENO : int = 1;
+            pub const STDERR_FILENO : int = 2;
+            pub const F_LOCK : int = 1;
+            pub const F_TEST : int = 3;
+            pub const F_TLOCK : int = 2;
+            pub const F_ULOCK : int = 0;
         }
-        mod posix01 {
-            #[legacy_exports]; }
-        mod posix08 {
-            #[legacy_exports]; }
-        mod bsd44 {
-            #[legacy_exports]; }
-        mod extra {
-            #[legacy_exports];
-            const O_RSYNC : int = 1052672;
-            const O_DSYNC : int = 4096;
-            const O_SYNC : int = 1052672;
+        pub mod posix01 {
+        }
+        pub mod posix08 {
+        }
+        pub mod bsd44 {
+        }
+        pub mod extra {
+            pub const O_RSYNC : int = 1052672;
+            pub const O_DSYNC : int = 4096;
+            pub const O_SYNC : int = 1052672;
         }
     }
 
     #[cfg(target_os = "freebsd")]
-    mod os {
-        #[legacy_exports];
-        mod c95 {
-            #[legacy_exports];
-            const EXIT_FAILURE : int = 1;
-            const EXIT_SUCCESS : int = 0;
-            const RAND_MAX : int = 2147483647;
-            const EOF : int = -1;
-            const SEEK_SET : int = 0;
-            const SEEK_CUR : int = 1;
-            const SEEK_END : int = 2;
-            const _IOFBF : int = 0;
-            const _IONBF : int = 2;
-            const _IOLBF : int = 1;
-            const BUFSIZ : uint = 1024_u;
-            const FOPEN_MAX : uint = 20_u;
-            const FILENAME_MAX : uint = 1024_u;
-            const L_tmpnam : uint = 1024_u;
-            const TMP_MAX : uint = 308915776_u;
+    pub mod os {
+        pub mod c95 {
+            pub const EXIT_FAILURE : int = 1;
+            pub const EXIT_SUCCESS : int = 0;
+            pub const RAND_MAX : int = 2147483647;
+            pub const EOF : int = -1;
+            pub const SEEK_SET : int = 0;
+            pub const SEEK_CUR : int = 1;
+            pub const SEEK_END : int = 2;
+            pub const _IOFBF : int = 0;
+            pub const _IONBF : int = 2;
+            pub const _IOLBF : int = 1;
+            pub const BUFSIZ : uint = 1024_u;
+            pub const FOPEN_MAX : uint = 20_u;
+            pub const FILENAME_MAX : uint = 1024_u;
+            pub const L_tmpnam : uint = 1024_u;
+            pub const TMP_MAX : uint = 308915776_u;
+        }
+        pub mod c99 {
+        }
+        pub mod posix88 {
+            pub const O_RDONLY : int = 0;
+            pub const O_WRONLY : int = 1;
+            pub const O_RDWR : int = 2;
+            pub const O_APPEND : int = 8;
+            pub const O_CREAT : int = 512;
+            pub const O_EXCL : int = 2048;
+            pub const O_TRUNC : int = 1024;
+            pub const S_IFIFO : int = 4096;
+            pub const S_IFCHR : int = 8192;
+            pub const S_IFBLK : int = 24576;
+            pub const S_IFDIR : int = 16384;
+            pub const S_IFREG : int = 32768;
+            pub const S_IFMT : int = 61440;
+            pub const S_IEXEC : int = 64;
+            pub const S_IWRITE : int = 128;
+            pub const S_IREAD : int = 256;
+            pub const S_IRWXU : int = 448;
+            pub const S_IXUSR : int = 64;
+            pub const S_IWUSR : int = 128;
+            pub const S_IRUSR : int = 256;
+            pub const F_OK : int = 0;
+            pub const R_OK : int = 4;
+            pub const W_OK : int = 2;
+            pub const X_OK : int = 1;
+            pub const STDIN_FILENO : int = 0;
+            pub const STDOUT_FILENO : int = 1;
+            pub const STDERR_FILENO : int = 2;
+            pub const F_LOCK : int = 1;
+            pub const F_TEST : int = 3;
+            pub const F_TLOCK : int = 2;
+            pub const F_ULOCK : int = 0;
+        }
+        pub mod posix01 {
+        }
+        pub mod posix08 {
         }
-        mod c99 {
-            #[legacy_exports]; }
-        mod posix88 {
-            #[legacy_exports];
-            const O_RDONLY : int = 0;
-            const O_WRONLY : int = 1;
-            const O_RDWR : int = 2;
-            const O_APPEND : int = 8;
-            const O_CREAT : int = 512;
-            const O_EXCL : int = 2048;
-            const O_TRUNC : int = 1024;
-            const S_IFIFO : int = 4096;
-            const S_IFCHR : int = 8192;
-            const S_IFBLK : int = 24576;
-            const S_IFDIR : int = 16384;
-            const S_IFREG : int = 32768;
-            const S_IFMT : int = 61440;
-            const S_IEXEC : int = 64;
-            const S_IWRITE : int = 128;
-            const S_IREAD : int = 256;
-            const S_IRWXU : int = 448;
-            const S_IXUSR : int = 64;
-            const S_IWUSR : int = 128;
-            const S_IRUSR : int = 256;
-            const F_OK : int = 0;
-            const R_OK : int = 4;
-            const W_OK : int = 2;
-            const X_OK : int = 1;
-            const STDIN_FILENO : int = 0;
-            const STDOUT_FILENO : int = 1;
-            const STDERR_FILENO : int = 2;
-            const F_LOCK : int = 1;
-            const F_TEST : int = 3;
-            const F_TLOCK : int = 2;
-            const F_ULOCK : int = 0;
+        pub mod bsd44 {
         }
-        mod posix01 {
-            #[legacy_exports]; }
-        mod posix08 {
-            #[legacy_exports]; }
-        mod bsd44 {
-            #[legacy_exports]; }
-        mod extra {
-            #[legacy_exports];
-            const O_SYNC : int = 128;
-            const CTL_KERN: int = 1;
-            const KERN_PROC: int = 14;
-            const KERN_PROC_PATHNAME: int = 12;
+        pub mod extra {
+            pub const O_SYNC : int = 128;
+            pub const CTL_KERN: int = 1;
+            pub const KERN_PROC: int = 14;
+            pub const KERN_PROC_PATHNAME: int = 12;
         }
     }
 
     #[cfg(target_os = "macos")]
-    mod os {
-        #[legacy_exports];
-        mod c95 {
-            #[legacy_exports];
-            const EXIT_FAILURE : int = 1;
-            const EXIT_SUCCESS : int = 0;
-            const RAND_MAX : int = 2147483647;
-            const EOF : int = -1;
-            const SEEK_SET : int = 0;
-            const SEEK_CUR : int = 1;
-            const SEEK_END : int = 2;
-            const _IOFBF : int = 0;
-            const _IONBF : int = 2;
-            const _IOLBF : int = 1;
-            const BUFSIZ : uint = 1024_u;
-            const FOPEN_MAX : uint = 20_u;
-            const FILENAME_MAX : uint = 1024_u;
-            const L_tmpnam : uint = 1024_u;
-            const TMP_MAX : uint = 308915776_u;
+    pub mod os {
+        pub mod c95 {
+            pub const EXIT_FAILURE : int = 1;
+            pub const EXIT_SUCCESS : int = 0;
+            pub const RAND_MAX : int = 2147483647;
+            pub const EOF : int = -1;
+            pub const SEEK_SET : int = 0;
+            pub const SEEK_CUR : int = 1;
+            pub const SEEK_END : int = 2;
+            pub const _IOFBF : int = 0;
+            pub const _IONBF : int = 2;
+            pub const _IOLBF : int = 1;
+            pub const BUFSIZ : uint = 1024_u;
+            pub const FOPEN_MAX : uint = 20_u;
+            pub const FILENAME_MAX : uint = 1024_u;
+            pub const L_tmpnam : uint = 1024_u;
+            pub const TMP_MAX : uint = 308915776_u;
         }
-        mod c99 {
-            #[legacy_exports]; }
-        mod posix88 {
-            #[legacy_exports];
-            const O_RDONLY : int = 0;
-            const O_WRONLY : int = 1;
-            const O_RDWR : int = 2;
-            const O_APPEND : int = 8;
-            const O_CREAT : int = 512;
-            const O_EXCL : int = 2048;
-            const O_TRUNC : int = 1024;
-            const S_IFIFO : int = 4096;
-            const S_IFCHR : int = 8192;
-            const S_IFBLK : int = 24576;
-            const S_IFDIR : int = 16384;
-            const S_IFREG : int = 32768;
-            const S_IFMT : int = 61440;
-            const S_IEXEC : int = 64;
-            const S_IWRITE : int = 128;
-            const S_IREAD : int = 256;
-            const S_IRWXU : int = 448;
-            const S_IXUSR : int = 64;
-            const S_IWUSR : int = 128;
-            const S_IRUSR : int = 256;
-            const F_OK : int = 0;
-            const R_OK : int = 4;
-            const W_OK : int = 2;
-            const X_OK : int = 1;
-            const STDIN_FILENO : int = 0;
-            const STDOUT_FILENO : int = 1;
-            const STDERR_FILENO : int = 2;
-            const F_LOCK : int = 1;
-            const F_TEST : int = 3;
-            const F_TLOCK : int = 2;
-            const F_ULOCK : int = 0;
+        pub mod c99 {
         }
-        mod posix01 {
-            #[legacy_exports]; }
-        mod posix08 {
-            #[legacy_exports]; }
-        mod bsd44 {
-            #[legacy_exports]; }
-        mod extra {
-            #[legacy_exports];
-            const O_DSYNC : int = 4194304;
-            const O_SYNC : int = 128;
-            const F_FULLFSYNC : int = 51;
+        pub mod posix88 {
+            pub const O_RDONLY : int = 0;
+            pub const O_WRONLY : int = 1;
+            pub const O_RDWR : int = 2;
+            pub const O_APPEND : int = 8;
+            pub const O_CREAT : int = 512;
+            pub const O_EXCL : int = 2048;
+            pub const O_TRUNC : int = 1024;
+            pub const S_IFIFO : int = 4096;
+            pub const S_IFCHR : int = 8192;
+            pub const S_IFBLK : int = 24576;
+            pub const S_IFDIR : int = 16384;
+            pub const S_IFREG : int = 32768;
+            pub const S_IFMT : int = 61440;
+            pub const S_IEXEC : int = 64;
+            pub const S_IWRITE : int = 128;
+            pub const S_IREAD : int = 256;
+            pub const S_IRWXU : int = 448;
+            pub const S_IXUSR : int = 64;
+            pub const S_IWUSR : int = 128;
+            pub const S_IRUSR : int = 256;
+            pub const F_OK : int = 0;
+            pub const R_OK : int = 4;
+            pub const W_OK : int = 2;
+            pub const X_OK : int = 1;
+            pub const STDIN_FILENO : int = 0;
+            pub const STDOUT_FILENO : int = 1;
+            pub const STDERR_FILENO : int = 2;
+            pub const F_LOCK : int = 1;
+            pub const F_TEST : int = 3;
+            pub const F_TLOCK : int = 2;
+            pub const F_ULOCK : int = 0;
+        }
+        pub mod posix01 {
+        }
+        pub mod posix08 {
+        }
+        pub mod bsd44 {
+        }
+        pub mod extra {
+            pub const O_DSYNC : int = 4194304;
+            pub const O_SYNC : int = 128;
+            pub const F_FULLFSYNC : int = 51;
         }
     }
 }
 
 
-mod funcs {
-    #[legacy_exports];
-
+pub mod funcs {
     // Thankfull most of c95 is universally available and does not vary by OS
     // or anything. The same is not true of POSIX.
 
-    mod c95 {
-        #[legacy_exports];
-
+    pub mod c95 {
         #[nolink]
         #[abi = "cdecl"]
-        extern mod ctype {
-            #[legacy_exports];
+        pub extern mod ctype {
             fn isalnum(c: c_int) -> c_int;
             fn isalpha(c: c_int) -> c_int;
             fn iscntrl(c: c_int) -> c_int;
@@ -850,9 +776,7 @@ mod funcs {
 
         #[nolink]
         #[abi = "cdecl"]
-        extern mod stdio {
-            #[legacy_exports];
-
+        pub extern mod stdio {
             fn fopen(filename: *c_char, mode: *c_char) -> *FILE;
             fn freopen(filename: *c_char, mode: *c_char,
                        file: *FILE) -> *FILE;
@@ -882,7 +806,8 @@ mod funcs {
                      nobj: size_t, stream: *FILE) -> size_t;
             fn fwrite(ptr: *c_void, size: size_t,
                       nobj: size_t, stream: *FILE) -> size_t;
-            fn fseek(stream: *FILE, offset: c_long, whence: c_int) -> c_int;
+            fn fseek(stream: *FILE, offset: c_long,
+                     whence: c_int) -> c_int;
             fn ftell(stream: *FILE) -> c_long;
             fn rewind(stream: *FILE);
             fn fgetpos(stream: *FILE, ptr: *fpos_t) -> c_int;
@@ -895,16 +820,16 @@ mod funcs {
 
         #[nolink]
         #[abi = "cdecl"]
-        extern mod stdlib {
-            #[legacy_exports];
+        pub extern mod stdlib {
             fn abs(i: c_int) -> c_int;
             fn labs(i: c_long) -> c_long;
-            // Omitted: div, ldiv (return type incomplete).
+            // Omitted: div, ldiv (return pub type incomplete).
             fn atof(s: *c_char) -> c_double;
             fn atoi(s: *c_char) -> c_int;
             fn strtod(s: *c_char, endp: **c_char) -> c_double;
             fn strtol(s: *c_char, endp: **c_char, base: c_int) -> c_long;
-            fn strtoul(s: *c_char, endp: **c_char, base: c_int) -> c_ulong;
+            fn strtoul(s: *c_char, endp: **c_char,
+                       base: c_int) -> c_ulong;
             fn calloc(nobj: size_t, size: size_t) -> *c_void;
             fn malloc(size: size_t) -> *c_void;
             fn realloc(p: *c_void, size: size_t) -> *c_void;
@@ -921,9 +846,7 @@ mod funcs {
 
         #[nolink]
         #[abi = "cdecl"]
-        extern mod string {
-            #[legacy_exports];
-
+        pub extern mod string {
             fn strcpy(dst: *c_char, src: *c_char) -> *c_char;
             fn strncpy(dst: *c_char, src: *c_char, n: size_t) -> *c_char;
             fn strcat(s: *c_char, ct: *c_char) -> *c_char;
@@ -956,13 +879,10 @@ mod funcs {
     // with the same POSIX functions and types as other platforms.
 
     #[cfg(target_os = "win32")]
-    mod posix88 {
-        #[legacy_exports];
-
+    pub mod posix88 {
         #[nolink]
         #[abi = "cdecl"]
-        extern mod stat {
-            #[legacy_exports];
+        pub extern mod stat {
             #[link_name = "_chmod"]
             fn chmod(path: *c_char, mode: c_int) -> c_int;
 
@@ -972,8 +892,7 @@ mod funcs {
 
         #[nolink]
         #[abi = "cdecl"]
-        extern mod stdio {
-            #[legacy_exports];
+        pub extern mod stdio {
             #[link_name = "_popen"]
             fn popen(command: *c_char, mode: *c_char) -> *FILE;
 
@@ -989,8 +908,7 @@ mod funcs {
 
         #[nolink]
         #[abi = "cdecl"]
-        extern mod fcntl {
-            #[legacy_exports];
+        pub extern mod fcntl {
             #[link_name = "_open"]
             fn open(path: *c_char, oflag: c_int, mode: c_int) -> c_int;
 
@@ -1000,15 +918,13 @@ mod funcs {
 
         #[nolink]
         #[abi = "cdecl"]
-        extern mod dirent {
-            #[legacy_exports];
+        pub extern mod dirent {
             // Not supplied at all.
         }
 
         #[nolink]
         #[abi = "cdecl"]
-        extern mod unistd {
-            #[legacy_exports];
+        pub extern mod unistd {
             #[link_name = "_access"]
             fn access(path: *c_char, amode: c_int) -> c_int;
 
@@ -1035,7 +951,8 @@ mod funcs {
             fn execvp(c: *c_char, argv: **c_char) -> c_int;
 
             #[link_name = "_execvpe"]
-            fn execvpe(c: *c_char, argv: **c_char, envp: **c_char) -> c_int;
+            fn execvpe(c: *c_char, argv: **c_char,
+                       envp: **c_char) -> c_int;
 
             #[link_name = "_getcwd"]
             fn getcwd(buf: *c_char, size: size_t) -> *c_char;
@@ -1072,13 +989,10 @@ mod funcs {
     #[cfg(target_os = "linux")]
     #[cfg(target_os = "macos")]
     #[cfg(target_os = "freebsd")]
-    mod posix88 {
-        #[legacy_exports];
-
+    pub mod posix88 {
         #[nolink]
         #[abi = "cdecl"]
-        extern mod stat {
-            #[legacy_exports];
+        pub extern mod stat {
             fn chmod(path: *c_char, mode: mode_t) -> c_int;
             fn fchmod(fd: c_int, mode: mode_t) -> c_int;
             fn mkdir(path: *c_char, mode: mode_t) -> c_int;
@@ -1087,8 +1001,7 @@ mod funcs {
 
         #[nolink]
         #[abi = "cdecl"]
-        extern mod stdio {
-            #[legacy_exports];
+        pub extern mod stdio {
             fn popen(command: *c_char, mode: *c_char) -> *FILE;
             fn pclose(stream: *FILE) -> c_int;
             fn fdopen(fd: c_int, mode: *c_char) -> *FILE;
@@ -1097,8 +1010,7 @@ mod funcs {
 
         #[nolink]
         #[abi = "cdecl"]
-        extern mod fcntl {
-            #[legacy_exports];
+        pub extern mod fcntl {
             fn open(path: *c_char, oflag: c_int, mode: c_int) -> c_int;
             fn creat(path: *c_char, mode: mode_t) -> c_int;
             fn fcntl(fd: c_int, cmd: c_int) -> c_int;
@@ -1106,8 +1018,7 @@ mod funcs {
 
         #[nolink]
         #[abi = "cdecl"]
-        extern mod dirent {
-            #[legacy_exports];
+        pub extern mod dirent {
             fn opendir(dirname: *c_char) -> *DIR;
             fn closedir(dirp: *DIR) -> c_int;
             fn readdir(dirp: *DIR) -> *dirent;
@@ -1118,8 +1029,7 @@ mod funcs {
 
         #[nolink]
         #[abi = "cdecl"]
-        extern mod unistd {
-            #[legacy_exports];
+        pub extern mod unistd {
             fn access(path: *c_char, amode: c_int) -> c_int;
             fn alarm(seconds: c_uint) -> c_uint;
             fn chdir(dir: *c_char) -> c_int;
@@ -1128,7 +1038,8 @@ mod funcs {
             fn dup(fd: c_int) -> c_int;
             fn dup2(src: c_int, dst: c_int) -> c_int;
             fn execv(prog: *c_char, argv: **c_char) -> c_int;
-            fn execve(prog: *c_char, argv: **c_char, envp: **c_char) -> c_int;
+            fn execve(prog: *c_char, argv: **c_char,
+                      envp: **c_char) -> c_int;
             fn execvp(c: *c_char, argv: **c_char) -> c_int;
             fn fork() -> pid_t;
             fn fpathconf(filedes: c_int, name: c_int) -> c_long;
@@ -1138,7 +1049,8 @@ mod funcs {
             fn getgid() -> gid_t ;
             fn getgroups(ngroups_max: c_int, groups: *mut gid_t) -> c_int;
             fn getlogin() -> *c_char;
-            fn getopt(argc: c_int, argv: **c_char, optstr: *c_char) -> c_int;
+            fn getopt(argc: c_int, argv: **c_char,
+                      optstr: *c_char) -> c_int;
             fn getpgrp() -> pid_t;
             fn getpid() -> pid_t;
             fn getppid() -> pid_t;
@@ -1168,13 +1080,10 @@ mod funcs {
     #[cfg(target_os = "linux")]
     #[cfg(target_os = "macos")]
     #[cfg(target_os = "freebsd")]
-    mod posix01 {
-        #[legacy_exports];
-
+    pub mod posix01 {
         #[nolink]
         #[abi = "cdecl"]
-        extern mod unistd {
-            #[legacy_exports];
+        pub extern mod unistd {
             fn readlink(path: *c_char, buf: *mut c_char,
                         bufsz: size_t) -> ssize_t;
 
@@ -1191,19 +1100,17 @@ mod funcs {
 
         #[nolink]
         #[abi = "cdecl"]
-        extern mod wait {
-            #[legacy_exports];
+        pub extern mod wait {
             fn waitpid(pid: pid_t, status: *mut c_int,
                        options: c_int) -> pid_t;
         }
     }
 
     #[cfg(target_os = "win32")]
-    mod posix01 {
-        #[legacy_exports];
+    pub mod posix01 {
         #[nolink]
-        extern mod unistd {
-            #[legacy_exports]; }
+        pub extern mod unistd {
+        }
     }
 
 
@@ -1211,11 +1118,10 @@ mod funcs {
     #[cfg(target_os = "linux")]
     #[cfg(target_os = "macos")]
     #[cfg(target_os = "freebsd")]
-    mod posix08 {
-        #[legacy_exports];
+    pub mod posix08 {
         #[nolink]
-        extern mod unistd {
-            #[legacy_exports]; }
+        pub extern mod unistd {
+        }
     }
 
 
@@ -1223,9 +1129,7 @@ mod funcs {
     #[cfg(target_os = "freebsd")]
     #[nolink]
     #[abi = "cdecl"]
-    extern mod bsd44 {
-        #[legacy_exports];
-
+    pub extern mod bsd44 {
         fn sysctl(name: *c_int, namelen: c_uint,
                   oldp: *mut c_void, oldlenp: *mut size_t,
                   newp: *c_void, newlen: size_t) -> c_int;
@@ -1241,37 +1145,35 @@ mod funcs {
 
     #[cfg(target_os = "linux")]
     #[cfg(target_os = "win32")]
-    mod bsd44 {
-        #[legacy_exports];
+    pub mod bsd44 {
     }
 
 
     #[cfg(target_os = "macos")]
     #[nolink]
     #[abi = "cdecl"]
-    extern mod extra {
-        #[legacy_exports];
+    pub extern mod extra {
         fn _NSGetExecutablePath(buf: *mut c_char,
                                 bufsize: *mut u32) -> c_int;
     }
 
     #[cfg(target_os = "freebsd")]
-    mod extra {
-        #[legacy_exports]; }
+    pub mod extra {
+    }
 
     #[cfg(target_os = "linux")]
-    mod extra {
-        #[legacy_exports]; }
+    pub mod extra {
+    }
 
 
     #[cfg(target_os = "win32")]
-    mod extra {
-        #[legacy_exports];
+    pub mod extra {
         use types::os::arch::extra::*;
+        pub use kernel32::*;
+        pub use msvcrt::*;
 
         #[abi = "stdcall"]
-        extern mod kernel32 {
-            #[legacy_exports];
+        pub extern mod kernel32 {
             fn GetEnvironmentVariableW(n: LPCWSTR,
                                        v: LPWSTR,
                                        nsize: DWORD) -> DWORD;
@@ -1295,8 +1197,7 @@ mod funcs {
 
         #[abi = "cdecl"]
         #[nolink]
-        extern mod msvcrt {
-            #[legacy_exports];
+        pub extern mod msvcrt {
             #[link_name = "_commit"]
             fn commit(fd: c_int) -> c_int;
         }
diff --git a/src/libcore/os.rs b/src/libcore/os.rs
index 7803783ea66..4614080ee02 100644
--- a/src/libcore/os.rs
+++ b/src/libcore/os.rs
@@ -21,30 +21,17 @@
  */
 
 use libc::{c_char, c_void, c_int, c_uint, size_t, ssize_t,
-              mode_t, pid_t, FILE};
+           mode_t, pid_t, FILE};
 use libc::{close, fclose};
 
 use option::{Some, None};
 
-use consts::*;
+pub use consts::*;
 use task::TaskBuilder;
 
-export close, fclose, fsync_fd, waitpid;
-export env, getenv, setenv, fdopen, pipe;
-export getcwd, dll_filename, self_exe_path;
-export exe_suffix, dll_suffix, sysname, arch, family;
-export homedir, tmpdir, list_dir, list_dir_path, path_is_dir, path_exists,
-       make_absolute, make_dir, remove_dir, change_dir, remove_file,
-       copy_file;
-export last_os_error;
-export set_exit_status;
-export walk_dir;
-
 // FIXME: move these to str perhaps? #2620
-export as_c_charp, fill_charp_buf;
 
 extern mod rustrt {
-    #[legacy_exports];
     fn rust_getcwd() -> ~str;
     fn rust_path_is_dir(path: *libc::c_char) -> c_int;
     fn rust_path_exists(path: *libc::c_char) -> c_int;
@@ -57,15 +44,15 @@ extern mod rustrt {
 
 const tmpbuf_sz : uint = 1000u;
 
-fn getcwd() -> Path {
+pub fn getcwd() -> Path {
     Path(rustrt::rust_getcwd())
 }
 
-fn as_c_charp<T>(s: &str, f: fn(*c_char) -> T) -> T {
+pub fn as_c_charp<T>(s: &str, f: fn(*c_char) -> T) -> T {
     str::as_c_str(s, |b| f(b as *c_char))
 }
 
-fn fill_charp_buf(f: fn(*mut c_char, size_t) -> bool)
+pub fn fill_charp_buf(f: fn(*mut c_char, size_t) -> bool)
     -> Option<~str> {
     let buf = vec::to_mut(vec::from_elem(tmpbuf_sz, 0u8 as c_char));
     do vec::as_mut_buf(buf) |b, sz| {
@@ -79,16 +66,11 @@ fn fill_charp_buf(f: fn(*mut c_char, size_t) -> bool)
 
 #[cfg(windows)]
 mod win32 {
-    #[legacy_exports];
-    use dword = libc::types::os::arch::extra::DWORD;
+    use dword = libc::DWORD;
 
     fn fill_utf16_buf_and_decode(f: fn(*mut u16, dword) -> dword)
         -> Option<~str> {
-
-        // FIXME: remove these when export globs work properly. #1238
-        use libc::funcs::extra::kernel32::*;
-        use libc::consts::os::extra::*;
-
+        use libc::dword;
         let mut n = tmpbuf_sz as dword;
         let mut res = None;
         let mut done = false;
@@ -99,8 +81,8 @@ mod win32 {
                 if k == (0 as dword) {
                     done = true;
                 } else if (k == n &&
-                           GetLastError() ==
-                           ERROR_INSUFFICIENT_BUFFER as dword) {
+                           libc::GetLastError() ==
+                           libc::ERROR_INSUFFICIENT_BUFFER as dword) {
                     n *= (2 as dword);
                 } else {
                     let sub = vec::slice(buf, 0u, k as uint);
@@ -120,28 +102,22 @@ mod win32 {
     }
 }
 
-fn getenv(n: &str) -> Option<~str> {
+pub fn getenv(n: &str) -> Option<~str> {
     global_env::getenv(n)
 }
 
-fn setenv(n: &str, v: &str) {
+pub fn setenv(n: &str, v: &str) {
     global_env::setenv(n, v)
 }
 
-fn env() -> ~[(~str,~str)] {
+pub fn env() -> ~[(~str,~str)] {
     global_env::env()
 }
 
 mod global_env {
-    #[legacy_exports];
     //! Internal module for serializing access to getenv/setenv
 
-    export getenv;
-    export setenv;
-    export env;
-
     extern mod rustrt {
-        #[legacy_exports];
         fn rust_global_env_chan_ptr() -> *libc::uintptr_t;
     }
 
@@ -151,7 +127,7 @@ mod global_env {
         MsgEnv(comm::Chan<~[(~str,~str)]>)
     }
 
-    fn getenv(n: &str) -> Option<~str> {
+    pub fn getenv(n: &str) -> Option<~str> {
         let env_ch = get_global_env_chan();
         let po = comm::Port();
         comm::send(env_ch, MsgGetEnv(str::from_slice(n),
@@ -159,7 +135,7 @@ mod global_env {
         comm::recv(po)
     }
 
-    fn setenv(n: &str, v: &str) {
+    pub fn setenv(n: &str, v: &str) {
         let env_ch = get_global_env_chan();
         let po = comm::Port();
         comm::send(env_ch, MsgSetEnv(str::from_slice(n),
@@ -168,7 +144,7 @@ mod global_env {
         comm::recv(po)
     }
 
-    fn env() -> ~[(~str,~str)] {
+    pub fn env() -> ~[(~str,~str)] {
         let env_ch = get_global_env_chan();
         let po = comm::Port();
         comm::send(env_ch, MsgEnv(comm::Chan(po)));
@@ -208,13 +184,11 @@ mod global_env {
     }
 
     mod impl_ {
-        #[legacy_exports];
         extern mod rustrt {
-            #[legacy_exports];
             fn rust_env_pairs() -> ~[~str];
         }
 
-        fn env() -> ~[(~str,~str)] {
+        pub fn env() -> ~[(~str,~str)] {
             let mut pairs = ~[];
             for vec::each(rustrt::rust_env_pairs()) |p| {
                 let vs = str::splitn_char(*p, '=', 1u);
@@ -225,7 +199,7 @@ mod global_env {
         }
 
         #[cfg(unix)]
-        fn getenv(n: &str) -> Option<~str> {
+        pub fn getenv(n: &str) -> Option<~str> {
             unsafe {
                 let s = str::as_c_str(n, libc::getenv);
                 return if ptr::null::<u8>() == cast::reinterpret_cast(&s) {
@@ -238,39 +212,32 @@ mod global_env {
         }
 
         #[cfg(windows)]
-        fn getenv(n: &str) -> Option<~str> {
-            use libc::types::os::arch::extra::*;
-            use libc::funcs::extra::kernel32::*;
+        pub fn getenv(n: &str) -> Option<~str> {
             use win32::*;
             do as_utf16_p(n) |u| {
                 do fill_utf16_buf_and_decode() |buf, sz| {
-                    GetEnvironmentVariableW(u, buf, sz)
+                    libc::GetEnvironmentVariableW(u, buf, sz)
                 }
             }
         }
 
 
         #[cfg(unix)]
-        fn setenv(n: &str, v: &str) {
-
-            // FIXME: remove this when export globs work properly. #1238
-            use libc::funcs::posix01::unistd::setenv;
+        pub fn setenv(n: &str, v: &str) {
             do str::as_c_str(n) |nbuf| {
                 do str::as_c_str(v) |vbuf| {
-                    setenv(nbuf, vbuf, 1i32);
+                    libc::setenv(nbuf, vbuf, 1i32);
                 }
             }
         }
 
 
         #[cfg(windows)]
-        fn setenv(n: &str, v: &str) {
-            // FIXME: remove imports when export globs work properly. #1238
-            use libc::funcs::extra::kernel32::*;
+        pub fn setenv(n: &str, v: &str) {
             use win32::*;
             do as_utf16_p(n) |nbuf| {
                 do as_utf16_p(v) |vbuf| {
-                    SetEnvironmentVariableW(nbuf, vbuf);
+                    libc::SetEnvironmentVariableW(nbuf, vbuf);
                 }
             }
         }
@@ -278,7 +245,7 @@ mod global_env {
     }
 }
 
-fn fdopen(fd: c_int) -> *FILE {
+pub fn fdopen(fd: c_int) -> *FILE {
     return do as_c_charp("r") |modebuf| {
         libc::fdopen(fd, modebuf)
     };
@@ -288,13 +255,13 @@ fn fdopen(fd: c_int) -> *FILE {
 // fsync related
 
 #[cfg(windows)]
-fn fsync_fd(fd: c_int, _level: io::fsync::Level) -> c_int {
+pub fn fsync_fd(fd: c_int, _level: io::fsync::Level) -> c_int {
     use libc::funcs::extra::msvcrt::*;
     return commit(fd);
 }
 
 #[cfg(target_os = "linux")]
-fn fsync_fd(fd: c_int, level: io::fsync::Level) -> c_int {
+pub fn fsync_fd(fd: c_int, level: io::fsync::Level) -> c_int {
     use libc::funcs::posix01::unistd::*;
     match level {
       io::fsync::FSync
@@ -304,7 +271,7 @@ fn fsync_fd(fd: c_int, level: io::fsync::Level) -> c_int {
 }
 
 #[cfg(target_os = "macos")]
-fn fsync_fd(fd: c_int, level: io::fsync::Level) -> c_int {
+pub fn fsync_fd(fd: c_int, level: io::fsync::Level) -> c_int {
     use libc::consts::os::extra::*;
     use libc::funcs::posix88::fcntl::*;
     use libc::funcs::posix01::unistd::*;
@@ -321,19 +288,19 @@ fn fsync_fd(fd: c_int, level: io::fsync::Level) -> c_int {
 }
 
 #[cfg(target_os = "freebsd")]
-fn fsync_fd(fd: c_int, _l: io::fsync::Level) -> c_int {
+pub fn fsync_fd(fd: c_int, _l: io::fsync::Level) -> c_int {
     use libc::funcs::posix01::unistd::*;
     return fsync(fd);
 }
 
 
 #[cfg(windows)]
-fn waitpid(pid: pid_t) -> c_int {
+pub fn waitpid(pid: pid_t) -> c_int {
     return rustrt::rust_process_wait(pid);
 }
 
 #[cfg(unix)]
-fn waitpid(pid: pid_t) -> c_int {
+pub fn waitpid(pid: pid_t) -> c_int {
     use libc::funcs::posix01::wait::*;
     let status = 0 as c_int;
 
@@ -344,7 +311,7 @@ fn waitpid(pid: pid_t) -> c_int {
 
 
 #[cfg(unix)]
-fn pipe() -> {in: c_int, out: c_int} {
+pub fn pipe() -> {in: c_int, out: c_int} {
     let fds = {mut in: 0 as c_int,
                mut out: 0 as c_int };
     assert (libc::pipe(ptr::mut_addr_of(fds.in)) == (0 as c_int));
@@ -354,19 +321,17 @@ fn pipe() -> {in: c_int, out: c_int} {
 
 
 #[cfg(windows)]
-fn pipe() -> {in: c_int, out: c_int} {
-    // FIXME: remove this when export globs work properly. #1238
-    use libc::consts::os::extra::*;
+pub fn pipe() -> {in: c_int, out: c_int} {
     // Windows pipes work subtly differently than unix pipes, and their
     // inheritance has to be handled in a different way that I do not fully
     // understand. Here we explicitly make the pipe non-inheritable, which
     // means to pass it to a subprocess they need to be duplicated first, as
     // in rust_run_program.
     let fds = { mut in: 0 as c_int,
-               mut out: 0 as c_int };
+                mut out: 0 as c_int };
     let res = libc::pipe(ptr::mut_addr_of(fds.in),
                          1024 as c_uint,
-                         (O_BINARY | O_NOINHERIT) as c_int);
+                         (libc::O_BINARY | libc::O_NOINHERIT) as c_int);
     assert (res == 0 as c_int);
     assert (fds.in != -1 as c_int && fds.in != 0 as c_int);
     assert (fds.out != -1 as c_int && fds.in != 0 as c_int);
@@ -378,7 +343,7 @@ fn dup2(src: c_int, dst: c_int) -> c_int {
 }
 
 
-fn dll_filename(base: &str) -> ~str {
+pub fn dll_filename(base: &str) -> ~str {
     return pre() + str::from_slice(base) + dll_suffix();
 
     #[cfg(unix)]
@@ -389,7 +354,7 @@ fn dll_filename(base: &str) -> ~str {
 }
 
 
-fn self_exe_path() -> Option<Path> {
+pub fn self_exe_path() -> Option<Path> {
 
     #[cfg(target_os = "freebsd")]
     fn load_self() -> Option<~str> {
@@ -419,22 +384,17 @@ fn self_exe_path() -> Option<Path> {
 
     #[cfg(target_os = "macos")]
     fn load_self() -> Option<~str> {
-        // FIXME: remove imports when export globs work properly. #1238
-        use libc::funcs::extra::*;
         do fill_charp_buf() |buf, sz| {
-            _NSGetExecutablePath(buf, ptr::mut_addr_of(sz as u32))
+            libc::_NSGetExecutablePath(buf, ptr::mut_addr_of(sz as u32))
                 == (0 as c_int)
         }
     }
 
     #[cfg(windows)]
     fn load_self() -> Option<~str> {
-        // FIXME: remove imports when export globs work properly. #1238
-        use libc::types::os::arch::extra::*;
-        use libc::funcs::extra::kernel32::*;
         use win32::*;
         do fill_utf16_buf_and_decode() |buf, sz| {
-            GetModuleFileNameW(0u as dword, buf, sz)
+            libc::GetModuleFileNameW(0u as libc::dword, buf, sz)
         }
     }
 
@@ -457,7 +417,7 @@ fn self_exe_path() -> Option<Path> {
  *
  * Otherwise, homedir returns option::none.
  */
-fn homedir() -> Option<Path> {
+pub fn homedir() -> Option<Path> {
     return match getenv(~"HOME") {
         Some(p) => if !str::is_empty(p) {
           Some(Path(p))
@@ -494,7 +454,7 @@ fn homedir() -> Option<Path> {
  * 'USERPROFILE' environment variable  if any are set and not the empty
  * string. Otherwise, tmpdir returns the path to the Windows directory.
  */
-fn tmpdir() -> Path {
+pub fn tmpdir() -> Path {
     return lookup();
 
     fn getenv_nonempty(v: &str) -> Option<Path> {
@@ -528,7 +488,7 @@ fn tmpdir() -> Path {
     }
 }
 /// Recursively walk a directory structure
-fn walk_dir(p: &Path, f: fn((&Path)) -> bool) {
+pub fn walk_dir(p: &Path, f: fn((&Path)) -> bool) {
 
     walk_dir_(p, f);
 
@@ -557,21 +517,19 @@ fn walk_dir(p: &Path, f: fn((&Path)) -> bool) {
 }
 
 /// Indicates whether a path represents a directory
-fn path_is_dir(p: &Path) -> bool {
+pub fn path_is_dir(p: &Path) -> bool {
     do str::as_c_str(p.to_str()) |buf| {
         rustrt::rust_path_is_dir(buf) != 0 as c_int
     }
 }
 
 /// Indicates whether a path exists
-fn path_exists(p: &Path) -> bool {
+pub fn path_exists(p: &Path) -> bool {
     do str::as_c_str(p.to_str()) |buf| {
         rustrt::rust_path_exists(buf) != 0 as c_int
     }
 }
 
-// FIXME (#2622): under Windows, we should prepend the current drive letter
-// to paths that start with a slash.
 /**
  * Convert a relative path to an absolute path
  *
@@ -582,7 +540,7 @@ fn path_exists(p: &Path) -> bool {
 // NB: this is here rather than in path because it is a form of environment
 // querying; what it does depends on the process working directory, not just
 // the input paths.
-fn make_absolute(p: &Path) -> Path {
+pub fn make_absolute(p: &Path) -> Path {
     if p.is_absolute {
         copy *p
     } else {
@@ -592,18 +550,16 @@ fn make_absolute(p: &Path) -> Path {
 
 
 /// Creates a directory at the specified path
-fn make_dir(p: &Path, mode: c_int) -> bool {
+pub fn make_dir(p: &Path, mode: c_int) -> bool {
     return mkdir(p, mode);
 
     #[cfg(windows)]
     fn mkdir(p: &Path, _mode: c_int) -> bool {
-        // FIXME: remove imports when export globs work properly. #1238
-        use libc::types::os::arch::extra::*;
-        use libc::funcs::extra::kernel32::*;
-        use win32::*;
         // FIXME: turn mode into something useful? #2623
         do as_utf16_p(p.to_str()) |buf| {
-            CreateDirectoryW(buf, unsafe { cast::reinterpret_cast(&0) })
+            libc::CreateDirectoryW(buf, unsafe {
+                unsafe::reinterpret_cast(&0)
+            })
                 != (0 as BOOL)
         }
     }
@@ -618,7 +574,7 @@ fn make_dir(p: &Path, mode: c_int) -> bool {
 
 /// Lists the contents of a directory
 #[allow(non_implicitly_copyable_typarams)]
-fn list_dir(p: &Path) -> ~[~str] {
+pub fn list_dir(p: &Path) -> ~[~str] {
 
     #[cfg(unix)]
     fn star(p: &Path) -> Path { copy *p }
@@ -636,22 +592,19 @@ fn list_dir(p: &Path) -> ~[~str] {
  *
  * This version prepends each entry with the directory.
  */
-fn list_dir_path(p: &Path) -> ~[~Path] {
+pub fn list_dir_path(p: &Path) -> ~[~Path] {
     os::list_dir(p).map(|f| ~p.push(*f))
 }
 
 /// Removes a directory at the specified path
-fn remove_dir(p: &Path) -> bool {
+pub fn remove_dir(p: &Path) -> bool {
    return rmdir(p);
 
     #[cfg(windows)]
     fn rmdir(p: &Path) -> bool {
-        // FIXME: remove imports when export globs work properly. #1238
-        use libc::funcs::extra::kernel32::*;
-        use libc::types::os::arch::extra::*;
         use win32::*;
         return do as_utf16_p(p.to_str()) |buf| {
-            RemoveDirectoryW(buf) != (0 as BOOL)
+            libc::RemoveDirectoryW(buf) != (0 as libc::BOOL)
         };
     }
 
@@ -663,17 +616,14 @@ fn remove_dir(p: &Path) -> bool {
     }
 }
 
-fn change_dir(p: &Path) -> bool {
+pub fn change_dir(p: &Path) -> bool {
     return chdir(p);
 
     #[cfg(windows)]
     fn chdir(p: &Path) -> bool {
-        // FIXME: remove imports when export globs work properly. #1238
-        use libc::funcs::extra::kernel32::*;
-        use libc::types::os::arch::extra::*;
         use win32::*;
         return do as_utf16_p(p.to_str()) |buf| {
-            SetCurrentDirectoryW(buf) != (0 as BOOL)
+            libc::SetCurrentDirectoryW(buf) != (0 as libc::BOOL)
         };
     }
 
@@ -686,18 +636,16 @@ fn change_dir(p: &Path) -> bool {
 }
 
 /// Copies a file from one location to another
-fn copy_file(from: &Path, to: &Path) -> bool {
+pub fn copy_file(from: &Path, to: &Path) -> bool {
     return do_copy_file(from, to);
 
     #[cfg(windows)]
     fn do_copy_file(from: &Path, to: &Path) -> bool {
-        // FIXME: remove imports when export globs work properly. #1238
-        use libc::funcs::extra::kernel32::*;
-        use libc::types::os::arch::extra::*;
         use win32::*;
         return do as_utf16_p(from.to_str()) |fromp| {
             do as_utf16_p(to.to_str()) |top| {
-                CopyFileW(fromp, top, (0 as BOOL)) != (0 as BOOL)
+                libc::CopyFileW(fromp, top, (0 as libc::BOOL)) !=
+                    (0 as libc::BOOL)
             }
         }
     }
@@ -748,18 +696,14 @@ fn copy_file(from: &Path, to: &Path) -> bool {
 }
 
 /// Deletes an existing file
-fn remove_file(p: &Path) -> bool {
+pub fn remove_file(p: &Path) -> bool {
     return unlink(p);
 
     #[cfg(windows)]
     fn unlink(p: &Path) -> bool {
-        // FIXME (similar to Issue #2006): remove imports when export globs
-        // work properly.
-        use libc::funcs::extra::kernel32::*;
-        use libc::types::os::arch::extra::*;
         use win32::*;
         return do as_utf16_p(p.to_str()) |buf| {
-            DeleteFileW(buf) != (0 as BOOL)
+            libc::DeleteFileW(buf) != (0 as libc::BOOL)
         };
     }
 
@@ -772,7 +716,7 @@ fn remove_file(p: &Path) -> bool {
 }
 
 /// Get a string representing the platform-dependent last error
-fn last_os_error() -> ~str {
+pub fn last_os_error() -> ~str {
     rustrt::last_os_error()
 }
 
@@ -784,64 +728,59 @@ fn last_os_error() -> ~str {
  * and is supervised by the scheduler then any user-specified exit status is
  * ignored and the process exits with the default failure status
  */
-fn set_exit_status(code: int) {
+pub fn set_exit_status(code: int) {
     rustrt::rust_set_exit_status(code as libc::intptr_t);
 }
 
 #[cfg(unix)]
-fn family() -> ~str { ~"unix" }
+pub fn family() -> ~str { ~"unix" }
 
 #[cfg(windows)]
-fn family() -> ~str { ~"windows" }
+pub fn family() -> ~str { ~"windows" }
 
 #[cfg(target_os = "macos")]
 mod consts {
-    #[legacy_exports];
-    fn sysname() -> ~str { ~"macos" }
-    fn exe_suffix() -> ~str { ~"" }
-    fn dll_suffix() -> ~str { ~".dylib" }
+    pub fn sysname() -> ~str { ~"macos" }
+    pub fn exe_suffix() -> ~str { ~"" }
+    pub fn dll_suffix() -> ~str { ~".dylib" }
 }
 
 #[cfg(target_os = "freebsd")]
 mod consts {
-    #[legacy_exports];
-    fn sysname() -> ~str { ~"freebsd" }
-    fn exe_suffix() -> ~str { ~"" }
-    fn dll_suffix() -> ~str { ~".so" }
+    pub fn sysname() -> ~str { ~"freebsd" }
+    pub fn exe_suffix() -> ~str { ~"" }
+    pub fn dll_suffix() -> ~str { ~".so" }
 }
 
 #[cfg(target_os = "linux")]
 mod consts {
-    #[legacy_exports];
-    fn sysname() -> ~str { ~"linux" }
-    fn exe_suffix() -> ~str { ~"" }
-    fn dll_suffix() -> ~str { ~".so" }
+    pub fn sysname() -> ~str { ~"linux" }
+    pub fn exe_suffix() -> ~str { ~"" }
+    pub fn dll_suffix() -> ~str { ~".so" }
 }
 
 #[cfg(target_os = "win32")]
 mod consts {
-    #[legacy_exports];
-    fn sysname() -> ~str { ~"win32" }
-    fn exe_suffix() -> ~str { ~".exe" }
-    fn dll_suffix() -> ~str { ~".dll" }
+    pub fn sysname() -> ~str { ~"win32" }
+    pub fn exe_suffix() -> ~str { ~".exe" }
+    pub fn dll_suffix() -> ~str { ~".dll" }
 }
 
 #[cfg(target_arch = "x86")]
-fn arch() -> ~str { ~"x86" }
+pub fn arch() -> ~str { ~"x86" }
 
 #[cfg(target_arch = "x86_64")]
-fn arch() -> ~str { ~"x86_64" }
+pub fn arch() -> ~str { ~"x86_64" }
 
 #[cfg(target_arch = "arm")]
-fn arch() -> str { ~"arm" }
+pub fn arch() -> str { ~"arm" }
 
 #[cfg(test)]
 #[allow(non_implicitly_copyable_typarams)]
 mod tests {
-    #[legacy_exports];
 
     #[test]
-    fn last_os_error() {
+    pub fn last_os_error() {
         log(debug, last_os_error());
     }