Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

306 lines
9.7 KiB

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.