Copyright (C) 1994, Digital Equipment Corp.
OSUtils.mod
Stolen from Postcard. Much of the implementation was taken from Ted Wobber's FileSys.m3
UNSAFE MODULEInternal subroutines; mostly intact from FileSys.m3; IMPORT Fmt, Text; IMPORT M3toC, Uerror, Unix, Ustat; FROM Ctypes IMPORT char_star, int; OSUtils
TYPE EC = CARDINAL; PROCEDUREFile system operationsErrorMessage (ec: EC): Text.T = VAR p: char_star; BEGIN IF ec <= Uerror.Max THEN p := Uerror.GetFrom_sys_errlist(ec); RETURN M3toC.StoT(p); (* assumes sys err list is static *) ELSE RETURN "Error code " & Fmt.Int(ec); END; END ErrorMessage; CONST rwMode = Ustat.S_IREAD + Ustat.S_IWRITE + Ustat.S_GREAD + Ustat.S_OREAD; rwxMode = rwMode + Ustat.S_IEXEC + Ustat.S_GEXEC + Ustat.S_OEXEC;
PROCEDUREDelete (path: TEXT) RAISES { FileError } = VAR p: char_star := M3toC.TtoS(path); status: int; BEGIN status := Unix.unlink(p); IF status = -1 THEN RAISE FileError(ErrorMessage(Uerror.errno)); END; END Delete; PROCEDUREMakeDir (path: TEXT) RAISES { FileError } = VAR status: int; p := M3toC.TtoS(path); BEGIN status := Unix.mkdir(p, rwxMode); IF status = -1 THEN RAISE FileError(ErrorMessage(Uerror.errno)); END; END MakeDir; BEGIN END OSUtils.