307 lines
9.7 KiB
Plaintext
307 lines
9.7 KiB
Plaintext
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.
|