code: purgatorio

ref: 9f76a7f6819ac04552b4fb6588156f3e4089d1d7
dir: /appl/lib/memfs.b/

View raw version
# To be removed...
# functionality has been moved to appl/cmd/memfs.b
# some progs still refer to lib/memfs so it remains for the time being

implement MemFS;

include "sys.m";
	sys: Sys;
include "draw.m";
include "memfs.m";

Cmd: module {
	PATH: con "/dis/memfs.dis";
	init: fn(ctxt: ref Draw->Context, argv: list of string);
};

cmd: Cmd;

init(): string
{
	sys = load Sys Sys->PATH;
	cmd = load Cmd Cmd->PATH;
	if (cmd == nil)
		return sys->sprint("lib/memfs cannot load %s: %r\n", Cmd->PATH);
	return nil;
}

newfs(maxsz: int): ref Sys->FD
{
	p := array [2] of ref Sys->FD;
	if (sys->pipe(p) == -1)
		return nil;
	sync := chan of int;
	spawn run(p[1].fd, maxsz, sync);
	<- sync;
	return p[0];
}

run(fd: int, sz: int, sync: chan of int)
{
	sys->pctl(Sys->FORKFD, nil);
	sys->dup(fd, 0);
	sys->pctl(Sys->NEWFD, 0::1::2::nil);
	sync <-= 1;
	cmd->init(nil, Cmd->PATH :: "-s" :: "-m" :: string sz :: nil);
}