@ai-ecoverse/slicc-kernel 1.54.1 → 1.54.2

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.
@@ -1760,7 +1760,7 @@ function readTermios(mem, ptr) {
1760
1760
  c_cc: Array.from({ length: NCCS }, (_, i) => v.getUint8(ptr + C_CC + i))
1761
1761
  };
1762
1762
  }
1763
- function sliccTty(mem, fds, kernel) {
1763
+ function sliccTty(mem, fds, kernel, interrupted = () => void 0) {
1764
1764
  const { sys } = kernel;
1765
1765
  const terminal = (fd) => {
1766
1766
  const e = fds.find(fd);
@@ -1772,13 +1772,19 @@ function sliccTty(mem, fds, kernel) {
1772
1772
  if (value2 === void 0) throw new WasiError("ENOTTY");
1773
1773
  return value2;
1774
1774
  };
1775
+ const getAttr = (fd, ptr) => {
1776
+ interrupted();
1777
+ writeTermios(mem, ptr, needs(sys.tcgets?.(terminal(fd))));
1778
+ };
1775
1779
  const setAttr = (fd, actions, ptr) => {
1780
+ interrupted();
1776
1781
  if (actions < 0 || actions > TCSAFLUSH) throw new WasiError("EINVAL");
1777
1782
  const at = terminal(fd);
1778
1783
  needs(sys.tcsets);
1779
1784
  sys.tcsets?.(at, readTermios(mem, ptr), actions === TCSAFLUSH);
1780
1785
  };
1781
1786
  const size = (fd, ptr) => {
1787
+ interrupted();
1782
1788
  const [rows, cols] = needs(sys.winsize?.(terminal(fd)));
1783
1789
  mem.bytes(ptr, 8).fill(0);
1784
1790
  const v = mem.view();
@@ -1786,7 +1792,7 @@ function sliccTty(mem, fds, kernel) {
1786
1792
  v.setUint16(ptr + 2, cols, true);
1787
1793
  };
1788
1794
  return {
1789
- tcgetattr: (fd, ptr) => void writeTermios(mem, ptr, needs(sys.tcgets?.(terminal(fd)))),
1795
+ tcgetattr: (fd, ptr) => void getAttr(fd, ptr),
1790
1796
  tcsetattr: (fd, actions, ptr) => void setAttr(fd, actions, ptr),
1791
1797
  winsize: (fd, ptr) => void size(fd, ptr)
1792
1798
  };
@@ -1935,7 +1941,7 @@ var init_wasi_host = __esm({
1935
1941
  if (umask !== DEFAULT_UMASK) this.o.fs.chmod(path, mode & ~umask);
1936
1942
  }
1937
1943
  sliccTtyImports() {
1938
- return wrap(sliccTty(this.mem, this.fds, this.o.kernel));
1944
+ return wrap(sliccTty(this.mem, this.fds, this.o.kernel, () => this.interrupted?.()));
1939
1945
  }
1940
1946
  sliccFsImports() {
1941
1947
  const { mem, fds } = this;
@@ -2156,6 +2162,7 @@ var init_wasi_host = __esm({
2156
2162
  return {
2157
2163
  path_open: (dirfd, _lookup, p, l, oflags, rights, _inheriting, fdflags, out) => {
2158
2164
  const path = at(dirfd, p, l);
2165
+ if (deviceOf(path)) this.interrupted?.();
2159
2166
  const fresh = (oflags & OFLAGS.CREAT) !== 0 && !o.fs.exists(path);
2160
2167
  mem.view().setUint32(out, fds.open(path, oflags, rights, fdflags), true);
2161
2168
  if (fresh) this.created(path, 438);
@@ -2271,7 +2278,9 @@ var init_wasi_host = __esm({
2271
2278
  }
2272
2279
  positional(fd, access) {
2273
2280
  const e = this.fds.get(fd);
2274
- if (e.type !== "kernel" || this.fds.kind(fd, e) !== "file") return this.file(fd, access);
2281
+ const kind = e.type === "kernel" ? this.fds.kind(fd, e) : e.type;
2282
+ if (kind === "device") this.interrupted?.();
2283
+ if (kind !== "file" || e.type !== "kernel") return this.file(fd, access);
2275
2284
  const kernel = this.o.kernel;
2276
2285
  return {
2277
2286
  pread: (max, at) => {
@@ -2299,6 +2308,7 @@ var init_wasi_host = __esm({
2299
2308
  }
2300
2309
  }
2301
2310
  if (e.type === "device") {
2311
+ this.interrupted?.();
2302
2312
  if (e.access === "read") throw new WasiError("EBADF");
2303
2313
  if (e.device === "full" && data.length > 0) throw new WasiError("ENOSPC");
2304
2314
  return data.length;
@@ -2311,6 +2321,7 @@ var init_wasi_host = __esm({
2311
2321
  return this.o.kernel.sys.read(fd, Math.min(max, MAX_READ), { nonblock: e.nonblock });
2312
2322
  }
2313
2323
  if (e.type === "device") {
2324
+ this.interrupted?.();
2314
2325
  if (e.access === "write") throw new WasiError("EBADF");
2315
2326
  if (e.device === "null") return new Uint8Array(0);
2316
2327
  const out = new Uint8Array(Math.min(max, 65536));
@@ -2318,15 +2329,19 @@ var init_wasi_host = __esm({
2318
2329
  }
2319
2330
  return this.file(fd, "read").read(max);
2320
2331
  }
2332
+ local(answer2) {
2333
+ this.interrupted?.();
2334
+ return answer2;
2335
+ }
2321
2336
  seek(fd, offset, whence) {
2322
2337
  const e = this.fds.get(fd);
2323
2338
  if (e.type === "kernel") {
2324
2339
  const kind = this.fds.kind(fd, e);
2325
- if (kind === "device") return 0;
2340
+ if (kind === "device") return this.local(0);
2326
2341
  if (kind !== "file") throw new WasiError("ESPIPE");
2327
2342
  return this.o.kernel.sys.seek(fd, offset, whence);
2328
2343
  }
2329
- if (e.type === "device") return 0;
2344
+ if (e.type === "device") return this.local(0);
2330
2345
  const file = this.file(fd);
2331
2346
  const base = whence === WHENCE.SET ? 0 : whence === WHENCE.CUR ? file.offset : file.size();
2332
2347
  if (whence > WHENCE.END || base + offset < 0) throw new WasiError("EINVAL");
@@ -2336,15 +2351,23 @@ var init_wasi_host = __esm({
2336
2351
  sync(fd) {
2337
2352
  const e = this.fds.get(fd);
2338
2353
  if (e.type === "file") e.file.flush();
2339
- else if (e.type === "kernel" && this.fds.kind(fd, e) === "file") this.o.kernel.sys.flush(fd);
2354
+ else if (e.type === "device") this.interrupted?.();
2355
+ else if (e.type === "kernel") {
2356
+ const kind = this.fds.kind(fd, e);
2357
+ if (kind === "file") this.o.kernel.sys.flush(fd);
2358
+ else if (kind === "device") this.interrupted?.();
2359
+ }
2340
2360
  }
2341
2361
  fdstat(fd, out) {
2342
2362
  const e = this.fds.get(fd);
2363
+ if (e.type === "device") this.interrupted?.();
2343
2364
  let filetype = FILETYPE.CHARACTER_DEVICE;
2344
2365
  let seeks = true;
2345
2366
  let flags = 0;
2346
2367
  if (e.type === "kernel") {
2347
- ({ filetype, seeks } = kernelFiletype(this.fds.kind(fd, e)));
2368
+ const kind = this.fds.kind(fd, e);
2369
+ if (kind === "device") this.interrupted?.();
2370
+ ({ filetype, seeks } = kernelFiletype(kind));
2348
2371
  if (e.nonblock) flags |= FDFLAGS.NONBLOCK;
2349
2372
  if (e.append) flags |= FDFLAGS.APPEND;
2350
2373
  } else if (e.type === "file") {
@@ -2379,7 +2402,7 @@ var init_wasi_host = __esm({
2379
2402
  if (vfs.path) return this.statOrphanable(vfs.path, vfs.size, vfs.orphan);
2380
2403
  }
2381
2404
  const filetype = kind ? kernelFiletype(kind).filetype : FILETYPE.CHARACTER_DEVICE;
2382
- return { filetype, size: 0n, ino: BigInt(fd + 1), mtimeNs: 0n };
2405
+ return this.local({ filetype, size: 0n, ino: BigInt(fd + 1), mtimeNs: 0n });
2383
2406
  }
2384
2407
  statOrphanable(path, size, orphan = false) {
2385
2408
  let s;
@@ -2396,7 +2419,12 @@ var init_wasi_host = __esm({
2396
2419
  }
2397
2420
  pathFilestat(path, lookup) {
2398
2421
  if (deviceOf(path)) {
2399
- return { filetype: FILETYPE.CHARACTER_DEVICE, size: 0n, ino: pathInode(path), mtimeNs: 0n };
2422
+ return this.local({
2423
+ filetype: FILETYPE.CHARACTER_DEVICE,
2424
+ size: 0n,
2425
+ ino: pathInode(path),
2426
+ mtimeNs: 0n
2427
+ });
2400
2428
  }
2401
2429
  this.fds.flushPath(path);
2402
2430
  const follow2 = (lookup & LOOKUP_SYMLINK_FOLLOW) !== 0;
@@ -7560,6 +7588,7 @@ var init_process_signals = __esm({
7560
7588
  }
7561
7589
  }
7562
7590
  interrupt() {
7591
+ this.report();
7563
7592
  const header = this.header;
7564
7593
  const pending = Atomics.load(header, SAB_I_SIGNALS) | Atomics.load(header, SAB_I_TIMERS) | Atomics.load(header, SAB_I_KILLED);
7565
7594
  if (pending === 0) return false;
@@ -10675,6 +10704,7 @@ var init_wasix_host = __esm({
10675
10704
  }
10676
10705
  ttyGet(ptr) {
10677
10706
  const { host, mem } = this;
10707
+ host.interrupted?.();
10678
10708
  const v = mem.view();
10679
10709
  mem.bytes(ptr, 24).fill(0);
10680
10710
  const fd = this.ttyFd();
@@ -10694,6 +10724,7 @@ var init_wasix_host = __esm({
10694
10724
  v.setUint8(ptr + 20, termios && termios.c_lflag & ICANON2 ? 1 : 0);
10695
10725
  }
10696
10726
  ttySet(ptr) {
10727
+ this.host.interrupted?.();
10697
10728
  const fd = this.ttyFd();
10698
10729
  if (fd === void 0) throw new WasiError("ENOTTY");
10699
10730
  const { sys } = this.host.o.kernel;