@k13engineering/linux-fuse 0.0.6 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/abi.d.ts +1133 -5
- package/dist/lib/abi.js +705 -535
- package/dist/lib/constants.d.ts +5 -3
- package/dist/lib/constants.js +10 -8
- package/dist/lib/convenience.js +344 -344
- package/dist/lib/dirent.js +24 -8
- package/dist/lib/filesystem.d.ts +41 -0
- package/dist/lib/filesystem.js +344 -0
- package/dist/lib/fuse-lowlevel.d.ts +3 -1
- package/dist/lib/fuse-lowlevel.js +17 -4
- package/dist/lib/index.d.ts +4 -33
- package/dist/lib/index.js +13 -284
- package/dist/lib/kernel.d.ts +9 -0
- package/dist/lib/kernel.js +21 -0
- package/dist/lib/linux-fuse.d.ts +21 -0
- package/dist/lib/linux-fuse.js +38 -0
- package/dist/lib/linux.d.ts +3 -1
- package/dist/lib/linux.js +16 -9
- package/dist/lib/message.js +6 -0
- package/dist/lib/mount.d.ts +5 -2
- package/dist/lib/mount.js +16 -4
- package/dist/lib/protocol.d.ts +6 -0
- package/dist/lib/protocol.js +861 -830
- package/dist/lib/server.js +33 -0
- package/dist/lib/syscalls.d.ts +66 -38
- package/dist/lib/syscalls.js +281 -198
- package/package.json +4 -4
package/dist/lib/server.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ENOSYS, opcode } from "./constants.js";
|
|
1
2
|
import {
|
|
2
3
|
createMessageFromKernelParser,
|
|
3
4
|
createMessageToKernelParser,
|
|
@@ -10,6 +11,10 @@ import {
|
|
|
10
11
|
*//*type TFuseResponse
|
|
11
12
|
*/} from "./protocol.js";
|
|
12
13
|
|
|
14
|
+
const knownOpcodes = new Set(Object.values(opcode).map((value) => {
|
|
15
|
+
return BigInt(value);
|
|
16
|
+
}));
|
|
17
|
+
|
|
13
18
|
/*type TRequestHandler = {
|
|
14
19
|
handleRequest: (args: { request: TFuseRequest }) => Promise<TFuseResponse | undefined>;
|
|
15
20
|
};*/
|
|
@@ -27,6 +32,26 @@ const createFuseServer = ({
|
|
|
27
32
|
const messageFromKernelParser = createMessageFromKernelParser();
|
|
28
33
|
const messageToKernelParser = createMessageToKernelParser();
|
|
29
34
|
|
|
35
|
+
const replyNotImplemented = ({ unique }/*: { unique: bigint }*/) => {
|
|
36
|
+
sendMessageToKernel({
|
|
37
|
+
rawMessageToKernel: messageToKernelParser.formatMessageToKernel({
|
|
38
|
+
parsedMessageToKernel: {
|
|
39
|
+
header: {
|
|
40
|
+
unique,
|
|
41
|
+
error: BigInt(-ENOSYS),
|
|
42
|
+
},
|
|
43
|
+
payload: new Uint8Array(0),
|
|
44
|
+
},
|
|
45
|
+
}),
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const observeResponse = ({ response }/*: { response: TFuseResponse }*/) => {
|
|
50
|
+
if (response.forOpcode === "INIT" && response.errorCode === undefined) {
|
|
51
|
+
messageFromKernelInterpreter.applyInitResult({ result: response.result });
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
30
55
|
const processRequest = ({ rawIncomingRequest }/*: { rawIncomingRequest: Uint8Array }*/) => {
|
|
31
56
|
|
|
32
57
|
const { error: parseError, parsedMessageFromKernel } = messageFromKernelParser.parseMessageFromKernel({ data: rawIncomingRequest });
|
|
@@ -34,6 +59,12 @@ const createFuseServer = ({
|
|
|
34
59
|
throw Error("not implemented yet", { cause: parseError });
|
|
35
60
|
}
|
|
36
61
|
|
|
62
|
+
if (!knownOpcodes.has(parsedMessageFromKernel.header.opcode)) {
|
|
63
|
+
// newer kernels may send opcodes this package does not know yet, ENOSYS makes them fall back
|
|
64
|
+
replyNotImplemented({ unique: parsedMessageFromKernel.header.unique });
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
37
68
|
const { error: interpretError, interpreted } = messageFromKernelInterpreter.interpretMessageFromKernel({ parsedMessageFromKernel });
|
|
38
69
|
if (interpretError !== undefined) {
|
|
39
70
|
throw Error("not implemented yet", { cause: interpretError });
|
|
@@ -42,6 +73,8 @@ const createFuseServer = ({
|
|
|
42
73
|
requestHandler.handleRequest({ request: interpreted }).then((response) => {
|
|
43
74
|
if (response !== undefined) {
|
|
44
75
|
|
|
76
|
+
observeResponse({ response });
|
|
77
|
+
|
|
45
78
|
let encoded/*: TParsedMessageToKernel*/;
|
|
46
79
|
|
|
47
80
|
try {
|
package/dist/lib/syscalls.d.ts
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import type { TKernel } from "./kernel.js";
|
|
2
|
+
type TOpenatResult = {
|
|
3
|
+
errno: number;
|
|
4
|
+
fd: undefined;
|
|
5
|
+
} | {
|
|
6
|
+
errno: undefined;
|
|
6
7
|
fd: number;
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
};
|
|
9
|
+
type TCloseResult = {
|
|
10
|
+
errno: number;
|
|
11
|
+
} | {
|
|
12
|
+
errno: undefined;
|
|
13
|
+
};
|
|
9
14
|
type TFsopenResult = {
|
|
10
15
|
errno: number;
|
|
11
16
|
fsfd: undefined;
|
|
@@ -13,22 +18,11 @@ type TFsopenResult = {
|
|
|
13
18
|
errno: undefined;
|
|
14
19
|
fsfd: number;
|
|
15
20
|
};
|
|
16
|
-
declare const fsopen: ({ fileSystemName, flags, }: {
|
|
17
|
-
fileSystemName: string;
|
|
18
|
-
flags: bigint;
|
|
19
|
-
}) => TFsopenResult;
|
|
20
21
|
type TFsConfigResult = {
|
|
21
22
|
errno: number;
|
|
22
23
|
} | {
|
|
23
24
|
errno: undefined;
|
|
24
25
|
};
|
|
25
|
-
declare const fsconfig: ({ fd, command, key, value, auxiliaryValue, }: {
|
|
26
|
-
fd: number;
|
|
27
|
-
command: bigint;
|
|
28
|
-
key: string | undefined;
|
|
29
|
-
value: string | Uint8Array | undefined;
|
|
30
|
-
auxiliaryValue: number;
|
|
31
|
-
}) => TFsConfigResult;
|
|
32
26
|
type TFsMountResult = {
|
|
33
27
|
errno: number;
|
|
34
28
|
mountFd: undefined;
|
|
@@ -36,11 +30,6 @@ type TFsMountResult = {
|
|
|
36
30
|
errno: undefined;
|
|
37
31
|
mountFd: number;
|
|
38
32
|
};
|
|
39
|
-
declare const fsmount: ({ fd, flags, mountAttributesBitmask, }: {
|
|
40
|
-
fd: number;
|
|
41
|
-
flags: bigint;
|
|
42
|
-
mountAttributesBitmask: bigint;
|
|
43
|
-
}) => TFsMountResult;
|
|
44
33
|
type TMoveMountResult = {
|
|
45
34
|
errno: number;
|
|
46
35
|
} | {
|
|
@@ -51,23 +40,62 @@ type TFchdirResult = {
|
|
|
51
40
|
} | {
|
|
52
41
|
errno: undefined;
|
|
53
42
|
};
|
|
54
|
-
declare const move_mount: ({ fromFd, fromPath, toFd, toPath, flags, }: {
|
|
55
|
-
fromFd: number;
|
|
56
|
-
fromPath?: string;
|
|
57
|
-
toFd: number;
|
|
58
|
-
toPath: string | undefined;
|
|
59
|
-
flags: bigint;
|
|
60
|
-
}) => TMoveMountResult;
|
|
61
43
|
type TUmountResult = {
|
|
62
44
|
errno: number;
|
|
63
45
|
} | {
|
|
64
46
|
errno: undefined;
|
|
65
47
|
};
|
|
66
|
-
declare const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}) =>
|
|
73
|
-
|
|
48
|
+
declare const createSyscalls: ({ kernel }: {
|
|
49
|
+
kernel: TKernel;
|
|
50
|
+
}) => {
|
|
51
|
+
read: ({ fd, buffer }: {
|
|
52
|
+
fd: number;
|
|
53
|
+
buffer: Uint8Array;
|
|
54
|
+
}) => any;
|
|
55
|
+
write: ({ fd, buffer }: {
|
|
56
|
+
fd: number;
|
|
57
|
+
buffer: Uint8Array;
|
|
58
|
+
}) => any;
|
|
59
|
+
openat: ({ dirFd, path, flags, mode, }: {
|
|
60
|
+
dirFd: number;
|
|
61
|
+
path: string;
|
|
62
|
+
flags: number;
|
|
63
|
+
mode: number;
|
|
64
|
+
}) => TOpenatResult;
|
|
65
|
+
close: ({ fd }: {
|
|
66
|
+
fd: number;
|
|
67
|
+
}) => TCloseResult;
|
|
68
|
+
fsopen: ({ fileSystemName, flags, }: {
|
|
69
|
+
fileSystemName: string;
|
|
70
|
+
flags: bigint;
|
|
71
|
+
}) => TFsopenResult;
|
|
72
|
+
fsconfig: ({ fd, command, key, value, auxiliaryValue, }: {
|
|
73
|
+
fd: number;
|
|
74
|
+
command: bigint;
|
|
75
|
+
key: string | undefined;
|
|
76
|
+
value: string | Uint8Array | undefined;
|
|
77
|
+
auxiliaryValue: number;
|
|
78
|
+
}) => TFsConfigResult;
|
|
79
|
+
fsmount: ({ fd, flags, mountAttributesBitmask, }: {
|
|
80
|
+
fd: number;
|
|
81
|
+
flags: bigint;
|
|
82
|
+
mountAttributesBitmask: bigint;
|
|
83
|
+
}) => TFsMountResult;
|
|
84
|
+
move_mount: ({ fromFd, fromPath, toFd, toPath, flags, }: {
|
|
85
|
+
fromFd: number;
|
|
86
|
+
fromPath?: string;
|
|
87
|
+
toFd: number;
|
|
88
|
+
toPath: string | undefined;
|
|
89
|
+
flags: bigint;
|
|
90
|
+
}) => TMoveMountResult;
|
|
91
|
+
umount: ({ target, flags, }: {
|
|
92
|
+
target: string;
|
|
93
|
+
flags: bigint;
|
|
94
|
+
}) => TUmountResult;
|
|
95
|
+
fchdir: ({ fd, }: {
|
|
96
|
+
fd: number;
|
|
97
|
+
}) => TFchdirResult;
|
|
98
|
+
};
|
|
99
|
+
type TSyscalls = ReturnType<typeof createSyscalls>;
|
|
100
|
+
export { createSyscalls, };
|
|
101
|
+
export type { TSyscalls, };
|