1
0
mirror of https://github.com/fuse-friends/fuse-native synced 2024-10-27 18:34:01 +00:00

better linux support

This commit is contained in:
Mathias Buus 2015-03-12 04:13:34 +01:00
parent 070cd6ffe1
commit 0e9ab7a10a

View File

@ -275,7 +275,7 @@ static int bindings_setxattr (const char *path, const char *name, const char *va
return bindings_call(); return bindings_call();
} }
static int bindings_getxattr (const char *path, const char *name, const char *value, size_t size) { static int bindings_getxattr (const char *path, const char *name, char *value, size_t size) {
bindings.op = OP_GETXATTR; bindings.op = OP_GETXATTR;
bindings.path = (char *) path; bindings.path = (char *) path;
bindings.name = (char *) name; bindings.name = (char *) name;
@ -598,78 +598,100 @@ static void bindings_dispatch (uv_async_t* handle, int status) {
bindings.result = -1; bindings.result = -1;
switch (bindings.op) { switch (bindings.op) {
case OP_INIT: case OP_INIT: {
argv = (Local<Value>[]) {callback}; Local<Value> tmp[] = {callback};
argv = tmp;
argc = 1; argc = 1;
fn = bindings.ops_init; fn = bindings.ops_init;
}
break; break;
case OP_STATFS: case OP_STATFS: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), callback};
argv = tmp;
argc = 2; argc = 2;
fn = bindings.ops_statfs; fn = bindings.ops_statfs;
}
break; break;
case OP_FGETATTR: case OP_FGETATTR: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<Number>(bindings.info->fh), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<Number>(bindings.info->fh), callback};
argv = tmp;
argc = 3; argc = 3;
fn = bindings.ops_fgetattr; fn = bindings.ops_fgetattr;
}
break; break;
case OP_GETATTR: case OP_GETATTR: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), callback};
argv = tmp;
argc = 2; argc = 2;
fn = bindings.ops_getattr; fn = bindings.ops_getattr;
}
break; break;
case OP_READDIR: case OP_READDIR: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), callback};
argv = tmp;
argc = 2; argc = 2;
fn = bindings.ops_readdir; fn = bindings.ops_readdir;
}
break; break;
case OP_CREATE: case OP_CREATE: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<Number>(bindings.mode), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<Number>(bindings.mode), callback};
argv = tmp;
argc = 3; argc = 3;
fn = bindings.ops_create; fn = bindings.ops_create;
}
break; break;
case OP_TRUNCATE: case OP_TRUNCATE: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<Number>(bindings.offset), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<Number>(bindings.offset), callback};
argv = tmp;
argc = 3; argc = 3;
fn = bindings.ops_truncate; fn = bindings.ops_truncate;
}
break; break;
case OP_FTRUNCATE: case OP_FTRUNCATE: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<Number>(bindings.info->fh), NanNew<Number>(bindings.offset), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<Number>(bindings.info->fh), NanNew<Number>(bindings.offset), callback};
argv = tmp;
argc = 4; argc = 4;
fn = bindings.ops_ftruncate; fn = bindings.ops_ftruncate;
}
break; break;
case OP_ACCESS: case OP_ACCESS: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<Number>(bindings.mode), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<Number>(bindings.mode), callback};
argv = tmp;
argc = 3; argc = 3;
fn = bindings.ops_access; fn = bindings.ops_access;
}
break; break;
case OP_OPEN: case OP_OPEN: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<Number>(bindings.mode), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<Number>(bindings.mode), callback};
argv = tmp;
argc = 3; argc = 3;
fn = bindings.ops_open; fn = bindings.ops_open;
}
break; break;
case OP_OPENDIR: case OP_OPENDIR: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<Number>(bindings.mode), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<Number>(bindings.mode), callback};
argv = tmp;
argc = 3; argc = 3;
fn = bindings.ops_opendir; fn = bindings.ops_opendir;
}
break; break;
case OP_WRITE: case OP_WRITE: {
buf = NanNew(bindings.buffer_persistent); buf = NanNew(bindings.buffer_persistent);
buf->Set(NanNew<String>("length"), NanNew<Number>(bindings.length)); buf->Set(NanNew<String>("length"), NanNew<Number>(bindings.length));
buf->SetIndexedPropertiesToExternalArrayData((char *) bindings.data, kExternalUnsignedByteArray, bindings.length); buf->SetIndexedPropertiesToExternalArrayData((char *) bindings.data, kExternalUnsignedByteArray, bindings.length);
argv = (Local<Value>[]) { Local<Value> tmp[] = {
NanNew<String>(bindings.path), NanNew<String>(bindings.path),
NanNew<Number>(bindings.info->fh), NanNew<Number>(bindings.info->fh),
buf, buf,
@ -677,16 +699,19 @@ static void bindings_dispatch (uv_async_t* handle, int status) {
NanNew<Number>(bindings.offset), NanNew<Number>(bindings.offset),
callback callback
}; };
argv = tmp;
argc = 6; argc = 6;
fn = bindings.ops_write; fn = bindings.ops_write;
}
break; break;
case OP_READ: case OP_READ: {
buf = NanNew(bindings.buffer_persistent); buf = NanNew(bindings.buffer_persistent);
buf->Set(NanNew<String>("length"), NanNew<Number>(bindings.length)); buf->Set(NanNew<String>("length"), NanNew<Number>(bindings.length));
buf->SetIndexedPropertiesToExternalArrayData((char *) bindings.data, kExternalUnsignedByteArray, bindings.length); buf->SetIndexedPropertiesToExternalArrayData((char *) bindings.data, kExternalUnsignedByteArray, bindings.length);
argv = (Local<Value>[]) { Local<Value> tmp[] = {
NanNew<String>(bindings.path), NanNew<String>(bindings.path),
NanNew<Number>(bindings.info->fh), NanNew<Number>(bindings.info->fh),
buf, buf,
@ -694,74 +719,95 @@ static void bindings_dispatch (uv_async_t* handle, int status) {
NanNew<Number>(bindings.offset), NanNew<Number>(bindings.offset),
callback callback
}; };
argv = tmp;
argc = 6; argc = 6;
fn = bindings.ops_read; fn = bindings.ops_read;
}
break; break;
case OP_RELEASE: case OP_RELEASE: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<Number>(bindings.info->fh), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<Number>(bindings.info->fh), callback};
argv = tmp;
argc = 3; argc = 3;
fn = bindings.ops_release; fn = bindings.ops_release;
}
break; break;
case OP_RELEASEDIR: case OP_RELEASEDIR: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<Number>(bindings.info->fh), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<Number>(bindings.info->fh), callback};
argv = tmp;
argc = 3; argc = 3;
fn = bindings.ops_releasedir; fn = bindings.ops_releasedir;
}
break; break;
case OP_UNLINK: case OP_UNLINK: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), callback};
argv = tmp;
argc = 2; argc = 2;
fn = bindings.ops_unlink; fn = bindings.ops_unlink;
}
break; break;
case OP_RENAME: case OP_RENAME: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<String>((char *) bindings.data), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<String>((char *) bindings.data), callback};
argv = tmp;
argc = 3; argc = 3;
fn = bindings.ops_rename; fn = bindings.ops_rename;
}
break; break;
case OP_LINK: case OP_LINK: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<String>((char *) bindings.data), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<String>((char *) bindings.data), callback};
argv = tmp;
argc = 3; argc = 3;
fn = bindings.ops_link; fn = bindings.ops_link;
}
break; break;
case OP_SYMLINK: case OP_SYMLINK: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<String>((char *) bindings.data), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<String>((char *) bindings.data), callback};
argv = tmp;
argc = 3; argc = 3;
fn = bindings.ops_symlink; fn = bindings.ops_symlink;
}
break; break;
case OP_CHMOD: case OP_CHMOD: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<Number>(bindings.mode), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<Number>(bindings.mode), callback};
argv = tmp;
argc = 3; argc = 3;
fn = bindings.ops_chmod; fn = bindings.ops_chmod;
}
break; break;
case OP_CHOWN: case OP_CHOWN: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<Number>(bindings.uid), NanNew<Number>(bindings.gid), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<Number>(bindings.uid), NanNew<Number>(bindings.gid), callback};
argv = tmp;
argc = 4; argc = 4;
fn = bindings.ops_chown; fn = bindings.ops_chown;
}
break; break;
case OP_READLINK: case OP_READLINK: {
buf = NanNew(bindings.buffer_persistent); buf = NanNew(bindings.buffer_persistent);
buf->Set(NanNew<String>("length"), NanNew<Number>(bindings.length)); buf->Set(NanNew<String>("length"), NanNew<Number>(bindings.length));
buf->SetIndexedPropertiesToExternalArrayData((char *) bindings.data, kExternalUnsignedByteArray, bindings.length); buf->SetIndexedPropertiesToExternalArrayData((char *) bindings.data, kExternalUnsignedByteArray, bindings.length);
argv = (Local<Value>[]) {NanNew<String>(bindings.path), buf, NanNew<Number>(bindings.length), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), buf, NanNew<Number>(bindings.length), callback};
argv = tmp;
argc = 4; argc = 4;
fn = bindings.ops_readlink; fn = bindings.ops_readlink;
}
break; break;
case OP_SETXATTR: case OP_SETXATTR: {
buf = NanNew(bindings.buffer_persistent); buf = NanNew(bindings.buffer_persistent);
buf->Set(NanNew<String>("length"), NanNew<Number>(bindings.length)); buf->Set(NanNew<String>("length"), NanNew<Number>(bindings.length));
buf->SetIndexedPropertiesToExternalArrayData((char *) bindings.data, kExternalUnsignedByteArray, bindings.length); buf->SetIndexedPropertiesToExternalArrayData((char *) bindings.data, kExternalUnsignedByteArray, bindings.length);
argv = (Local<Value>[]) { Local<Value> tmp[] = {
NanNew<String>(bindings.path), NanNew<String>(bindings.path),
NanNew<String>(bindings.name), NanNew<String>(bindings.name),
buf, buf,
@ -770,16 +816,19 @@ static void bindings_dispatch (uv_async_t* handle, int status) {
NanNew<Number>(bindings.mode), NanNew<Number>(bindings.mode),
callback callback
}; };
argv = tmp;
argc = 7; argc = 7;
fn = bindings.ops_setxattr; fn = bindings.ops_setxattr;
}
break; break;
case OP_GETXATTR: case OP_GETXATTR: {
buf = NanNew(bindings.buffer_persistent); buf = NanNew(bindings.buffer_persistent);
buf->Set(NanNew<String>("length"), NanNew<Number>(bindings.length)); buf->Set(NanNew<String>("length"), NanNew<Number>(bindings.length));
buf->SetIndexedPropertiesToExternalArrayData((char *) bindings.data, kExternalUnsignedByteArray, bindings.length); buf->SetIndexedPropertiesToExternalArrayData((char *) bindings.data, kExternalUnsignedByteArray, bindings.length);
argv = (Local<Value>[]) { Local<Value> tmp[] = {
NanNew<String>(bindings.path), NanNew<String>(bindings.path),
NanNew<String>(bindings.name), NanNew<String>(bindings.name),
buf, buf,
@ -787,50 +836,67 @@ static void bindings_dispatch (uv_async_t* handle, int status) {
NanNew<Number>(bindings.offset), NanNew<Number>(bindings.offset),
callback callback
}; };
argv = tmp;
argc = 6; argc = 6;
fn = bindings.ops_getxattr; fn = bindings.ops_getxattr;
}
break; break;
case OP_MKDIR: case OP_MKDIR: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<Number>(bindings.mode), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<Number>(bindings.mode), callback};
argv = tmp;
argc = 3; argc = 3;
fn = bindings.ops_mkdir; fn = bindings.ops_mkdir;
}
break; break;
case OP_RMDIR: case OP_RMDIR: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), callback};
argv = tmp;
argc = 2; argc = 2;
fn = bindings.ops_rmdir; fn = bindings.ops_rmdir;
}
break; break;
case OP_DESTROY: case OP_DESTROY: {
argv = (Local<Value>[]) {callback}; Local<Value> tmp[] = {callback};
argv = tmp;
argc = 1; argc = 1;
fn = bindings.ops_destroy; fn = bindings.ops_destroy;
}
break; break;
case OP_UTIMENS: case OP_UTIMENS: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), callback};
argv = tmp;
argc = 2; argc = 2;
fn = bindings.ops_utimens; fn = bindings.ops_utimens;
}
break; break;
case OP_FLUSH: case OP_FLUSH: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<Number>(bindings.info->fh), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<Number>(bindings.info->fh), callback};
argv = tmp;
argc = 3; argc = 3;
fn = bindings.ops_flush; fn = bindings.ops_flush;
}
break; break;
case OP_FSYNC: case OP_FSYNC: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<Number>(bindings.info->fh), NanNew<Number>(bindings.mode), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<Number>(bindings.info->fh), NanNew<Number>(bindings.mode), callback};
argv = tmp;
argc = 4; argc = 4;
fn = bindings.ops_fsync; fn = bindings.ops_fsync;
}
break; break;
case OP_FSYNCDIR: case OP_FSYNCDIR: {
argv = (Local<Value>[]) {NanNew<String>(bindings.path), NanNew<Number>(bindings.info->fh), NanNew<Number>(bindings.mode), callback}; Local<Value> tmp[] = {NanNew<String>(bindings.path), NanNew<Number>(bindings.info->fh), NanNew<Number>(bindings.mode), callback};
argv = tmp;
argc = 4; argc = 4;
fn = bindings.ops_fsyncdir; fn = bindings.ops_fsyncdir;
}
break; break;
} }