about summary refs log tree commit diff
path: root/src/libnative
diff options
context:
space:
mode:
authorDaniel Micay <danielmicay@gmail.com>2014-01-17 20:45:48 -0500
committerDaniel Micay <danielmicay@gmail.com>2014-01-17 23:41:31 -0500
commitae2a5ecbf600495a80ae4d99853a2ed2c8f6b5e9 (patch)
tree699380bedd508918752bc0cfa7c8ebc91aff3ca0 /src/libnative
parentaa67e13498936c42581f70daaf3b6d028426dde6 (diff)
downloadrust-ae2a5ecbf600495a80ae4d99853a2ed2c8f6b5e9.tar.gz
rust-ae2a5ecbf600495a80ae4d99853a2ed2c8f6b5e9.zip
handle zero-size allocations correctly
The `malloc` family of functions may return a null pointer for a
zero-size allocation, which should not be interpreted as an
out-of-memory error.

If the implementation does not return a null pointer, then handling
this will result in memory savings for zero-size types.

This also switches some code to `malloc_raw` in order to maintain a
centralized point for handling out-of-memory in `rt::global_heap`.

Closes #11634
Diffstat (limited to 'src/libnative')
-rw-r--r--src/libnative/io/file.rs4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/libnative/io/file.rs b/src/libnative/io/file.rs
index 49290434785..9e1bc977082 100644
--- a/src/libnative/io/file.rs
+++ b/src/libnative/io/file.rs
@@ -13,7 +13,7 @@
 use std::c_str::CString;
 use std::io::IoError;
 use std::io;
-use std::libc::c_int;
+use std::libc::{c_int, c_void};
 use std::libc;
 use std::os;
 use std::rt::rtio;
@@ -548,7 +548,7 @@ pub fn readdir(p: &CString) -> IoResult<~[Path]> {
             let p = Path::new(p);
             let star = p.join("*");
             as_utf16_p(star.as_str().unwrap(), |path_ptr| {
-                let wfd_ptr = malloc_raw(rust_list_dir_wfd_size() as uint);
+                let wfd_ptr = malloc_raw(rust_list_dir_wfd_size() as uint) as *c_void;
                 let find_handle = FindFirstFileW(path_ptr, wfd_ptr as HANDLE);
                 if find_handle as libc::c_int != INVALID_HANDLE_VALUE {
                     let mut paths = ~[];