41 lines
1.3 KiB
C++
41 lines
1.3 KiB
C++
#include <sys/ioctl.h>
|
|
#include <unistd.h>
|
|
#include <node.h>
|
|
#include <fcntl.h>
|
|
#include <string>
|
|
|
|
#define nodeparam v8::FunctionCallbackInfo<v8::Value>
|
|
|
|
namespace ioctlNode {
|
|
void nodeIoctl(const nodeparam& args) {
|
|
v8::Isolate* isolate = args.GetIsolate();
|
|
if (args.Length() < 2 || !args[0]->IsUint32() || !args[1]->IsUint32()) {
|
|
isolate->ThrowException(v8::Exception::TypeError(
|
|
v8::String::NewFromUtf8(isolate, "Argument 1& 2 must be a number").ToLocalChecked()));
|
|
return;
|
|
}
|
|
|
|
u_int32_t fd = args[0].As<v8::Number>()->Value();
|
|
unsigned long request = args[1].As<v8::Number>()->Value();
|
|
int params[args.Length() - 2];
|
|
for(int i = 1 ; i < args.Length(); i++ ) {
|
|
if (!args[i]->IsNumber()) {
|
|
isolate->ThrowException(v8::Exception::TypeError(
|
|
v8::String::NewFromUtf8(isolate, "Argument must be a number").ToLocalChecked()));
|
|
return;
|
|
}
|
|
params[i - 1] = args[i].As<v8::Number>()->Value();
|
|
}
|
|
|
|
args.GetReturnValue().Set(ioctl(fd, request, ¶ms));
|
|
close(fd);
|
|
}
|
|
|
|
|
|
void Initialize(v8::Local<v8::Object> exports) {
|
|
NODE_SET_METHOD(exports, "ioctl", nodeIoctl);
|
|
}
|
|
|
|
NODE_MODULE(ioctl_api, Initialize)
|
|
}
|