Implement fs.readSync for buffers
This commit is contained in:
parent
d76091d7d1
commit
3202bce288
@ -579,7 +579,7 @@ static Handle<Value> Write(const Arguments& args) {
|
|||||||
/*
|
/*
|
||||||
* Wrapper for read(2).
|
* Wrapper for read(2).
|
||||||
*
|
*
|
||||||
* fs.read(fd, buffer, offset, length, position)
|
* bytesRead = fs.read(fd, buffer, offset, length, position)
|
||||||
*
|
*
|
||||||
* 0 fd integer. file descriptor
|
* 0 fd integer. file descriptor
|
||||||
* 1 buffer instance of Buffer
|
* 1 buffer instance of Buffer
|
||||||
@ -587,9 +587,9 @@ static Handle<Value> Write(const Arguments& args) {
|
|||||||
* 3 length integer. length to read
|
* 3 length integer. length to read
|
||||||
* 4 position file position - null for current position
|
* 4 position file position - null for current position
|
||||||
*
|
*
|
||||||
* - OR -
|
* - OR -
|
||||||
*
|
*
|
||||||
* fs.read(fd, length, position, encoding)
|
* [string, bytesRead] = fs.read(fd, length, position, encoding)
|
||||||
*
|
*
|
||||||
* 0 fd integer. file descriptor
|
* 0 fd integer. file descriptor
|
||||||
* 1 length integer. length to read
|
* 1 length integer. length to read
|
||||||
@ -688,22 +688,24 @@ static Handle<Value> Read(const Arguments& args) {
|
|||||||
return Undefined();
|
return Undefined();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
// SYNC
|
||||||
|
ssize_t ret;
|
||||||
|
|
||||||
if (legacy) {
|
if (legacy) {
|
||||||
#define READ_BUF_LEN (16*1024)
|
#define READ_BUF_LEN (16*1024)
|
||||||
char buf[READ_BUF_LEN];
|
char buf2[READ_BUF_LEN];
|
||||||
ssize_t ret;
|
ret = pos < 0 ? read(fd, buf2, MIN(len, READ_BUF_LEN))
|
||||||
if (pos < 0) {
|
: pread(fd, buf2, MIN(len, READ_BUF_LEN), pos);
|
||||||
ret = read(fd, buf, MIN(len, READ_BUF_LEN));
|
|
||||||
} else {
|
|
||||||
ret = pread(fd, buf, MIN(len, READ_BUF_LEN), pos);
|
|
||||||
}
|
|
||||||
if (ret < 0) return ThrowException(ErrnoException(errno));
|
if (ret < 0) return ThrowException(ErrnoException(errno));
|
||||||
Local<Array> a = Array::New(2);
|
Local<Array> a = Array::New(2);
|
||||||
a->Set(Integer::New(0), Encode(buf, ret, encoding));
|
a->Set(Integer::New(0), Encode(buf2, ret, encoding));
|
||||||
a->Set(Integer::New(1), Integer::New(ret));
|
a->Set(Integer::New(1), Integer::New(ret));
|
||||||
return scope.Close(a);
|
return scope.Close(a);
|
||||||
} else {
|
} else {
|
||||||
assert(0 && "fs.readSync() with buffers is not support yet");
|
ret = pos < 0 ? read(fd, buf, len) : pread(fd, buf, len, pos);
|
||||||
|
if (ret < 0) return ThrowException(ErrnoException(errno));
|
||||||
|
Local<Integer> bytesRead = Integer::New(ret);
|
||||||
|
return scope.Close(bytesRead);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user