@ai-ecoverse/slicc-kernel 1.146.5 → 1.146.6

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.
@@ -7774,7 +7774,7 @@ function satisfies(version, range2) {
7774
7774
  }
7775
7775
 
7776
7776
  // src/version.ts
7777
- var KERNEL_VERSION = true ? "1.146.5" : "0.0.0-dev";
7777
+ var KERNEL_VERSION = true ? "1.146.6" : "0.0.0-dev";
7778
7778
  var OS_RELEASE = "6.0.0-slicc";
7779
7779
  function procVersion() {
7780
7780
  return `Linux version ${OS_RELEASE} (slicc-kernel ${KERNEL_VERSION}) #1 SMP PREEMPT_DYNAMIC
@@ -23877,15 +23877,7 @@ var WasmProcess = class {
23877
23877
  }
23878
23878
  });
23879
23879
  } else {
23880
- await this.unmissed(
23881
- () => this.openPath(req, marked),
23882
- async (at) => {
23883
- await this.stillOpen(at, req.handle);
23884
- return nodes.identify(at);
23885
- },
23886
- (id2, at) => this.fds.installAt(fd, this.openVfsFile({ ...open2, path: at }, id2, fs)),
23887
- { at: path, gen }
23888
- );
23880
+ await this.openExisting(req, marked, fd, open2, fs, { at: path, gen });
23889
23881
  }
23890
23882
  if (req.existing && !await present3(fs, path, true)) {
23891
23883
  throw new KernelError("ENOENT");
@@ -23945,7 +23937,22 @@ var WasmProcess = class {
23945
23937
  const inherited2 = req.orphan || req.contents !== void 0 || req.handle !== void 0;
23946
23938
  if (guard2?.links === void 0 || !noLinks || inherited2 || req.pin !== void 0)
23947
23939
  return void 0;
23948
- return (await walk(guard2.fs, this.cred, req.path, !req.exclusive, guard2.links)).path;
23940
+ const follow2 = !req.exclusive && req.nofollow !== true;
23941
+ return (await walk(guard2.fs, this.cred, req.path, follow2, guard2.links)).path;
23942
+ }
23943
+ async openExisting(req, marked, fd, open2, fs, first) {
23944
+ const nodes = this.nodes;
23945
+ const own = unfollowed(req);
23946
+ await this.unmissed(
23947
+ this.openPath.bind(this, req, marked),
23948
+ async (at) => {
23949
+ if (own) await notLink(this.options.fs, at);
23950
+ await this.stillOpen(at, req.handle);
23951
+ return nodes.identify(at);
23952
+ },
23953
+ (id2, at) => this.fds.installAt(fd, this.openVfsFile({ ...open2, path: at }, id2, fs)),
23954
+ first
23955
+ );
23949
23956
  }
23950
23957
  async openPath(req, marked) {
23951
23958
  const nodes = this.nodes;
@@ -23953,6 +23960,7 @@ var WasmProcess = class {
23953
23960
  if (req.exclusive) return nodes.entryKey(marked ?? req.path);
23954
23961
  if (marked !== void 0) return marked;
23955
23962
  if (req.create) return nodes.targetKey(req.path);
23963
+ if (unfollowed(req)) return nodes.entryKey(req.path);
23956
23964
  return this.keptOr(await nodes.targetKey(req.path), req.handle);
23957
23965
  }
23958
23966
  async mayOpen(req) {
@@ -24248,7 +24256,9 @@ var WasmProcess = class {
24248
24256
  given = void 0;
24249
24257
  await r?.settled(at);
24250
24258
  const found = await look(at);
24251
- if (!r || !r.missed(at) && !r.changedSince(at, gen)) return make(found, at);
24259
+ if (!r || !r.missed(at) && !r.changedSince(at, gen) && !r.inFlight?.(at)) {
24260
+ return make(found, at);
24261
+ }
24252
24262
  }
24253
24263
  }
24254
24264
  async stillOpen(at, handle) {
@@ -24776,6 +24786,13 @@ var WasmProcess = class {
24776
24786
  await this.options.http?.closeAll();
24777
24787
  }
24778
24788
  };
24789
+ function unfollowed(req) {
24790
+ return req.nofollow === true && req.handle === void 0;
24791
+ }
24792
+ async function notLink(fs, path) {
24793
+ const st = await fs.lstat?.(path);
24794
+ if (st?.isSymbolicLink) throw new KernelError("ELOOP");
24795
+ }
24779
24796
 
24780
24797
  // src/kernel/protocol.ts
24781
24798
  var WASM_PROCESS_INIT = "wasm-process-init";