@@ -38,7 +38,10 @@ impl FsRequest {
3838
3939 pub fn open < P : PathLike > ( self , loop_ : & Loop , path : & P , flags : int , mode : int ,
4040 cb : FsCallback ) {
41- let complete_cb_ptr = self . req_boilerplate ( Some ( cb) ) ;
41+ let complete_cb_ptr = {
42+ let mut me = self ;
43+ me. req_boilerplate ( Some ( cb) )
44+ } ;
4245 path. path_as_str ( |p| {
4346 p. to_c_str ( ) . with_ref ( |p| unsafe {
4447 uvll:: fs_open ( loop_. native_handle ( ) ,
@@ -49,7 +52,10 @@ impl FsRequest {
4952
5053 pub fn open_sync < P : PathLike > ( self , loop_ : & Loop , path : & P ,
5154 flags : int , mode : int ) -> Result < c_int , UvError > {
52- let complete_cb_ptr = self . req_boilerplate ( None ) ;
55+ let complete_cb_ptr = {
56+ let mut me = self ;
57+ me. req_boilerplate ( None )
58+ } ;
5359 let result = path. path_as_str ( |p| {
5460 p. to_c_str ( ) . with_ref ( |p| unsafe {
5561 uvll:: fs_open ( loop_. native_handle ( ) ,
@@ -60,7 +66,10 @@ impl FsRequest {
6066 }
6167
6268 pub fn unlink < P : PathLike > ( self , loop_ : & Loop , path : & P , cb : FsCallback ) {
63- let complete_cb_ptr = self . req_boilerplate ( Some ( cb) ) ;
69+ let complete_cb_ptr = {
70+ let mut me = self ;
71+ me. req_boilerplate ( Some ( cb) )
72+ } ;
6473 path. path_as_str ( |p| {
6574 p. to_c_str ( ) . with_ref ( |p| unsafe {
6675 uvll:: fs_unlink ( loop_. native_handle ( ) ,
@@ -71,7 +80,10 @@ impl FsRequest {
7180
7281 pub fn unlink_sync < P : PathLike > ( self , loop_ : & Loop , path : & P )
7382 -> Result < c_int , UvError > {
74- let complete_cb_ptr = self . req_boilerplate ( None ) ;
83+ let complete_cb_ptr = {
84+ let mut me = self ;
85+ me. req_boilerplate ( None )
86+ } ;
7587 let result = path. path_as_str ( |p| {
7688 p. to_c_str ( ) . with_ref ( |p| unsafe {
7789 uvll:: fs_unlink ( loop_. native_handle ( ) ,
@@ -82,7 +94,10 @@ impl FsRequest {
8294 }
8395
8496 pub fn stat < P : PathLike > ( self , loop_ : & Loop , path : & P , cb : FsCallback ) {
85- let complete_cb_ptr = self . req_boilerplate ( Some ( cb) ) ;
97+ let complete_cb_ptr = {
98+ let mut me = self ;
99+ me. req_boilerplate ( Some ( cb) )
100+ } ;
86101 path. path_as_str ( |p| {
87102 p. to_c_str ( ) . with_ref ( |p| unsafe {
88103 uvll:: fs_stat ( loop_. native_handle ( ) ,
@@ -92,7 +107,10 @@ impl FsRequest {
92107 }
93108
94109 pub fn write ( self , loop_ : & Loop , fd : c_int , buf : Buf , offset : i64 , cb : FsCallback ) {
95- let complete_cb_ptr = self . req_boilerplate ( Some ( cb) ) ;
110+ let complete_cb_ptr = {
111+ let mut me = self ;
112+ me. req_boilerplate ( Some ( cb) )
113+ } ;
96114 let base_ptr = buf. base as * c_void ;
97115 let len = buf. len as uint ;
98116 unsafe {
@@ -103,7 +121,10 @@ impl FsRequest {
103121 }
104122 pub fn write_sync ( self , loop_ : & Loop , fd : c_int , buf : Buf , offset : i64 )
105123 -> Result < c_int , UvError > {
106- let complete_cb_ptr = self . req_boilerplate ( None ) ;
124+ let complete_cb_ptr = {
125+ let mut me = self ;
126+ me. req_boilerplate ( None )
127+ } ;
107128 let base_ptr = buf. base as * c_void ;
108129 let len = buf. len as uint ;
109130 let result = unsafe {
@@ -115,7 +136,10 @@ impl FsRequest {
115136 }
116137
117138 pub fn read ( self , loop_ : & Loop , fd : c_int , buf : Buf , offset : i64 , cb : FsCallback ) {
118- let complete_cb_ptr = self . req_boilerplate ( Some ( cb) ) ;
139+ let complete_cb_ptr = {
140+ let mut me = self ;
141+ me. req_boilerplate ( Some ( cb) )
142+ } ;
119143 let buf_ptr = buf. base as * c_void ;
120144 let len = buf. len as uint ;
121145 unsafe {
@@ -126,7 +150,10 @@ impl FsRequest {
126150 }
127151 pub fn read_sync ( self , loop_ : & Loop , fd : c_int , buf : Buf , offset : i64 )
128152 -> Result < c_int , UvError > {
129- let complete_cb_ptr = self . req_boilerplate ( None ) ;
153+ let complete_cb_ptr = {
154+ let mut me = self ;
155+ me. req_boilerplate ( None )
156+ } ;
130157 let buf_ptr = buf. base as * c_void ;
131158 let len = buf. len as uint ;
132159 let result = unsafe {
@@ -138,14 +165,20 @@ impl FsRequest {
138165 }
139166
140167 pub fn close ( self , loop_ : & Loop , fd : c_int , cb : FsCallback ) {
141- let complete_cb_ptr = self . req_boilerplate ( Some ( cb) ) ;
168+ let complete_cb_ptr = {
169+ let mut me = self ;
170+ me. req_boilerplate ( Some ( cb) )
171+ } ;
142172 unsafe {
143173 uvll:: fs_close ( loop_. native_handle ( ) , self . native_handle ( ) ,
144174 fd, complete_cb_ptr)
145175 } ;
146176 }
147177 pub fn close_sync ( self , loop_ : & Loop , fd : c_int ) -> Result < c_int , UvError > {
148- let complete_cb_ptr = self . req_boilerplate ( None ) ;
178+ let complete_cb_ptr = {
179+ let mut me = self ;
180+ me. req_boilerplate ( None )
181+ } ;
149182 let result = unsafe {
150183 uvll:: fs_close ( loop_. native_handle ( ) , self . native_handle ( ) ,
151184 fd, complete_cb_ptr)
@@ -154,7 +187,10 @@ impl FsRequest {
154187 }
155188
156189 pub fn mkdir < P : PathLike > ( self , loop_ : & Loop , path : & P , mode : int , cb : FsCallback ) {
157- let complete_cb_ptr = self . req_boilerplate ( Some ( cb) ) ;
190+ let complete_cb_ptr = {
191+ let mut me = self ;
192+ me. req_boilerplate ( Some ( cb) )
193+ } ;
158194 path. path_as_str ( |p| {
159195 p. to_c_str ( ) . with_ref ( |p| unsafe {
160196 uvll:: fs_mkdir ( loop_. native_handle ( ) ,
@@ -164,7 +200,10 @@ impl FsRequest {
164200 }
165201
166202 pub fn rmdir < P : PathLike > ( self , loop_ : & Loop , path : & P , cb : FsCallback ) {
167- let complete_cb_ptr = self . req_boilerplate ( Some ( cb) ) ;
203+ let complete_cb_ptr = {
204+ let mut me = self ;
205+ me. req_boilerplate ( Some ( cb) )
206+ } ;
168207 path. path_as_str ( |p| {
169208 p. to_c_str ( ) . with_ref ( |p| unsafe {
170209 uvll:: fs_rmdir ( loop_. native_handle ( ) ,
@@ -175,7 +214,10 @@ impl FsRequest {
175214
176215 pub fn readdir < P : PathLike > ( self , loop_ : & Loop , path : & P ,
177216 flags : c_int , cb : FsCallback ) {
178- let complete_cb_ptr = self . req_boilerplate ( Some ( cb) ) ;
217+ let complete_cb_ptr = {
218+ let mut me = self ;
219+ me. req_boilerplate ( Some ( cb) )
220+ } ;
179221 path. path_as_str ( |p| {
180222 p. to_c_str ( ) . with_ref ( |p| unsafe {
181223 uvll:: fs_readdir ( loop_. native_handle ( ) ,
@@ -193,8 +235,7 @@ impl FsRequest {
193235 None => Ok ( result)
194236 }
195237 }
196- fn req_boilerplate ( & self , cb : Option < FsCallback > ) -> * u8 {
197- // XXX: this is unsafe/mutable
238+ fn req_boilerplate ( & mut self , cb : Option < FsCallback > ) -> * u8 {
198239 let result = match cb {
199240 Some ( _) => {
200241 compl_cb as * u8
@@ -204,7 +245,7 @@ impl FsRequest {
204245 self . install_req_data ( cb) ;
205246 result
206247 }
207- pub fn install_req_data ( & self , cb : Option < FsCallback > ) {
248+ pub fn install_req_data ( & mut self , cb : Option < FsCallback > ) {
208249 let fs_req = ( self . native_handle ( ) ) as * uvll:: uv_write_t ;
209250 let data = ~RequestData {
210251 complete_cb : cb
0 commit comments