| 85 | |
| 86 | // This generates an fs operations structure for a FileHandle |
| 87 | const FileHandleOperations = (handle) => { |
| 88 | return { |
| 89 | open: (path, flags, mode, cb) => { |
| 90 | throw new ERR_METHOD_NOT_IMPLEMENTED('open()'); |
| 91 | }, |
| 92 | close: (fd, cb) => { |
| 93 | handle[kUnref](); |
| 94 | PromisePrototypeThen(handle.close(), |
| 95 | () => cb(), cb); |
| 96 | }, |
| 97 | fsync: (fd, cb) => { |
| 98 | PromisePrototypeThen(handle.sync(), () => cb(), cb); |
| 99 | }, |
| 100 | read: (fd, buf, offset, length, pos, cb) => { |
| 101 | PromisePrototypeThen(handle.read(buf, offset, length, pos), |
| 102 | (r) => cb(null, r.bytesRead, r.buffer), |
| 103 | (err) => cb(err, 0, buf)); |
| 104 | }, |
| 105 | write: (fd, buf, offset, length, pos, cb) => { |
| 106 | PromisePrototypeThen(handle.write(buf, offset, length, pos), |
| 107 | (r) => cb(null, r.bytesWritten, r.buffer), |
| 108 | (err) => cb(err, 0, buf)); |
| 109 | }, |
| 110 | writev: (fd, buffers, pos, cb) => { |
| 111 | PromisePrototypeThen(handle.writev(buffers, pos), |
| 112 | (r) => cb(null, r.bytesWritten, r.buffers), |
| 113 | (err) => cb(err, 0, buffers)); |
| 114 | }, |
| 115 | }; |
| 116 | }; |
| 117 | |
| 118 | function close(stream, err, cb) { |
| 119 | if (!stream.fd) { |