From 65e6ba9cce7c86da2870247eab908f73b1d9ad4a Mon Sep 17 00:00:00 2001 From: Igor Zinkovsky Date: Thu, 8 Sep 2011 12:40:56 -0700 Subject: [PATCH] Enable link, symlink, and readlink on windows --- lib/fs.js | 11 +++++++---- src/node_file.cc | 21 +++++++++------------ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/lib/fs.js b/lib/fs.js index 7cad38ad1f1..a4dc875441b 100644 --- a/lib/fs.js +++ b/lib/fs.js @@ -409,12 +409,15 @@ fs.readlinkSync = function(path) { return binding.readlink(path); }; -fs.symlink = function(destination, path, callback) { - binding.symlink(destination, path, callback || noop); +fs.symlink = function(destination, path, mode_, callback) { + var mode = (typeof(mode_) == 'string' ? mode_ : null); + var callback_ = arguments[arguments.length - 1]; + var callback = (typeof(callback_) == 'function' ? callback_ : null); + binding.symlink(destination, path, mode, callback); }; -fs.symlinkSync = function(destination, path) { - return binding.symlink(destination, path); +fs.symlinkSync = function(destination, path, mode) { + return binding.symlink(destination, path, mode); }; fs.link = function(srcpath, dstpath, callback) { diff --git a/src/node_file.cc b/src/node_file.cc index e0196a4a073..4227a7a994e 100644 --- a/src/node_file.cc +++ b/src/node_file.cc @@ -453,7 +453,6 @@ static Handle FStat(const Arguments& args) { } } -#ifdef __POSIX__ static Handle Symlink(const Arguments& args) { HandleScope scope; @@ -463,20 +462,23 @@ static Handle Symlink(const Arguments& args) { String::Utf8Value dest(args[0]->ToString()); String::Utf8Value path(args[1]->ToString()); - - // Just set to zero for now. Support UV_FS_SYMLINK_DIR in the future. int flags = 0; - if (args[2]->IsFunction()) { - ASYNC_CALL(symlink, args[2], *dest, *path, flags) + if (args[2]->IsString()) { + String::Utf8Value mode(args[2]->ToString()); + if (memcmp(*mode, "dir\0", 4) == 0) { + flags |= UV_FS_SYMLINK_DIR; + } + } + + if (args[3]->IsFunction()) { + ASYNC_CALL(symlink, args[3], *dest, *path, flags) } else { SYNC_CALL(symlink, *path, *dest, *path, flags) return Undefined(); } } -#endif // __POSIX__ -#ifdef __POSIX__ static Handle Link(const Arguments& args) { HandleScope scope; @@ -494,9 +496,7 @@ static Handle Link(const Arguments& args) { return Undefined(); } } -#endif // __POSIX__ -#ifdef __POSIX__ static Handle ReadLink(const Arguments& args) { HandleScope scope; @@ -513,7 +513,6 @@ static Handle ReadLink(const Arguments& args) { return scope.Close(String::New((char*)SYNC_REQ.ptr)); } } -#endif // __POSIX__ static Handle Rename(const Arguments& args) { HandleScope scope; @@ -1027,11 +1026,9 @@ void File::Initialize(Handle target) { NODE_SET_METHOD(target, "stat", Stat); NODE_SET_METHOD(target, "lstat", LStat); NODE_SET_METHOD(target, "fstat", FStat); -#ifdef __POSIX__ NODE_SET_METHOD(target, "link", Link); NODE_SET_METHOD(target, "symlink", Symlink); NODE_SET_METHOD(target, "readlink", ReadLink); -#endif // __POSIX__ NODE_SET_METHOD(target, "unlink", Unlink); NODE_SET_METHOD(target, "write", Write);