From 4cc723dc22e5ebcbac4dc431a82ea75bc9ae6017 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Fri, 21 Feb 2014 23:22:51 +1100 Subject: [PATCH] native: be more const correct with the FFI calls. These calls are mutating their argument and so it's bad behaviour to be pretending that the values are immutable to rustc. --- src/libnative/io/addrinfo.rs | 12 ++++++------ src/libnative/io/file.rs | 2 +- src/libnative/io/net.rs | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/libnative/io/addrinfo.rs b/src/libnative/io/addrinfo.rs index 5bdeaa17e745..ff617e5a230e 100644 --- a/src/libnative/io/addrinfo.rs +++ b/src/libnative/io/addrinfo.rs @@ -14,7 +14,7 @@ use std::cast; use std::io::IoError; use std::libc; use std::libc::{c_char, c_int}; -use std::ptr::null; +use std::ptr::{null, mut_null}; use super::net::sockaddr_to_addr; @@ -42,13 +42,13 @@ impl GetAddrInfoRequest { }); let hint_ptr = hint.as_ref().map_or(null(), |x| x as *libc::addrinfo); - let res = null(); + let mut res = mut_null(); // Make the call let s = unsafe { let ch = if c_host.is_null() { null() } else { c_host.with_ref(|x| x) }; let cs = if c_serv.is_null() { null() } else { c_serv.with_ref(|x| x) }; - getaddrinfo(ch, cs, hint_ptr, &res) + getaddrinfo(ch, cs, hint_ptr, &mut res) }; // Error? @@ -74,7 +74,7 @@ impl GetAddrInfoRequest { flags: (*rp).ai_flags as uint }); - rp = (*rp).ai_next; + rp = (*rp).ai_next as *mut libc::addrinfo; } } @@ -86,8 +86,8 @@ impl GetAddrInfoRequest { extern "system" { fn getaddrinfo(node: *c_char, service: *c_char, - hints: *libc::addrinfo, res: **libc::addrinfo) -> c_int; - fn freeaddrinfo(res: *libc::addrinfo); + hints: *libc::addrinfo, res: *mut *mut libc::addrinfo) -> c_int; + fn freeaddrinfo(res: *mut libc::addrinfo); #[cfg(not(windows))] fn gai_strerror(errcode: c_int) -> *c_char; #[cfg(windows)] diff --git a/src/libnative/io/file.rs b/src/libnative/io/file.rs index d1d2dba383d9..27430ddee97e 100644 --- a/src/libnative/io/file.rs +++ b/src/libnative/io/file.rs @@ -91,7 +91,7 @@ impl FileDesc { #[cfg(not(windows))] type rlen = libc::size_t; let ret = retry(|| unsafe { libc::read(self.fd(), - buf.as_ptr() as *mut libc::c_void, + buf.as_mut_ptr() as *mut libc::c_void, buf.len() as rlen) as libc::c_int }); if ret == 0 { diff --git a/src/libnative/io/net.rs b/src/libnative/io/net.rs index d58e4d54342c..d71f7544225c 100644 --- a/src/libnative/io/net.rs +++ b/src/libnative/io/net.rs @@ -309,7 +309,7 @@ impl rtio::RtioTcpStream for TcpStream { let ret = retry(|| { unsafe { libc::recv(self.fd(), - buf.as_ptr() as *mut libc::c_void, + buf.as_mut_ptr() as *mut libc::c_void, buf.len() as wrlen, 0) as libc::c_int }