#include #include #include namespace mountNode { void nodemount(const v8::FunctionCallbackInfo& args) { v8::Isolate* isolate = args.GetIsolate(); if (!args[0]->IsString()) { isolate->ThrowException(v8::Exception::TypeError( v8::String::NewFromUtf8(isolate, "First argument must be a string pointing to a device").ToLocalChecked())); return; } if (!args[1]->IsString()) { isolate->ThrowException(v8::Exception::TypeError( v8::String::NewFromUtf8(isolate, "Argument must be a string pointing to a folder").ToLocalChecked())); return; } if (!args[2]->IsString()) { isolate->ThrowException(v8::Exception::TypeError( v8::String::NewFromUtf8(isolate, "Argument must be a filesystem name").ToLocalChecked())); return; } if (!args[3]->IsNumber()) { isolate->ThrowException(v8::Exception::TypeError( v8::String::NewFromUtf8(isolate, "Argument must be a number made from the mount flags").ToLocalChecked())); return; } if (!args[4]->IsString()) { isolate->ThrowException(v8::Exception::TypeError( v8::String::NewFromUtf8(isolate, "Argument must be a string").ToLocalChecked())); return; } v8::String::Utf8Value devpathV8(isolate, args[0]); std::string devpath(*devpathV8); v8::String::Utf8Value mountPointV8(isolate, args[1]); std::string mountPoint(*mountPointV8); v8::String::Utf8Value fsTypeV8(isolate, args[2]); std::string fsType(*fsTypeV8); unsigned long rwFlags = args[3].As()->Value(); //comma separated parameters passed directly into the fs driver v8::String::Utf8Value fsFlagsV8(isolate, args[4]); std::string fsFlags(*fsFlagsV8); const int returnValue = mount(devpath.c_str(), mountPoint.c_str(), fsType.c_str(), rwFlags, fsFlags.c_str()); args.GetReturnValue().Set(returnValue); } void Initialize(v8::Local exports) { NODE_SET_METHOD(exports, "mount", nodemount); } NODE_MODULE(mount_api, Initialize) }