@k13engineering/linux-fuse 0.0.7 → 0.1.1

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.
@@ -1,33 +1,6 @@
1
- import { syscall, syscallNumbers } from "syscall-napi";
1
+ import { syscallNumbers } from "syscall-napi";
2
2
  import { toCString } from "./abi.js";
3
-
4
- const read = ({
5
- fd,
6
- buffer
7
- }/*: {
8
- fd: number;
9
- buffer: Uint8Array;
10
- }*/) => {
11
-
12
- return syscall({
13
- syscallNumber: syscallNumbers.read,
14
- args: [BigInt(fd), buffer, BigInt(buffer.length)]
15
- });
16
- };
17
-
18
- const write = ({
19
- fd,
20
- buffer
21
- }/*: {
22
- fd: number;
23
- buffer: Uint8Array;
24
- }*/) => {
25
-
26
- return syscall({
27
- syscallNumber: syscallNumbers.write,
28
- args: [BigInt(fd), buffer, BigInt(buffer.length)]
29
- });
30
- };
3
+ /*import type { TKernel } from "./kernel.ts";*/
31
4
 
32
5
  const toOptionalCStringArg = ({ value }/*: { value: string | undefined }*/) => {
33
6
  if (value === undefined) {
@@ -49,6 +22,20 @@ const toOptionalPointerArg = ({ value } /*: { value: string | Uint8Array | undef
49
22
  return value;
50
23
  };
51
24
 
25
+ /*type TOpenatResult = {
26
+ errno: number;
27
+ fd: undefined;
28
+ } | {
29
+ errno: undefined;
30
+ fd: number;
31
+ };*/
32
+
33
+ /*type TCloseResult = {
34
+ errno: number;
35
+ } | {
36
+ errno: undefined;
37
+ };*/
38
+
52
39
  /*type TFsopenResult = {
53
40
  errno: number;
54
41
  fsfd: undefined;
@@ -57,73 +44,12 @@ const toOptionalPointerArg = ({ value } /*: { value: string | Uint8Array | undef
57
44
  fsfd: number;
58
45
  };*/
59
46
 
60
- const fsopen = ({
61
- fileSystemName,
62
- flags,
63
- }/*: {
64
- fileSystemName: string;
65
- flags: bigint;
66
- }*/)/*: TFsopenResult*/ => {
67
- const { errno, ret } = syscall({
68
- syscallNumber: syscallNumbers.fsopen,
69
- args: [
70
- toCString(fileSystemName),
71
- flags,
72
- ],
73
- });
74
-
75
- if (errno !== undefined) {
76
- return {
77
- errno,
78
- fsfd: undefined,
79
- };
80
- }
81
-
82
- return {
83
- errno: undefined,
84
- fsfd: Number(ret),
85
- };
86
- };
87
-
88
47
  /*type TFsConfigResult = {
89
48
  errno: number;
90
49
  } | {
91
50
  errno: undefined;
92
51
  };*/
93
52
 
94
- const fsconfig = ({
95
- fd,
96
- command,
97
- key,
98
- value,
99
- auxiliaryValue,
100
- }/*: {
101
- fd: number;
102
- command: bigint;
103
- key: string | undefined;
104
- value: string | Uint8Array | undefined;
105
- auxiliaryValue: number;
106
- }*/)/*: TFsConfigResult*/ => {
107
- const { errno } = syscall({
108
- syscallNumber: syscallNumbers.fsconfig,
109
- args: [
110
- BigInt(fd),
111
- command,
112
- toOptionalCStringArg({ value: key }),
113
- toOptionalPointerArg({ value }),
114
- BigInt(auxiliaryValue),
115
- ],
116
- });
117
-
118
- if (errno !== undefined) {
119
- throw Error(`fsconfig syscall failed with errno ${errno}`);
120
- }
121
-
122
- return {
123
- errno: undefined,
124
- };
125
- };
126
-
127
53
  /*type TFsMountResult = {
128
54
  errno: number;
129
55
  mountFd: undefined;
@@ -132,37 +58,6 @@ const fsconfig = ({
132
58
  mountFd: number;
133
59
  };*/
134
60
 
135
- const fsmount = ({
136
- fd,
137
- flags,
138
- mountAttributesBitmask,
139
- }/*: {
140
- fd: number;
141
- flags: bigint;
142
- mountAttributesBitmask: bigint;
143
- }*/)/*: TFsMountResult*/ => {
144
- const { errno, ret } = syscall({
145
- syscallNumber: syscallNumbers.fsmount,
146
- args: [
147
- BigInt(fd),
148
- flags,
149
- mountAttributesBitmask,
150
- ],
151
- });
152
-
153
- if (errno !== undefined) {
154
- return {
155
- errno,
156
- mountFd: undefined,
157
- };
158
- }
159
-
160
- return {
161
- errno: undefined,
162
- mountFd: Number(ret),
163
- };
164
- };
165
-
166
61
  /*type TMoveMountResult = {
167
62
  errno: number;
168
63
  } | {
@@ -175,101 +70,289 @@ const fsmount = ({
175
70
  errno: undefined;
176
71
  };*/
177
72
 
178
- const move_mount = ({
179
- fromFd,
180
- fromPath,
181
- toFd,
182
- toPath,
183
- flags,
184
- }/*: {
185
- fromFd: number;
186
- fromPath?: string;
187
- toFd: number;
188
- toPath: string | undefined;
189
- flags: bigint;
190
- }*/)/*: TMoveMountResult*/ => {
191
- const { errno } = syscall({
192
- syscallNumber: syscallNumbers.move_mount,
193
- args: [
194
- BigInt(fromFd),
195
- toOptionalCStringArg({ value: fromPath }),
196
- BigInt(toFd),
197
- toOptionalCStringArg({ value: toPath }),
198
- flags,
199
- ],
200
- });
201
-
202
- if (errno !== undefined) {
203
- return {
204
- errno,
205
- };
206
- }
207
-
208
- return {
209
- errno: undefined,
210
- };
211
- };
212
-
213
73
  /*type TUmountResult = {
214
74
  errno: number;
215
75
  } | {
216
76
  errno: undefined;
217
77
  };*/
218
78
 
219
- const umount = ({
220
- target,
221
- flags,
222
- }/*: {
223
- target: string;
224
- flags: bigint;
225
- }*/)/*: TUmountResult*/ => {
226
- const { errno } = syscall({
227
- syscallNumber: syscallNumbers.umount2,
228
- args: [
229
- toCString(target),
230
- flags,
231
- ],
232
- });
233
-
234
- if (errno !== undefined) {
79
+ const createSyscalls = ({ kernel }/*: { kernel: TKernel }*/) => {
80
+
81
+ const read = ({
82
+ fd,
83
+ buffer
84
+ }/*: {
85
+ fd: number;
86
+ buffer: Uint8Array;
87
+ }*/) => {
88
+
89
+ return kernel.syscall({
90
+ syscallNumber: syscallNumbers.read,
91
+ args: [BigInt(fd), buffer, BigInt(buffer.length)]
92
+ });
93
+ };
94
+
95
+ const write = ({
96
+ fd,
97
+ buffer
98
+ }/*: {
99
+ fd: number;
100
+ buffer: Uint8Array;
101
+ }*/) => {
102
+
103
+ return kernel.syscall({
104
+ syscallNumber: syscallNumbers.write,
105
+ args: [BigInt(fd), buffer, BigInt(buffer.length)]
106
+ });
107
+ };
108
+
109
+ const openat = ({
110
+ dirFd,
111
+ path,
112
+ flags,
113
+ mode,
114
+ }/*: {
115
+ dirFd: number;
116
+ path: string;
117
+ flags: number;
118
+ mode: number;
119
+ }*/)/*: TOpenatResult*/ => {
120
+ const { errno, ret } = kernel.syscall({
121
+ syscallNumber: syscallNumbers.openat,
122
+ args: [
123
+ BigInt(dirFd),
124
+ toCString(path),
125
+ BigInt(flags),
126
+ BigInt(mode),
127
+ ],
128
+ });
129
+
130
+ if (errno !== undefined) {
131
+ return {
132
+ errno,
133
+ fd: undefined,
134
+ };
135
+ }
136
+
235
137
  return {
236
- errno,
138
+ errno: undefined,
139
+ fd: Number(ret),
237
140
  };
238
- }
141
+ };
239
142
 
240
- return {
241
- errno: undefined,
143
+ const close = ({ fd }/*: { fd: number }*/)/*: TCloseResult*/ => {
144
+ const { errno } = kernel.syscall({
145
+ syscallNumber: syscallNumbers.close,
146
+ args: [BigInt(fd)],
147
+ });
148
+
149
+ if (errno !== undefined) {
150
+ return {
151
+ errno,
152
+ };
153
+ }
154
+
155
+ return {
156
+ errno: undefined,
157
+ };
242
158
  };
243
- };
244
159
 
245
- const fchdir = ({
246
- fd,
247
- }/*: {
248
- fd: number;
249
- }*/)/*: TFchdirResult*/ => {
250
- const { errno } = syscall({
251
- syscallNumber: syscallNumbers.fchdir,
252
- args: [BigInt(fd)],
253
- });
160
+ const fsopen = ({
161
+ fileSystemName,
162
+ flags,
163
+ }/*: {
164
+ fileSystemName: string;
165
+ flags: bigint;
166
+ }*/)/*: TFsopenResult*/ => {
167
+ const { errno, ret } = kernel.syscall({
168
+ syscallNumber: syscallNumbers.fsopen,
169
+ args: [
170
+ toCString(fileSystemName),
171
+ flags,
172
+ ],
173
+ });
174
+
175
+ if (errno !== undefined) {
176
+ return {
177
+ errno,
178
+ fsfd: undefined,
179
+ };
180
+ }
254
181
 
255
- if (errno !== undefined) {
256
182
  return {
257
- errno,
183
+ errno: undefined,
184
+ fsfd: Number(ret),
258
185
  };
259
- }
186
+ };
187
+
188
+ const fsconfig = ({
189
+ fd,
190
+ command,
191
+ key,
192
+ value,
193
+ auxiliaryValue,
194
+ }/*: {
195
+ fd: number;
196
+ command: bigint;
197
+ key: string | undefined;
198
+ value: string | Uint8Array | undefined;
199
+ auxiliaryValue: number;
200
+ }*/)/*: TFsConfigResult*/ => {
201
+ const { errno } = kernel.syscall({
202
+ syscallNumber: syscallNumbers.fsconfig,
203
+ args: [
204
+ BigInt(fd),
205
+ command,
206
+ toOptionalCStringArg({ value: key }),
207
+ toOptionalPointerArg({ value }),
208
+ BigInt(auxiliaryValue),
209
+ ],
210
+ });
211
+
212
+ if (errno !== undefined) {
213
+ return {
214
+ errno,
215
+ };
216
+ }
217
+
218
+ return {
219
+ errno: undefined,
220
+ };
221
+ };
222
+
223
+ const fsmount = ({
224
+ fd,
225
+ flags,
226
+ mountAttributesBitmask,
227
+ }/*: {
228
+ fd: number;
229
+ flags: bigint;
230
+ mountAttributesBitmask: bigint;
231
+ }*/)/*: TFsMountResult*/ => {
232
+ const { errno, ret } = kernel.syscall({
233
+ syscallNumber: syscallNumbers.fsmount,
234
+ args: [
235
+ BigInt(fd),
236
+ flags,
237
+ mountAttributesBitmask,
238
+ ],
239
+ });
240
+
241
+ if (errno !== undefined) {
242
+ return {
243
+ errno,
244
+ mountFd: undefined,
245
+ };
246
+ }
247
+
248
+ return {
249
+ errno: undefined,
250
+ mountFd: Number(ret),
251
+ };
252
+ };
253
+
254
+ const move_mount = ({
255
+ fromFd,
256
+ fromPath,
257
+ toFd,
258
+ toPath,
259
+ flags,
260
+ }/*: {
261
+ fromFd: number;
262
+ fromPath?: string;
263
+ toFd: number;
264
+ toPath: string | undefined;
265
+ flags: bigint;
266
+ }*/)/*: TMoveMountResult*/ => {
267
+ const { errno } = kernel.syscall({
268
+ syscallNumber: syscallNumbers.move_mount,
269
+ args: [
270
+ BigInt(fromFd),
271
+ toOptionalCStringArg({ value: fromPath }),
272
+ BigInt(toFd),
273
+ toOptionalCStringArg({ value: toPath }),
274
+ flags,
275
+ ],
276
+ });
277
+
278
+ if (errno !== undefined) {
279
+ return {
280
+ errno,
281
+ };
282
+ }
283
+
284
+ return {
285
+ errno: undefined,
286
+ };
287
+ };
288
+
289
+ const umount = ({
290
+ target,
291
+ flags,
292
+ }/*: {
293
+ target: string;
294
+ flags: bigint;
295
+ }*/)/*: TUmountResult*/ => {
296
+ const { errno } = kernel.syscall({
297
+ syscallNumber: syscallNumbers.umount2,
298
+ args: [
299
+ toCString(target),
300
+ flags,
301
+ ],
302
+ });
303
+
304
+ if (errno !== undefined) {
305
+ return {
306
+ errno,
307
+ };
308
+ }
309
+
310
+ return {
311
+ errno: undefined,
312
+ };
313
+ };
314
+
315
+ const fchdir = ({
316
+ fd,
317
+ }/*: {
318
+ fd: number;
319
+ }*/)/*: TFchdirResult*/ => {
320
+ const { errno } = kernel.syscall({
321
+ syscallNumber: syscallNumbers.fchdir,
322
+ args: [BigInt(fd)],
323
+ });
324
+
325
+ if (errno !== undefined) {
326
+ return {
327
+ errno,
328
+ };
329
+ }
330
+
331
+ return {
332
+ errno: undefined,
333
+ };
334
+ };
260
335
 
261
336
  return {
262
- errno: undefined,
337
+ read,
338
+ write,
339
+ openat,
340
+ close,
341
+ fsopen,
342
+ fsconfig,
343
+ fsmount,
344
+ move_mount,
345
+ umount,
346
+ fchdir,
263
347
  };
264
348
  };
265
349
 
350
+ /*type TSyscalls = ReturnType<typeof createSyscalls>;*/
351
+
266
352
  export {
267
- read,
268
- write,
269
- fsopen,
270
- fsconfig,
271
- fsmount,
272
- move_mount,
273
- fchdir,
274
- umount
353
+ createSyscalls,
275
354
  };
355
+
356
+ /*export type {
357
+ TSyscalls,
358
+ };*/
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.0.7",
2
+ "version": "0.1.1",
3
3
  "name": "@k13engineering/linux-fuse",
4
4
  "type": "module",
5
5
  "description": "linux-fuse",
@@ -10,17 +10,17 @@
10
10
  "dependencies": {
11
11
  "@k13engineering/uv-poll": "^0.0.6",
12
12
  "syscall-napi": "^0.2.2",
13
- "ya-struct": "^0.0.10"
13
+ "ya-struct": "^0.0.17"
14
14
  },
15
15
  "devDependencies": {
16
16
  "@eslint/js": "^10.0.1",
17
- "@k13engineering/eslint-rules": "^0.0.5",
17
+ "@k13engineering/eslint-rules": "^0.0.6",
18
18
  "@k13engineering/releasetool": "^0.0.5",
19
19
  "@types/mocha": "^10.0.10",
20
20
  "@types/node": "^25.6.0",
21
21
  "c8": "^11.0.0",
22
22
  "deno-node": "^0.0.12",
23
- "mocha": "^11.7.5",
23
+ "mocha": "^12.0.2",
24
24
  "typescript": "^6.0.3"
25
25
  },
26
26
  "scripts": {},