40
40
#define ARGS4 (a ,b ,c ,d ) (a), (b), (c), (d)
41
41
42
42
#define WRAP_EIO (type , eiofunc , func , args ) \
43
- uv_fs_req_init(loop, req, type, cb); \
43
+ uv_fs_req_init(loop, req, type, path, cb); \
44
44
if (cb) { \
45
45
/* async */ \
46
46
uv_ref (loop ); \
61
61
62
62
63
63
static void uv_fs_req_init (uv_loop_t * loop , uv_fs_t * req , uv_fs_type fs_type ,
64
- uv_fs_cb cb ) {
64
+ char * path , uv_fs_cb cb ) {
65
65
/* Make sure the thread pool is initialized. */
66
66
uv_eio_init (loop );
67
67
@@ -72,12 +72,16 @@ static void uv_fs_req_init(uv_loop_t* loop, uv_fs_t* req, uv_fs_type fs_type,
72
72
req -> cb = cb ;
73
73
req -> result = 0 ;
74
74
req -> ptr = NULL ;
75
+ req -> path = path ? strdup (path ) : NULL ;
75
76
req -> errorno = 0 ;
76
77
req -> eio = NULL ;
77
78
}
78
79
79
80
80
81
void uv_fs_req_cleanup (uv_fs_t * req ) {
82
+ free (req -> path );
83
+ req -> path = NULL ;
84
+
81
85
switch (req -> fs_type ) {
82
86
case UV_FS_READDIR :
83
87
assert (req -> ptr );
@@ -168,13 +172,14 @@ static int uv__fs_after(eio_req* eio) {
168
172
169
173
170
174
int uv_fs_close (uv_loop_t * loop , uv_fs_t * req , uv_file file , uv_fs_cb cb ) {
175
+ char * path = NULL ;
171
176
WRAP_EIO (UV_FS_CLOSE , eio_close , close , ARGS1 (file ));
172
177
}
173
178
174
179
175
180
int uv_fs_open (uv_loop_t * loop , uv_fs_t * req , const char * path , int flags ,
176
181
int mode , uv_fs_cb cb ) {
177
- uv_fs_req_init (loop , req , UV_FS_OPEN , cb );
182
+ uv_fs_req_init (loop , req , UV_FS_OPEN , path , cb );
178
183
179
184
if (cb ) {
180
185
/* async */
@@ -202,7 +207,7 @@ int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags,
202
207
203
208
int uv_fs_read (uv_loop_t * loop , uv_fs_t * req , uv_file fd , void * buf ,
204
209
size_t length , off_t offset , uv_fs_cb cb ) {
205
- uv_fs_req_init (loop , req , UV_FS_READ , cb );
210
+ uv_fs_req_init (loop , req , UV_FS_READ , NULL , cb );
206
211
207
212
if (cb ) {
208
213
/* async */
@@ -238,7 +243,7 @@ int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) {
238
243
239
244
int uv_fs_write (uv_loop_t * loop , uv_fs_t * req , uv_file file , void * buf ,
240
245
size_t length , off_t offset , uv_fs_cb cb ) {
241
- uv_fs_req_init (loop , req , UV_FS_WRITE , cb );
246
+ uv_fs_req_init (loop , req , UV_FS_WRITE , NULL , cb );
242
247
243
248
if (cb ) {
244
249
/* async */
@@ -284,7 +289,7 @@ int uv_fs_readdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags,
284
289
size_t size = 0 ;
285
290
size_t d_namlen = 0 ;
286
291
287
- uv_fs_req_init (loop , req , UV_FS_READDIR , cb );
292
+ uv_fs_req_init (loop , req , UV_FS_READDIR , path , cb );
288
293
289
294
if (cb ) {
290
295
/* async */
@@ -340,7 +345,7 @@ int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) {
340
345
char * pathdup = path ;
341
346
int pathlen ;
342
347
343
- uv_fs_req_init (loop , req , UV_FS_STAT , cb );
348
+ uv_fs_req_init (loop , req , UV_FS_STAT , path , cb );
344
349
345
350
/* TODO do this without duplicating the string. */
346
351
/* TODO security */
@@ -383,7 +388,7 @@ int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) {
383
388
384
389
385
390
int uv_fs_fstat (uv_loop_t * loop , uv_fs_t * req , uv_file file , uv_fs_cb cb ) {
386
- uv_fs_req_init (loop , req , UV_FS_FSTAT , cb );
391
+ uv_fs_req_init (loop , req , UV_FS_FSTAT , NULL , cb );
387
392
388
393
if (cb ) {
389
394
/* async */
@@ -418,23 +423,27 @@ int uv_fs_rename(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* ne
418
423
419
424
420
425
int uv_fs_fsync (uv_loop_t * loop , uv_fs_t * req , uv_file file , uv_fs_cb cb ) {
426
+ char * path = NULL ;
421
427
WRAP_EIO (UV_FS_FSYNC , eio_fsync , fsync , ARGS1 (file ))
422
428
}
423
429
424
430
425
431
int uv_fs_fdatasync (uv_loop_t * loop , uv_fs_t * req , uv_file file , uv_fs_cb cb ) {
432
+ char * path = NULL ;
426
433
WRAP_EIO (UV_FS_FDATASYNC , eio_fdatasync , fdatasync , ARGS1 (file ))
427
434
}
428
435
429
436
430
437
int uv_fs_ftruncate (uv_loop_t * loop , uv_fs_t * req , uv_file file , off_t offset ,
431
438
uv_fs_cb cb ) {
439
+ char * path = NULL ;
432
440
WRAP_EIO (UV_FS_FTRUNCATE , eio_ftruncate , ftruncate , ARGS2 (file , offset ))
433
441
}
434
442
435
443
436
444
int uv_fs_sendfile (uv_loop_t * loop , uv_fs_t * req , uv_file out_fd , uv_file in_fd ,
437
445
off_t in_offset , size_t length , uv_fs_cb cb ) {
446
+ char * path = NULL ;
438
447
WRAP_EIO (UV_FS_SENDFILE , eio_sendfile , eio_sendfile_sync ,
439
448
ARGS4 (out_fd , in_fd , in_offset , length ))
440
449
}
@@ -471,7 +480,7 @@ int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) {
471
480
char * pathdup = path ;
472
481
int pathlen ;
473
482
474
- uv_fs_req_init (loop , req , UV_FS_LSTAT , cb );
483
+ uv_fs_req_init (loop , req , UV_FS_LSTAT , path , cb );
475
484
476
485
/* TODO do this without duplicating the string. */
477
486
/* TODO security */
@@ -533,7 +542,7 @@ int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path,
533
542
534
543
status = -1 ;
535
544
536
- uv_fs_req_init (loop , req , UV_FS_READLINK , cb );
545
+ uv_fs_req_init (loop , req , UV_FS_READLINK , path , cb );
537
546
538
547
if (cb ) {
539
548
if ((req -> eio = eio_readlink (path , EIO_PRI_DEFAULT , uv__fs_after , req ))) {
@@ -581,6 +590,7 @@ int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path,
581
590
582
591
int uv_fs_fchmod (uv_loop_t * loop , uv_fs_t * req , uv_file file , int mode ,
583
592
uv_fs_cb cb ) {
593
+ char * path = NULL ;
584
594
WRAP_EIO (UV_FS_FCHMOD , eio_fchmod , fchmod , ARGS2 (file , mode ))
585
595
}
586
596
@@ -593,6 +603,7 @@ int uv_fs_chown(uv_loop_t* loop, uv_fs_t* req, const char* path, int uid,
593
603
594
604
int uv_fs_fchown (uv_loop_t * loop , uv_fs_t * req , uv_file file , int uid , int gid ,
595
605
uv_fs_cb cb ) {
606
+ char * path = NULL ;
596
607
WRAP_EIO (UV_FS_FCHOWN , eio_fchown , fchown , ARGS3 (file , uid , gid ))
597
608
}
598
609
0 commit comments