@@ -95,27 +95,6 @@ impl FsRequest {
95
95
}
96
96
}
97
97
98
- pub fn close ( loop_ : & Loop , fd : c_int , sync : bool ) -> Result < ( ) , UvError > {
99
- if sync {
100
- execute_nop ( |req, cb| unsafe {
101
- uvll:: uv_fs_close ( loop_. handle , req, fd, cb)
102
- } )
103
- } else {
104
- unsafe {
105
- let req = uvll:: malloc_req ( uvll:: UV_FS ) ;
106
- uvll:: uv_fs_close ( loop_. handle , req, fd, close_cb) ;
107
- return Ok ( ( ) ) ;
108
- }
109
-
110
- extern fn close_cb ( req : * uvll:: uv_fs_t ) {
111
- unsafe {
112
- uvll:: uv_fs_req_cleanup ( req) ;
113
- uvll:: free_req ( req) ;
114
- }
115
- }
116
- }
117
- }
118
-
119
98
pub fn mkdir ( loop_ : & Loop , path : & CString , mode : c_int )
120
99
-> Result < ( ) , UvError >
121
100
{
@@ -240,10 +219,12 @@ impl FsRequest {
240
219
pub fn utime ( loop_ : & Loop , path : & CString , atime : u64 , mtime : u64 )
241
220
-> Result < ( ) , UvError >
242
221
{
222
+ // libuv takes seconds
223
+ let atime = atime as libc:: c_double / 1000.0 ;
224
+ let mtime = mtime as libc:: c_double / 1000.0 ;
243
225
execute_nop ( |req, cb| unsafe {
244
226
uvll:: uv_fs_utime ( loop_. handle , req, path. with_ref ( |p| p) ,
245
- atime as libc:: c_double , mtime as libc:: c_double ,
246
- cb)
227
+ atime, mtime, cb)
247
228
} )
248
229
}
249
230
@@ -368,12 +349,12 @@ impl FileWatcher {
368
349
}
369
350
370
351
fn base_read( & mut self , buf: & mut [ u8] , offset: i64 ) -> Result < int , IoError > {
371
- let _m = self . fire_missiles ( ) ;
352
+ let _m = self . fire_homing_missile ( ) ;
372
353
let r = FsRequest :: read( & self . loop_, self . fd, buf, offset) ;
373
354
r. map_err( uv_error_to_io_error)
374
355
}
375
356
fn base_write( & mut self , buf: & [ u8] , offset: i64 ) -> Result < ( ) , IoError > {
376
- let _m = self . fire_missiles ( ) ;
357
+ let _m = self . fire_homing_missile ( ) ;
377
358
let r = FsRequest :: write( & self . loop_, self . fd, buf, offset) ;
378
359
r. map_err( uv_error_to_io_error)
379
360
}
@@ -397,14 +378,26 @@ impl FileWatcher {
397
378
398
379
impl Drop for FileWatcher {
399
380
fn drop( & mut self ) {
400
- let _m = self . fire_missiles ( ) ;
381
+ let _m = self . fire_homing_missile ( ) ;
401
382
match self . close {
402
383
rtio : : DontClose => { }
403
384
rtio:: CloseAsynchronously => {
404
- FsRequest :: close( & self . loop_, self . fd, false ) ;
385
+ unsafe {
386
+ let req = uvll:: malloc_req( uvll:: UV_FS ) ;
387
+ uvll:: uv_fs_close( self . loop_. handle, req, self . fd, close_cb) ;
388
+ }
389
+
390
+ extern fn close_cb( req: * uvll:: uv_fs_t) {
391
+ unsafe {
392
+ uvll:: uv_fs_req_cleanup( req) ;
393
+ uvll:: free_req( req) ;
394
+ }
395
+ }
405
396
}
406
397
rtio:: CloseSynchronously => {
407
- FsRequest :: close( & self . loop_, self . fd, true ) ;
398
+ execute_nop( |req, cb| unsafe {
399
+ uvll : : uv_fs_close( self . loop_. handle, req, self . fd, cb)
400
+ } ) ;
408
401
}
409
402
}
410
403
}
@@ -439,15 +432,15 @@ impl rtio::RtioFileStream for FileWatcher {
439
432
self_. seek_common( 0 , SEEK_CUR )
440
433
}
441
434
fn fsync( & mut self ) -> Result < ( ) , IoError > {
442
- let _m = self . fire_missiles ( ) ;
435
+ let _m = self . fire_homing_missile ( ) ;
443
436
FsRequest :: fsync( & self . loop_, self . fd) . map_err( uv_error_to_io_error)
444
437
}
445
438
fn datasync( & mut self ) -> Result < ( ) , IoError > {
446
- let _m = self . fire_missiles ( ) ;
439
+ let _m = self . fire_homing_missile ( ) ;
447
440
FsRequest :: datasync( & self . loop_, self . fd) . map_err( uv_error_to_io_error)
448
441
}
449
442
fn truncate( & mut self , offset: i64 ) -> Result < ( ) , IoError > {
450
- let _m = self . fire_missiles ( ) ;
443
+ let _m = self . fire_homing_missile ( ) ;
451
444
let r = FsRequest :: truncate( & self . loop_, self . fd, offset) ;
452
445
r. map_err( uv_error_to_io_error)
453
446
}
@@ -482,10 +475,6 @@ mod test {
482
475
// write
483
476
let result = FsRequest :: write( l, fd, "hello" . as_bytes( ) , -1 ) ;
484
477
assert ! ( result. is_ok( ) ) ;
485
-
486
- // close
487
- let result = FsRequest :: close( l, fd, true ) ;
488
- assert ! ( result. is_ok( ) ) ;
489
478
}
490
479
491
480
{
@@ -505,15 +494,10 @@ mod test {
505
494
assert ! ( nread > 0 ) ;
506
495
let read_str = str:: from_utf8( read_mem. slice( 0 , nread as uint) ) ;
507
496
assert_eq!( read_str, ~"hello");
508
-
509
- // close
510
- let result = FsRequest::close(l, fd, true);
511
- assert!(result.is_ok());
512
-
513
- // unlink
514
- let result = FsRequest::unlink(l, &path_str.to_c_str());
515
- assert!(result.is_ok());
516
497
}
498
+ // unlink
499
+ let result = FsRequest::unlink(l, &path_str.to_c_str());
500
+ assert!(result.is_ok());
517
501
}
518
502
}
519
503
@@ -570,12 +554,14 @@ mod test {
570
554
let path = &" . /tmp/double_create_dir".to_c_str();
571
555
let mode = S_IWUSR | S_IRUSR;
572
556
557
+ let result = FsRequest::stat(l, path);
558
+ assert!(result.is_err(), " { : ?} ", result);
573
559
let result = FsRequest::mkdir(l, path, mode as c_int);
574
- assert!(result.is_ok());
560
+ assert!(result.is_ok(), " { : ? } ", result );
575
561
let result = FsRequest::mkdir(l, path, mode as c_int);
576
- assert!(result.is_err());
562
+ assert!(result.is_err(), " { : ? } ", result );
577
563
let result = FsRequest::rmdir(l, path);
578
- assert!(result.is_ok());
564
+ assert!(result.is_ok(), " { : ? } ", result );
579
565
}
580
566
}
581
567
0 commit comments