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,239 +598,305 @@ 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};
argc = 1; argv = tmp;
fn = bindings.ops_init; argc = 1;
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};
argc = 2; argv = tmp;
fn = bindings.ops_statfs; argc = 2;
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};
argc = 3; argv = tmp;
fn = bindings.ops_fgetattr; argc = 3;
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};
argc = 2; argv = tmp;
fn = bindings.ops_getattr; argc = 2;
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};
argc = 2; argv = tmp;
fn = bindings.ops_readdir; argc = 2;
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};
argc = 3; argv = tmp;
fn = bindings.ops_create; argc = 3;
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};
argc = 3; argv = tmp;
fn = bindings.ops_truncate; argc = 3;
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};
argc = 4; argv = tmp;
fn = bindings.ops_ftruncate; argc = 4;
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};
argc = 3; argv = tmp;
fn = bindings.ops_access; argc = 3;
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};
argc = 3; argv = tmp;
fn = bindings.ops_open; argc = 3;
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};
argc = 3; argv = tmp;
fn = bindings.ops_opendir; argc = 3;
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,
NanNew<Number>(bindings.length), NanNew<Number>(bindings.length),
NanNew<Number>(bindings.offset), NanNew<Number>(bindings.offset),
callback callback
}; };
argc = 6;
fn = bindings.ops_write; argv = tmp;
argc = 6;
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,
NanNew<Number>(bindings.length), NanNew<Number>(bindings.length),
NanNew<Number>(bindings.offset), NanNew<Number>(bindings.offset),
callback callback
}; };
argc = 6;
fn = bindings.ops_read; argv = tmp;
argc = 6;
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};
argc = 3; argv = tmp;
fn = bindings.ops_release; argc = 3;
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};
argc = 3; argv = tmp;
fn = bindings.ops_releasedir; argc = 3;
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};
argc = 2; argv = tmp;
fn = bindings.ops_unlink; argc = 2;
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};
argc = 3; argv = tmp;
fn = bindings.ops_rename; argc = 3;
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};
argc = 3; argv = tmp;
fn = bindings.ops_link; argc = 3;
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};
argc = 3; argv = tmp;
fn = bindings.ops_symlink; argc = 3;
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};
argc = 3; argv = tmp;
fn = bindings.ops_chmod; argc = 3;
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};
argc = 4; argv = tmp;
fn = bindings.ops_chown; argc = 4;
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};
argc = 4; argv = tmp;
fn = bindings.ops_readlink; argc = 4;
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,
NanNew<Number>(bindings.length), NanNew<Number>(bindings.length),
NanNew<Number>(bindings.offset), NanNew<Number>(bindings.offset),
NanNew<Number>(bindings.mode), NanNew<Number>(bindings.mode),
callback callback
}; };
argc = 7;
fn = bindings.ops_setxattr; argv = tmp;
argc = 7;
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,
NanNew<Number>(bindings.length), NanNew<Number>(bindings.length),
NanNew<Number>(bindings.offset), NanNew<Number>(bindings.offset),
callback callback
}; };
argc = 6;
fn = bindings.ops_getxattr; argv = tmp;
argc = 6;
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};
argc = 3; argv = tmp;
fn = bindings.ops_mkdir; argc = 3;
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};
argc = 2; argv = tmp;
fn = bindings.ops_rmdir; argc = 2;
fn = bindings.ops_rmdir;
}
break; break;
case OP_DESTROY: case OP_DESTROY: {
argv = (Local<Value>[]) {callback}; Local<Value> tmp[] = {callback};
argc = 1; argv = tmp;
fn = bindings.ops_destroy; argc = 1;
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};
argc = 2; argv = tmp;
fn = bindings.ops_utimens; argc = 2;
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};
argc = 3; argv = tmp;
fn = bindings.ops_flush; argc = 3;
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};
argc = 4; argv = tmp;
fn = bindings.ops_fsync; argc = 4;
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};
argc = 4; argv = tmp;
fn = bindings.ops_fsyncdir; argc = 4;
fn = bindings.ops_fsyncdir;
}
break; break;
} }