The POSIX subsystem is modeled closely on the OS2 subsystem - I've re-arranged and renamed the files so that it will be easier to compare functionality. There is a problem with POSIX running in a window when a process forks that is probably due to the fact that keeping track of mulitple sessions is not done properly. Look at session.c in os2 and compare that code wiht posix. The arguments to exec are not getting through properly. It would be a good idea to check build.log after a complete build for warnings. I haven't done that in a while. The posix header files are not complete. They should be fleshed out (look at the xenix headers on you mail machine) so that the NIST tests will compile and so th languages guys know where conflicts may arise when they do the merge of the posix headers and c runtimes into their main source tree. On exit, smcomplete session has been returning c0000008 for a long time and I haven't taken time to track that down. See note 6 below re Console IO. I have no test (we need a simple shell) that does stdin as yet so that is not tested. Good luck!! POSIX STATUS Nov 15, 1990 Feb 15, 1991 Total functions: 97 Done 44 60 Optional (debatable) 12 -- Unimplemented 41 25 Process Primitives fork / execl / execv / execle / execve / execlp convert file to path using PATH env variable execvp " wait / waitpid / _exit / kill / sigemptyset / NOTE 1 sigfillset / sigdelset / sigismember / sigaction / sigprocmask / sigpending sigsuspend / alarm / pause / sleep / Process Environment getpid / getppid / getuid / geteuid / getgid / getegid / setuid setgid getgroups getlogin cuserid getpgrp / setsid / setpgid / uname / time / times / getenv ctermid ttyname isatty sysconf / Files and Directories opendir / NOTE 2 re file times updating readdir / rewinddir / closedir / chdir / getcwd / open / creat / umask / link NOTE 3 mkdir / NOTE 4 mkfifo / NOTE 4 unlink NOTE 3 rmdir / rename NOTE 3 - and how does this relate to C runtime version?? stat / Always fail? - see comment fdapi.c, NT security chapter fstat / NOTES 2, 3, 4 access / Needs RtlMakePosixAcl from JimK chmod / Needs RtlIntrepretPosix and NtSetSecurityObject (JimK) chown / Some open issues - su priv, security routines work? utime / Need NT to POSIX uid/gid translations pathconf / Done for now - need NtFsControlFile for configurable fpathconf / Input and Output Primitives pipe / dup / dup2 / close / read / write / fcntl lseek / Device and Class Specific Functions cfgetispeed ( All optional ???) cfgetospeed ( tonye may be source for tty support - he's doing) cfsetispeed ( serial drivers) cfsetospeed tcgetattr tcsetattr tcsendbreak tcdrain tcflush tcflow tcgetpgrp tcsetpgrp Language-Specific Services for the C Programming Language setlocale fileno / fdopen sigsetjmp siglongjmp tzset System Databases getgrgid getgrnam getpwuid getpwnam ----------------------------- NOTE 1 Re: signals In order to make NT exception handling available to PSX processes, check for exceptions in apiloop using exception port and convert to signals. NOTE 2 Re: file times updating. Implementing this for all relevant file systems functions will need to be postponed until NTFS. GaryKi has been given a list of PSX requirements for times updating. For now POSIX uses the times from NtQueryInformationFile for all but local pipes. Local pipe times are updated in the subsystem. See filereqs.psx in POSIX directory. NOTE 3 Re: link and unlink and rename - Implementing this will need to be postponed until NTFS. The Pinball FS does not implement links right now since OS2 doesn't use them. The POSIX file system will be NTFS. GaryKi and TomM have been contacted about this requirement. Check changes to 1.003a re symbolic links. NOTE 4 Re: security When security code is complete - these functions need to check the ACL and/or UID GID SID info appropriately. See Security section of workbook - chapter 14. Mike Massa (mikemas) is working on security as he ports streams over to NT and POSIX. He was planning to write conversion functions (cracking ACLs to get POSIX rwx access) that should be used by the subsystem also. TODO 1. Details are missing in the pre-ellen functions (such as setting uid, file times etc in file functions). Go over all functions carefully to see that they are FULLY functional re: spec. 2. Operations on local pipes need to update the times in the ionode. Pipe() initializes these. Open, read and write (other??) need to update manually. 3. When security is in place re: ACLs on files - all functions manipulating and/or accessing file modes (access, open, fstat, chmod) must translate between POSIX file permissions and NT ACLs and update appropriately. 4. Many routines in fdapi have to open the file (NtOpen) to get a handle for other routines. Check NtOpens actions on the file times of the file vs what's supposed to happen to those times via the posix routine. 5. Check into all routines that say they must be fixed to work with view memory (grep for view). 6. (This may negate some comments above.) ALL I/O except OPEN, PIPES, and FILE LOCKING needs to be moved into the client and out of the server. read, write, stat, etc. NOTE: FileRead and FileWrite functions in psxfile.c use NtReadVirtualMemory and NtWriteVirtualMemory to transfer the data to be read from or written to the file between the user buffer and the server buffer. This is a STOPGAP ONLY measure required for POSIX to work now that NTWriteFile no longer accepts a parameter specifying that the write should be done to an alternate process' data. When this code is moved out into the client and done strictly in the client's space, this code is obviously unnecessary. Currently, Console IO is caught at the client level (see IS_CONSOLE_IO in dllio.c) and vectored off to the posix.exe to do the proper windows crt read and write.. This should be done as os2 does it (os2 has all io on the client side) using a vector of functions and not special-casing. (See IoVectorArray in os2\client\dllhandl.c). 7. There are lots of places in the client code where the user parameters (ptrs to) are taken at face value and not checked. These should be probed for read and write access before using. Esp uname times time wait waitpid etc in pdxproc.c). 8. The POSIX C Runtimes (crts) are incomplete and patched together and not merged into the regular source tree. Languages (jeffrob) are supposed to do this 'any time now'. Until this work is done (which includes supplying header files that do not conflict with posix header files), building apps and tests is iffy. NIST testing is virtually impossible. Currently I have a patched together studio.h in inc\posix so that printf will work. When this work is done, mainCRTstartup() may change names. It will have to be changed in rtl/startup.c to match what is in the runtime. CONTACTS: jeffrob, gregf (jeff's boss) Get LOUP to follow up. 9. MIPS builds with only one warning - due to that fact that the MIPS version of the CONTEXT_TO_PROGRAM_COUNTER macro in ntmips.h is wrong (should be cast to a PVOID). Update - I haven't built for MIPS since March 1991. TESTING issues STAT - test 'real' code when NtQuerySecurityObject is fixed. NIST tests - SteveSc has loaded them onto a system and will try to build with the posix runtimes that mukund did last summer. THis may be a frustrating experience until we have 'real'crts and headers from languages. ************************************************************************* CRT INFO - this is mail from the student who fixed up a POSIX CRT for me. This work needs to be merged into the languages CRT tree and built regularly. Here's a list of the POSIX related stuff that has to be done to assimilate the stuff back into the tree: Heap, String, Convert, Misc: The code is the same as WIN32. Stdio : Changes littered along the souce code. Could probably be put in the source tree directly. Time : An issue that will be resolved. The POSIX version is based on the C7 code, and uses floating point. Startup: Code based on WIN32 version. Only stdenvp.c and crt0msg.c has any new code. Setjmp and Lngjmp: to be done. Include files: Most of them could be put in the tree directly. There are a few POSIX specific include files (dirent.h, grp.h, pwd.h, sys\wait.h, sys\utsname.h, sys\termios.h, sys\times.h, unistd.h) that have to be added. Additional macros are defined in the POSIX version of stat.h and the POSIX version of types.h defines some additonal types. The POSIX source files can be found on \\crt1\vangogh in a directory called posix. The posix-specific include files can be found in \posix\psxinc. I had a really good time working here this summer and I want to thank all of you for making it such a good experience. Mukund The server is: \\vangogh\rdcrt1 password: QIEPCKE The tree is: \posix. -Gregf ************************************************************************* RtlUnixPathToNtPath() Consult with SteveWo to sort out what should be done here. We need to be able to designate the posix file system(s) (ntfs only due to links needing to be supported) and how to translate pathname (eg \posix) to filesystem (eg what used to be \\harddiskX\partitionY\posix) for NT. Call RtlPosixPathToNtPath in client wherever a path argument is passed in. There is currently a RtlDosPathToNtPath() function to use as a guide.