include "sys.m"; sys:= load Sys Sys->PATH; bind: fn(name, old: string, flag: int): int; mount:fn(fd: ref FD; old: string, flag: int, aname: string): int; unmount: fn(name, old: string): int;
bind (name, old, flag)
For bind, name is the name of another (or possibly the same) existing file or directory in the current name space. After a successful bind call, the file name old is an alias for the object originally named by name; if the modification doesn't hide it, name will also still refer to its original file. The evaluation of name happens at the time of the bind, not when the binding is later used.
mount (fd, old, flag, aname)
The fd argument to mount is a file descriptor of an open pipe or network connection to a file server ready to receive Styx messages. The old file must be a directory. After a successful mount the file tree served (see below) by fd will be visible with its root directory having name old.
Replace the old file by the new one. Henceforth, an evaluation of old will be translated to the new file. If they are directories (for mount, this condition is true by definition), old becomes a "union directory" consisting of one directory (the new file).
Both the old and new files must be directories. Add the constituent files of the new directory to the union directory at old so its contents appear first in the union. After a Sys->MBEFORE bind or mount, the new directory will be searched first when evaluating file names in the union directory.
Like Sys->MBEFORE but the new directory goes at the end of the union.
unmount (name, old)
The effects of bind and mount can be undone by unmount. If name is nil, everything bound to or mounted upon old is unbound or unmounted. If name is not nil, it is evaluated as described above for bind, and the effect of binding or mounting that particular result on old is undone.
Limbo System Modules
The return value is a positive integer (a unique sequence number) for success, -1 for failure.
The mount command will not return until it has successfully attached to the file server, so the thread doing a mount cannot be the one serving.