Browse Source

Enable link, symlink, and readlink on windows

Igor Zinkovsky 14 years ago
committed by Ryan Dahl
parent
commit
65e6ba9cce
  1. 11
      lib/fs.js
  2. 21
      src/node_file.cc

11
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) {

21
src/node_file.cc

@ -453,7 +453,6 @@ static Handle<Value> FStat(const Arguments& args) {
}
}
#ifdef __POSIX__
static Handle<Value> Symlink(const Arguments& args) {
HandleScope scope;
@ -463,20 +462,23 @@ static Handle<Value> 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<Value> Link(const Arguments& args) {
HandleScope scope;
@ -494,9 +496,7 @@ static Handle<Value> Link(const Arguments& args) {
return Undefined();
}
}
#endif // __POSIX__
#ifdef __POSIX__
static Handle<Value> ReadLink(const Arguments& args) {
HandleScope scope;
@ -513,7 +513,6 @@ static Handle<Value> ReadLink(const Arguments& args) {
return scope.Close(String::New((char*)SYNC_REQ.ptr));
}
}
#endif // __POSIX__
static Handle<Value> Rename(const Arguments& args) {
HandleScope scope;
@ -1027,11 +1026,9 @@ void File::Initialize(Handle<Object> 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);

Loading…
Cancel
Save