Skip to content

Commit 1d7f690

Browse files
vouillonhhugo
authored andcommitted
JS runtime: move seekable check into MlNodeFd
1 parent aab5e93 commit 1d7f690

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

runtime/js/fs_node.js

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -161,10 +161,6 @@ MlNodeDevice.prototype.open = function (name, f, perms, raise_unix) {
161161
}
162162
try {
163163
var fd = this.fs.openSync(this.nm(name), res, perms);
164-
var isCharacterDevice = this.fs
165-
.lstatSync(this.nm(name))
166-
.isCharacterDevice();
167-
f.isCharacterDevice = isCharacterDevice;
168164
return new MlNodeFd(fd, f);
169165
} catch (err) {
170166
caml_raise_nodejs_error(err, raise_unix);
@@ -333,7 +329,10 @@ function MlNodeFd(fd, flags) {
333329
this.fs = require("node:fs");
334330
this.fd = fd;
335331
this.flags = flags;
336-
this.offset = this.flags.append ? this.length() : 0;
332+
var stats = this.fs.fstatSync(fd);
333+
flags.noSeek =
334+
stats.isCharacterDevice() || stats.isFIFO() || stats.isSocket();
335+
this.offset = this.flags.append ? stats.size : 0;
337336
this.seeked = false;
338337
}
339338
MlNodeFd.prototype = new MlFile();
@@ -356,7 +355,7 @@ MlNodeFd.prototype.length = function () {
356355
};
357356
MlNodeFd.prototype.write = function (buf, buf_offset, len, raise_unix) {
358357
try {
359-
if (this.flags.isCharacterDevice || !this.seeked)
358+
if (this.flags.noSeek || !this.seeked)
360359
var written = this.fs.writeSync(this.fd, buf, buf_offset, len);
361360
else
362361
var written = this.fs.writeSync(
@@ -374,7 +373,7 @@ MlNodeFd.prototype.write = function (buf, buf_offset, len, raise_unix) {
374373
};
375374
MlNodeFd.prototype.read = function (a, buf_offset, len, raise_unix) {
376375
try {
377-
if (this.flags.isCharacterDevice || !this.seeked)
376+
if (this.flags.noSeek || !this.seeked)
378377
var read = this.fs.readSync(this.fd, a, buf_offset, len);
379378
else var read = this.fs.readSync(this.fd, a, buf_offset, len, this.offset);
380379
this.offset += read;
@@ -384,7 +383,7 @@ MlNodeFd.prototype.read = function (a, buf_offset, len, raise_unix) {
384383
}
385384
};
386385
MlNodeFd.prototype.seek = function (offset, whence, raise_unix) {
387-
if (this.flags.isCharacterDevice)
386+
if (this.flags.noSeek)
388387
caml_raise_system_error(raise_unix, "ESPIPE", "lseek", "illegal seek");
389388
switch (whence) {
390389
case 0:

0 commit comments

Comments
 (0)