int uv_fs_open(uv_fs_t* req, const char* path, int flags, int mode, uv_fs_cb cb) { if (cb) { uv_fs_req_init_async(req, UV_FS_OPEN, cb); WRAP_REQ_ARGS3(req, path, flags, mode); STRDUP_ARG(req, 0); QUEUE_FS_TP_JOB(req); } else { uv_fs_req_init_sync(req, UV_FS_OPEN); fs__open(req, path, flags, mode); } return 0; }
int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, int mode, uv_fs_cb cb) { if (cb) { uv_fs_req_init_async(loop, req, UV_FS_OPEN, path, cb); WRAP_REQ_ARGS2(req, flags, mode); QUEUE_FS_TP_JOB(loop, req); } else { uv_fs_req_init_sync(loop, req, UV_FS_OPEN); fs__open(req, path, flags, mode); SET_UV_LAST_ERROR_FROM_REQ(req); } return 0; }
static DWORD WINAPI uv_fs_thread_proc(void* parameter) { uv_fs_t* req = (uv_fs_t*) parameter; uv_loop_t* loop = req->loop; assert(req != NULL); assert(req->type == UV_FS); switch (req->fs_type) { case UV_FS_OPEN: fs__open(req, req->path, (int)req->arg0, (int)req->arg1); break; case UV_FS_CLOSE: fs__close(req, (uv_file)req->arg0); break; case UV_FS_READ: fs__read(req, (uv_file) req->arg0, req->arg1, (size_t) req->arg2, (off_t) req->arg3); break; case UV_FS_WRITE: fs__write(req, (uv_file)req->arg0, req->arg1, (size_t) req->arg2, (off_t) req->arg3); break; case UV_FS_UNLINK: fs__unlink(req, req->path); break; case UV_FS_MKDIR: fs__mkdir(req, req->path, (int)req->arg0); break; case UV_FS_RMDIR: fs__rmdir(req, req->path); break; case UV_FS_READDIR: fs__readdir(req, req->path, (int)req->arg0); break; case UV_FS_STAT: case UV_FS_LSTAT: fs__stat(req, req->path); break; case UV_FS_FSTAT: fs__fstat(req, (uv_file)req->arg0); break; case UV_FS_RENAME: fs__rename(req, req->path, (const char*)req->arg0); break; case UV_FS_FSYNC: case UV_FS_FDATASYNC: fs__fsync(req, (uv_file)req->arg0); break; case UV_FS_FTRUNCATE: fs__ftruncate(req, (uv_file)req->arg0, (off_t)req->arg1); break; case UV_FS_SENDFILE: fs__sendfile(req, (uv_file) req->arg0, (uv_file) req->arg1, (off_t) req->arg2, (size_t) req->arg3); break; case UV_FS_CHMOD: fs__chmod(req, req->path, (int)req->arg0); break; case UV_FS_FCHMOD: fs__fchmod(req, (uv_file)req->arg0, (int)req->arg1); break; case UV_FS_UTIME: fs__utime(req, req->path, req->arg4, req->arg5); break; case UV_FS_FUTIME: fs__futime(req, (uv_file)req->arg0, req->arg4, req->arg5); break; case UV_FS_LINK: fs__link(req, req->path, (const char*)req->arg0); break; case UV_FS_SYMLINK: fs__symlink(req, req->path, (const char*)req->arg0, (int)req->arg1); break; case UV_FS_READLINK: fs__readlink(req, req->path); break; case UV_FS_CHOWN: case UV_FS_FCHOWN: fs__nop(req); break; default: assert(!"bad uv_fs_type"); } POST_COMPLETION_FOR_REQ(loop, req); return 0; }