MCPcopy
hub / github.com/plasma-umass/browsix / DirFile

Class DirFile

src/kernel/file.ts:169–247  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

167}
168
169export class DirFile implements IFile {
170 kernel: IKernel;
171 path: string;
172 off: number;
173
174 refCount: number;
175
176 constructor(kernel: IKernel, path: string) {
177 this.kernel = kernel;
178 this.path = path;
179 this.off = 0;
180 this.refCount = 1;
181 }
182
183 read(buf: Buffer, pos: number, cb: (err: any, len?: number) => void): void {
184 setTimeout(cb, 0, 'cant read from a dir -- use readdir');
185 }
186
187 write(buf: Buffer, pos: number, cb: (err: any, len?: number) => void): void {
188 setTimeout(cb, 0, 'cant write to a dir');
189 }
190
191 stat(cb: (err: any, stats: any) => void): void {
192 this.kernel.fs.stat(this.path, cb);
193 }
194
195 readdir(cb: (err: any, files: string[]) => void): void {
196 this.kernel.fs.readdir(this.path, cb);
197 }
198
199 llseek(offhi: number, offlo: number, whence: number, cb: (err: number, off: number) => void): void {
200 console.log('TODO: dir.llseek');
201 cb(0, 0);
202 }
203
204 getdents(buf: Uint8Array, cb: (err: number) => void): void {
205 this.readdir((derr: any, files: string[]) => {
206 if (derr) {
207 console.log('readdir: ' + derr);
208 cb(-EFAULT);
209 return;
210 }
211 files = files.filter((s: string) => s !== '.deletedFiles.log');
212 files.sort();
213 files = files.slice(this.off);
214
215 let dents = files.map((n) => new fs.Dirent(-1, fs.DT.UNKNOWN, n));
216 let view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);
217 let voff = 0;
218
219 for (let i = 0; i < dents.length; i++) {
220 let dent = dents[i];
221 if (voff + dent.reclen > buf.byteLength)
222 break;
223 let [len, err] = Marshal(view, voff, dent, fs.DirentDef);
224 if (err) {
225 console.log('dirent marshal failed: ' + err);
226 cb(-EFAULT);

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected