DIRECTORY UnixSysCalls, UnixSysCallExtensions, UnixTypes ; UnixSysCallsImpl: CEDAR PROGRAM EXPORTS UnixSysCalls, UnixSysCallExtensions ~ { OPEN UnixSysCallExtensions, UnixTypes; Close: PUBLIC PROC [fd: FD] RETURNS [RES] ~ { close: PROC [fd: FD] RETURNS [RES] ~ TRUSTED MACHINE CODE { "XR_Close" }; RETURN[ close[fd] ]; }; FSync: PUBLIC PROC [fd: FD] RETURNS [RES] ~ { fsync: PROC [fd: FD] RETURNS [RES] ~ TRUSTED MACHINE CODE { "XR_FSync" }; RETURN[ fsync[fd] ]; }; GetDEnts: PUBLIC UNSAFE PROC [fd: FD, buf: CHARPtr, nBytes: INT] RETURNS [INT] ~ UNCHECKED { getdents: UNSAFE PROC [fd: FD, buf: CHARPtr, nBytes: INT] RETURNS [INT] ~ UNCHECKED MACHINE CODE { "XR_GetDEnts" }; RETURN[ getdents[fd, buf, nBytes] ]; }; GetDTableSize: PUBLIC PROC RETURNS [INT] ~ { getdtablesize: PROC RETURNS [INT] ~ TRUSTED MACHINE CODE { "XR_GetDTableSize" }; RETURN[ getdtablesize[] ]; }; GetDTableSize1: PUBLIC PROC [kind: FDKind] RETURNS [INT] ~ { GetDTableSize1Inner: PROC [kind: FDKind] RETURNS [INT] ~ TRUSTED MACHINE CODE { "XR_GetDTableSize1" }; RETURN[ GetDTableSize1Inner[kind] ]; }; GetTimeOfDay: PUBLIC UNSAFE PROC [tp: TimeValPtr, tzp: TimeZonePtr] RETURNS [RES] ~ UNCHECKED { gettimeofday: UNSAFE PROC [tp: TimeValPtr, tzp: TimeZonePtr] RETURNS [RES] ~ UNCHECKED MACHINE CODE { "XR_GetTimeOfDay" }; RETURN[ gettimeofday[tp, tzp] ]; }; LSeek: PUBLIC PROC [d: FD, offset: INT, whence: Whence] RETURNS [INT] ~ { lseek: PROC [d: FD, offset: INT, whence: Whence] RETURNS [INT] ~ TRUSTED MACHINE CODE { "XR_LSeek" }; RETURN[ lseek[d, offset, whence] ]; }; MMap: PUBLIC UNSAFE PROC [addr: RawVM, nbytes: CARD, prot: Protections, flags: MMapFlags, d: FD, offset: CARD] RETURNS [RES] ~ { mmap: PROC [addr: RawVM, nbytes: CARD, prot: Protections, flags: INT, d: FD, offset: CARD] RETURNS [RawVM] ~ TRUSTED MACHINE CODE { ".XR_MMap" -- the proc is really in , but the constants we need are in }; ConstructMMapFlags: PROC [shared, private, fixed: BOOL] RETURNS [INT] ~ TRUSTED MACHINE CODE { "+#define CONSTRUCT_MMAP_FLAGS(shared, private, fixed) ( ((word)(shared))*((word)(MAP_SHARED)) + ((word)(private))*((word)(MAP_PRIVATE)) + ((word)(fixed))*((word)(MAP_FIXED)))\n"; ".CONSTRUCT_MMAP_FLAGS"; }; RETURN[ IF mmap[addr, nbytes, prot, ConstructMMapFlags[shared: flags.shared, private: flags.private, fixed: flags.fixed], d, offset] = addr THEN success ELSE failure ]; }; MUnmap: PUBLIC UNSAFE PROC [addr: RawVM, nbytes: CARD] RETURNS [RES] ~ { munmap: PROC [addr: RawVM, nbytes: CARD] RETURNS [RES] ~ TRUSTED MACHINE CODE { "XR_MUnmap" }; RETURN[ munmap[addr, nbytes] ]; }; Open: PUBLIC PROC [path: CHARPtr, flags: FileFlags, mode: Mode] RETURNS [FD] ~ { open: PROC [path: CHARPtr, flags: FileFlags, mode: Mode] RETURNS [FD] ~ TRUSTED MACHINE CODE { "XR_Open" }; RETURN[ open[path, flags, mode] ]; }; Read: PUBLIC UNSAFE PROC [d: FD, buf: CHARPtr, nBytes: INT] RETURNS [INT] ~ UNCHECKED { read: UNSAFE PROC [d: FD, buf: CHARPtr, nBytes: INT] RETURNS [INT] ~ UNCHECKED MACHINE CODE { "XR_Read" }; RETURN[ read[d, buf, nBytes] ]; }; FStat: PUBLIC UNSAFE PROC [fd: FD, buf: StatPtr] RETURNS [RES] ~ UNCHECKED { fstat: UNSAFE PROC [fd: FD, buf: StatPtr] RETURNS [RES] ~ UNCHECKED MACHINE CODE { "XR_FStat" }; res: RES ¬ fstat[fd, buf]; RETURN[res]; }; Unlink: PUBLIC PROC [path: CHARPtr] RETURNS [RES] ~ { unlink: PROC [path: CHARPtr] RETURNS [RES] ~ TRUSTED MACHINE CODE { "XR_Unlink" }; RETURN[ unlink[path] ]; }; Write: PUBLIC PROC [d: FD, buf: CHARPtr, nBytes: INT] RETURNS [INT] ~ { write: PROC [d: FD, buf: CHARPtr, nBytes: INT] RETURNS [INT] ~ TRUSTED MACHINE CODE { "XR_Write" }; RETURN[ write[d, buf, nBytes] ]; }; SolarisMode: TYPE ~ MACHINE DEPENDENT RECORD [ pad: [0..0FFFFh] ¬ 0, fmt: Fmt ¬ LOOPHOLE[0], -- type of file suid: Flag ¬ false, -- set user id on execution sgid: Flag ¬ false, -- set group id on execution svtx: Flag ¬ false, -- save swapped text even after use owner: Permission ¬ [false, false, false], group: Permission ¬ [false, false, false], others: Permission ¬ [false, false, false] ]; SolarisStatPtr: TYPE = POINTER TO SolarisStat; SolarisStat: TYPE ~ MACHINE DEPENDENT RECORD [ dev: INT, -- device inode resides on pad1: ARRAY [0..3) OF CARD, ino: INum, -- this inode's number mode: SolarisMode, -- protection nlink: CARD, -- number of hard links to the file uid: INT, -- user ID of owner gid: INT, -- group ID of owner rdev: INT, -- the device type, for inode that is device pad2: ARRAY [0..2) OF CARD, size: INT, -- total size of file, in bytes pad3: CARD, -- reserve pad for future off_t expansion atime: TimeVal, -- file last access time mtime: TimeVal, -- file last modify time ctime: TimeVal, -- file last status change time blksize: CARD, -- optimal blocksize for file system i/o ops blocks: CARD, -- actual number of blocks allocated fstype: ARRAY [0..16) OF CHAR, pad4: ARRAY [0..8) OF CARD -- expansion area ]; TimeVal: TYPE = MACHINE DEPENDENT RECORD [ sec: CARD, -- seconds since Jan 1, 1970 msec: CARD -- plus this many microseconds ]; AssignStat: PRIVATE UNSAFE PROC [s4: StatPtr, ssp: SolarisStatPtr] ~ UNCHECKED { s4.dev ¬ ssp.dev; s4.ino ¬ ssp.ino; s4.mode.fmt ¬ ssp.mode.fmt; s4.mode.suid ¬ ssp.mode.suid; s4.mode.sgid ¬ ssp.mode.sgid; s4.mode.svtx ¬ ssp.mode.svtx; s4.mode.owner ¬ ssp.mode.owner; s4.mode.group ¬ ssp.mode.group; s4.mode.others ¬ ssp.mode.others; s4.nlink ¬ ssp.nlink; s4.uid ¬ ssp.uid; s4.gid ¬ ssp.gid; s4.rdev ¬ ssp.rdev; s4.size ¬ ssp.size; s4.atime ¬ ssp.atime.sec; s4.spare1 ¬ ssp.atime.msec; s4.mtime ¬ ssp.mtime.sec; s4.spare2 ¬ ssp.mtime.msec; s4.ctime ¬ ssp.ctime.sec; s4.spare3 ¬ ssp.ctime.msec; s4.blksize ¬ 4096; -- hack s4.blocks ¬ s4.size / s4.blksize; -- hack }; }. άUnixSysCallsImpl.mesa Copyright Σ 1988, 1989, 1991, 1993 by Xerox Corporation. All rights reserved. Christian Jacobi, January 24, 1991 5:30 pm PST CHauser, November 9, 1988 12:45:15 pm PST Demers, November 9, 1988 5:41:50 pm PST Carl Hauser, February 16, 1989 2:08:26 pm PST Unix(tm) system calls for PCedar. Commented-out names are unimplemented for good reason, and not to be used, except: "????" means we should implement some version of this eventually. Michael Plass, September 1, 1992 2:40 pm PDT Willie-s, March 16, 1994 12:09 pm PST Acct AdjTime Audit AuditOn AuditSvc Brk SBrk ChDir Chown FChown Chroot Creat Dup Dup2 ???? ExecVE Exit FLock Fork GetAUID SetAUID GetDirentries SetGroups SetHostName GetITimer SetITimer GetPriority SetPriority GetRLimit SetRLimit SetTimeOfDay There were two errors in the definition of MMap in the interface; UnixTypes.MMapFlags is wrong, and the mmap call returns the address, not a return code. We fix the first problem by translating the bits (this is really the "right way" to do this anayway, if we were not generally so lazy, since it would track changes in mman.h). The second one we'll ignore for now - clients should check res#failure instead of res=success. Mount MsgCtl MsgGet MsgOp NFSSvc AsyncDaemon Pipe PTrace QuotaCtl Reboot RecvMsg Select SemCtl SemGet SemOp SendMsg SetPGRP SetREGID SetREUID SetUserAudit SigBlock SigPause SigSetMask SigStack SigVec SocketPair ???? spcr does the stat conversion Swapon Syscall UMask UName Unmount VAdvise VFork VHangup Wait Wait3 Wait4 Stat structures is differennt for solaris 2.x (from SunOs 4.1.x). We want Cedar code to always use the same stat structure so we transform SolarisStat to Stats here. This is a kludge to fix this immdeiate problem. Structure filled in by stat/fstat. CHauser, February 16, 1989: Remove Dup, add GetSockOpt, SetSockOpt CHauser, February 22, 1989: Added Poll, GetMsg, PutMsg Plass, January 29, 1992: Added Access, FCntl, FCntl4, IOCtl4, MMap, MUnmap, MProtect, MSync Κ «•NewlineDelimiter –(cedarcode) style˜codešœ™Kšœ ΟeœC™NJ™.Kšœ&Οk™)Kšœ$ž™'Kšœ-™-K™KšœΟuœ™!KšœKΟbœC™”K™,K™%K˜—šž ˜ Kšœ ˜ K˜Kšœ ˜ K˜K˜—šΟnœžœž˜Kšžœ$˜+Kšœžœ"˜*K˜K™K™K™K™™K˜—K™K™K™™K˜—K™K™™K˜—š ‘œžœžœžœžœžœ˜-š œžœžœžœžœžœžœžœ˜;Kšœ ˜ Kšœ˜—Kšžœ˜Kšœ˜K˜—™K˜—Jšœ™K™ K™™K˜—šœ™K˜—™K˜—š ‘œžœžœžœžœžœ˜-š œžœžœžœžœžœžœžœ˜;Kšœ ˜ Kšœ˜—Kšžœ˜Kšœ˜K˜—K™K™K™š‘œžœžœžœžœžœžœžœž œ˜\š‘œžœžœžœžœžœžœž œžœžœ˜bKšœ ˜ Kšœ˜—Kšžœ˜$Kšœ˜—K˜™ K˜—š ‘ œžœžœžœžœ˜,š  œžœžœžœžœžœžœ˜:Kšœ˜Kšœ˜—Kšžœ˜Kšœ˜K˜—š ‘œžœžœžœžœ˜8K˜š‘œžœžœžœ˜6Kšœžœžœžœ˜Kšœ˜K˜—Kšžœ˜$K˜K˜—˜K˜—™ K˜—Kšœ ™ K™ ™ K˜—K™ K™ K™ K™ K˜š ‘ œžœž œ$žœžœž œ˜_š  œžœžœ$žœžœž œžœžœ˜eKšœ˜Kšœ˜—Kšžœ˜ Kšœ˜K˜—™ K˜—š‘œžœžœžœ žœžœžœ˜Iš œžœžœ žœžœžœžœžœžœ˜WKšœ ˜ Kšœ˜—Kšžœ˜#Kšœ˜K˜—š‘œžœžœžœžœ*žœ žœžœžœ˜€Kšœ+‘œϋ™ͺš œžœžœžœžœ žœžœ žœžœžœ˜ƒKšœΟcR˜iKšœ˜—š‘œžœžœžœžœžœžœžœ˜^Iascii˜³L˜K˜—Kšžœžœ‚žœ žœ ˜¨Kšœ˜K˜—š‘œžœžœžœžœžœžœ˜Hš œžœžœžœžœžœžœžœ˜OK˜ Kšœ˜—Kšžœ˜Kšœ˜K˜—™K™—K™K™™K˜—K™™ K˜—š ‘œžœžœ/žœžœ˜Pš œžœ.žœžœžœžœžœ˜^Kšœ ˜ Kšœ˜—Kšžœ˜"Kšœ˜K˜—K™K™K™K™™K˜—š‘œžœžœžœžœžœžœžœž œ˜Wš œžœžœžœžœžœžœž œžœžœ˜]Kšœ ˜ Kšœ˜—Kšžœ˜Kšœ˜K˜—™K˜—™K˜—K™K™K™™K˜—™K˜—™K˜—K™™K˜—™ K˜—K™K™K™ K™™K˜—™K˜—š‘œžœžœžœžœžœžœž œ˜Lš œžœžœžœžœžœž œžœžœ˜RKšœ ˜ Kšœ˜—Kšœžœ˜Kšžœ˜ K™Kšœ˜K˜—™K˜—™K˜—K™™K˜—š ‘œžœžœžœžœ˜5š‘œžœžœžœžœžœžœ˜CKšœ ˜ Kšœ˜—Kšžœ˜Kšœ˜K˜—™K˜—K™K™™K˜—K™K™™K˜—š‘œžœžœžœžœžœžœ˜Gš‘œžœžœžœžœžœžœžœžœ˜UKšœ ˜ Kšœ˜—Kšžœ˜ Kšœ˜K˜—K™ΧK™š œ žœžœž œžœ˜.K˜Kšœ žœ’˜'Kšœ’˜/Kšœ’˜0Kšœ’#˜7K˜*K˜*K˜*K˜K˜—Kšœžœžœžœ ˜.š œ žœžœž œžœ˜.Kšœžœ’˜%Kšœžœžœžœ˜Kšœ ’˜"Kšœ’ ˜ Kšœžœ’#˜0Kšœžœ’˜Kšœžœ’˜Kšœžœ’,˜8Kšœžœžœžœ˜Kšœžœ’˜+Kšœžœ’)˜6Kšœ’˜(Kšœ’˜(Kšœ’˜/Kšœ žœ’,˜;Kšœžœ’$˜2Kšœžœ žœžœ˜Kšœžœžœžœ’˜,Kšœ˜K™"K™—š œ žœžœž œžœ˜*Kšœžœ’˜(Kšœžœ’˜*Kšœ˜K˜—K™š ‘ œžœžœžœ&ž œ˜PK˜K˜K˜K˜K˜K˜K˜K˜K˜!K˜K˜K˜K˜K˜K˜K˜K˜K˜K˜K˜Kšœ’˜Kšœ"’˜)K˜—K˜—K˜K˜J™BJšœ6™6J™[—…—b(ι