mirror of https://github.com/macssh/macssh.git
436 lines
18 KiB
Plaintext
Executable File
436 lines
18 KiB
Plaintext
Executable File
GUSI 2 -- A multithreaded POSIX library
|
|
INTRODUCTION
|
|
|
|
GUSI is an extension and partial replacement of the standard C runtime library
|
|
supplied with your compiler. The main objective of GUSI is to faciliate the
|
|
porting of software written for UNIX systems by implementing a substantial subset
|
|
of the Single Unix Specification library routines:
|
|
|
|
- BSD style sockets.
|
|
- Pthreads.
|
|
- Many other POSIX facilities such as diropen().
|
|
|
|
REQUIREMENTS
|
|
|
|
To use GUSI, you need one of the following compilers:
|
|
|
|
- Metrowerks CodeWarrior Pro 5 or later.
|
|
- SC/SCpp 8.8.4d1c1 or later.
|
|
- MrC/MrCpp 4.1.0a6c1 or later.
|
|
|
|
GETTING STARTED
|
|
|
|
If you're new to GUSI, start by reading the manual in :doc:GUSI.pdf.
|
|
|
|
If you're using GUSI with the Metrowerks CodeWarrior IDE, also read
|
|
:doc:GUSI_CW_Guide.pdf if you haver any difficulties getting your first GUSI
|
|
project to compile/link.
|
|
|
|
If you're using GUSI in combination with the MPW shell and/or the MPW compilers,
|
|
please run GUSI_Install.MPW. For more details, please consider reading the
|
|
documentation in the doc folder.
|
|
|
|
To recompile GUSI with the MPW compilers, you need an STL library. I've found
|
|
STLport, available at http://www.stlport.org/download.shtml, to work perfectly
|
|
for my purposes. To install it, put it anywhere on your disk and run
|
|
STLport_Install.MPW. Current versions of GUSI have been compiled with STLport 3.1.2.
|
|
|
|
GUSI USER LICENSE
|
|
|
|
My primary objective in distributing GUSI is to have it used as widely as
|
|
possible, while protecting my moral rights of authorship and limiting my
|
|
exposure to liability.
|
|
|
|
Copyright (C) 1992-2001 Matthias Neeracher
|
|
|
|
Permission is granted to anyone to use this software for any purpose on any
|
|
computer system, and to redistribute it freely, subject to the following
|
|
restrictions:
|
|
|
|
- The author is not responsible for the consequences of use of this software,
|
|
no matter how awful, even if they arise from defects in it.
|
|
- The origin of this software must not be misrepresented, either by explicit
|
|
claim or by omission.
|
|
- You are allowed to distributed modified copies of the software, in source
|
|
and binary form, provided they are marked plainly as altered versions, and
|
|
are not misrepresented as being the original software.
|
|
|
|
While I am giving GUSI away for free, that does not mean that I don't like
|
|
getting appreciation for it. If you want to do something for me beyond your
|
|
obligations outlined above, you can
|
|
|
|
- Acknowledge the use of GUSI in the about box of your application and/or
|
|
your documentation.
|
|
- Send me a CD as described in
|
|
http://www.iis.ee.ethz.ch/~neeri/macintosh/donations.html
|
|
|
|
BUGS, QUESTIONS, SUGGESTIONS
|
|
|
|
Please report any problems you experience with the code or the documentation to
|
|
me. I'd also be interested in hearing about your success stories, if you have
|
|
any.
|
|
|
|
GUSI ON WWW
|
|
|
|
An online version of the GUSI manual and a GUSI FAQ are available at
|
|
http://www.iis.ee.ethz.ch/~neeri/macintosh.html
|
|
|
|
MAILING LIST
|
|
|
|
There is a mailing list for announcing new releases and discussions about
|
|
how to make GUSI change your life. To subscribe, send a mail:
|
|
|
|
----------------------------------
|
|
To: gusi-request@iis.ee.ethz.ch
|
|
Subject: (is ignored)
|
|
|
|
subscribe
|
|
----------------------------------
|
|
|
|
Mail is now processed by a daemon, so please follow the above format.
|
|
|
|
Matthias Neeracher
|
|
20875 Valley Green Dr. #50
|
|
Cupertino, CA 95014
|
|
|
|
e-Mail: <neeracher@mac.com>
|
|
Fax: +1 (408) 514-2605 ext. 0023
|
|
|
|
KNOWN BUGS
|
|
|
|
- MSG_PEEK does not yet work for for native OpenTransport sockets, only for MacTCP
|
|
sockets [John Cargill-Ek].
|
|
- hstrerror() is not yet implemented [Darrell Walisser].
|
|
|
|
RELEASE NOTES
|
|
|
|
Version 2.1.9 22Jul01
|
|
|
|
- Fixed st_blksize for files on HFS+ volumes, made st_blksize be expressed in
|
|
terms of st_blksize, not as 512 byte blocks [Marcel Riechert, Chris Nandor,
|
|
MacPerl Bug #424874].
|
|
- Errors in MPW calls would still not be propagated correctly in CW 68K code
|
|
[Chris Nandor, MacPerl Bug #436537].
|
|
- If STDOUT and STDERR were reidrected to the same file, MPW tools would not
|
|
work correctly [Chris Nandor, MacPerl Bug #436506].
|
|
|
|
Version 2.1.8 02Jul01
|
|
|
|
- truncate() was broken [Chris Nandor, MacPerl Bug #436893].
|
|
- errors of MPW calls wouldn't be propagated correctly in MWPPC code
|
|
[Chris Nandor, MacPerl Bug #436537].
|
|
- open(..., O_CREAT|O_EXCL) would fail with MPW sockets [Thomas Wegner, MacPerl Bug #425901].
|
|
- S_ISFIFO and S_ISSOCK were broken (a bug apparently inherited straight from BSD).
|
|
[Thomas Wegner, MacPerl Bug #430930].
|
|
|
|
Version 2.1.7 15Apr01
|
|
|
|
- Path resolution of absolute paths with embedded aliases was broken.
|
|
- GUSIFSpGetCatInfo returned garbage in the ioNamePtr field [Alan Fry].
|
|
|
|
Version 2.1.6 08Apr01
|
|
|
|
- Fix handling of error codes in select() [Jean-Pierre Stierlin].
|
|
- Paths starting with ::: were mishandled [Chris Nandor, MacPerl Bug #409940].
|
|
- Made minor tweaks to make GUSI work better with Natty (Don't ask yet).
|
|
- Fixed major bugs in relative path generation.
|
|
- MPW tools were unable to open files which were open as windows
|
|
[Thomas Wegner, MacPerl Bug #231006]
|
|
- Used delete where delete[] was appropriate [Wade Williams].
|
|
- Fixed handling of network configuration changes [Jean-Pierre Stierlin].
|
|
- Fixed a number of logic bugs related to select() [Michael Johnson, Wade Williams].
|
|
- Clean out fNextListener after accept() [Joe van Tunen].
|
|
- Fixed CW Project to include specific directories rather than {Compiler}.
|
|
|
|
Version 2.1.5 21Jan01
|
|
|
|
- Make literate programming tools configurable to some extent [Jack Jansen].
|
|
- Made countless tweaks to scheduling and wakeups [Andreas Grosam, Keith Stattenfield].
|
|
- Prevent inlining of overridable functions [Andreas Grosam].
|
|
- Socket options did not work properly for OT sockets created by accept [Andreas Grosam].
|
|
- pthread_cond_timedwait never returned ETIMEDOUT [Andreas Grosam].
|
|
|
|
Version 2.1.4 22Dec00
|
|
|
|
- Using a GUSIFSxxx call before any POSIX calls could cause programs to hang
|
|
because the default context was not initialized yet.
|
|
- GUSIForeignThreads was unable to open ThreadsLib [Max Horn].
|
|
- GUSI diagnostic messages were sometimes emitted at A5 unsafe times
|
|
[Jean-Pierre Stierlin].
|
|
- Added ssh entry in hard coded services table [Jean-Pierre Stierlin].
|
|
|
|
Version 2.1.3 29Oct00
|
|
|
|
- More CW 6 fixes, especially for massive problems with time related functions
|
|
[Richard Wesley].
|
|
- Nonstandard macros defined in sys/cdefs.h conflicted with CW macros [David Willis].
|
|
- PPC sockets were totally broken; they seemed to have slipped entirely through any
|
|
sort of acceptance testing [David Willis].
|
|
- Deal with CW's non-standard signature for fdopen.
|
|
- Include two new tests (GUSIThreadTest, GUSIPPCTest) in interactive test suite.
|
|
- Switched to distributing XML versions of the CW projects for space savings and
|
|
portability.
|
|
|
|
Version 2.1.2 16Oct00
|
|
|
|
- Fixes for CodeWarrior 6 [Jack Jansen, Jeff Shulman].
|
|
- SC would always use A5 relative addresses, with disastrous consequences in
|
|
completion routines [Jean-Pierre Stierlin].
|
|
- The OpenTransport code for dealing with multiple incoming connections had
|
|
severe bugs [Gordon McMillan].
|
|
- Accommodate the fact that CodeWarrior internally uses a different numbering
|
|
scheme for SIGINT [Jack Jansen].
|
|
|
|
Version 2.1.1 05Jun00
|
|
|
|
- Some functions were returning references to stack values [Alexandre Parenteau].
|
|
- Fixed a shocking amount of bugs in time(), localtime(), and gmtime()
|
|
[Jack Jansen, Alexandre Parenteau].
|
|
- Keep DCon support from crashing under Sfio.
|
|
- Introduced preliminary support for multiple descriptor tables.
|
|
|
|
Version 2.1.0 29May00
|
|
|
|
- Improved formatting of the woven documentation [Peter Teeson].
|
|
- Updated to Universal Headers 3.3.1 [Tom Bayley].
|
|
- Tuned scheduling again [Jack Jansen].
|
|
- Implemented proper linger model, closing sockets immediately (while
|
|
actually putting them into a background queue to allow pending data to
|
|
be transmitted) [Rich Cook, Oebele Dijkstra].
|
|
- MacTCP sockets would hang on close with pending data [Jack Jansen].
|
|
- Fixed bugs in lseek for read-only files [Jack Jansen].
|
|
- Failed OpenTransport DNS lookups would return garbage data instead of
|
|
error [Karl Armstrong, Mike Johnson].
|
|
- Repeatedly calling a connect on a nonblocking socket could cause an infinite
|
|
loop [Mike Johnson].
|
|
- Fixed leak in OT UDP sendto [Tom Bayley].
|
|
- (Hopefully) fixed a problem that could cause select() not to return a
|
|
ready to read status [Mike Johnson].
|
|
|
|
Version 2.0.6 14Mar00
|
|
|
|
- Fixed several race conditions causing hangs in OpenTransport code
|
|
[Alexandre Parenteau].
|
|
- Console would get initialized twice [Steven Gillispie].
|
|
- Suffix finding code was broken [Alexandre Parenteau].
|
|
- open(":x:y", O_RDWR) would create x as a file if it didn't exist [Alexandre Parenteau].
|
|
- Temporary name creation would crash horribly [Alexandre Parenteau].
|
|
- rename() was broken [Alexandre Parenteau].
|
|
- Try to enforce alignment of struct and class fields when GUSI headers are
|
|
included by clients with arbitrary default alignments [Alexandre Parenteau].
|
|
- Custom thread switchers were not getting correctly reinstalled upon destruction
|
|
of a thread [Andre Radke].
|
|
- GUSIFileSpec::Resolve needed to clear fValidInfo [Alexandre Parenteau].
|
|
- Accidentally had reversed the logic for my "fix" of the double destruction of detached
|
|
threads [Stephen Coy].
|
|
- getservbyname would crash if /etc/services did not exist
|
|
[Christopher Stern, Alexandre Parenteau].
|
|
|
|
Version 2.0.5 06Mar00
|
|
|
|
- Added a visual manual for first time CodeWarrior GUSI users [Rich Cook].
|
|
- Forgot include guard in inttypes.h
|
|
- Device families did not check that the paths passed to them were device paths
|
|
[Christopher Stern]
|
|
- Sped up thread switching by a factor of up to 1000 [Jack Jansen].
|
|
- Called InitGraf in one location without checking configuration flag
|
|
[Alexandre Parenteau].
|
|
- Used a flaky plausibility test for automatic InitGraf.
|
|
- Detached threads were deleted twice [Stephen Coy].
|
|
- Force order of static destructors by closing descriptors before deleting threads
|
|
[Christopher Stern].
|
|
- Checked for nonexistent devices in file calls [Alexandre Parenteau].
|
|
- readdir() would always return an error at the end of the directory, which is against
|
|
the specification [Alexandre Parenteau].
|
|
- sleep() from the main thread didn't [Darrell Walisser].
|
|
- Renamed CodeWarrior projects to .mcp for cross platform compilability [Chris Brown].
|
|
|
|
Version 2.0.4 16Jan00
|
|
|
|
- Updated to CodeWarrior 5.3 compilers (this shouldn't affect any existing CW 5 users
|
|
negatively, I think. If it does, please alert me.).
|
|
- Some of the macros in pthread.h had PTHREAD_ misspelled as PTHREADS_ [Mike Davis]
|
|
- GUSI's version of rename() was incorrectly mangled, so clients would link with
|
|
the standard rename() [Matthew Nolan].
|
|
- Removing an open file in the temporary items folder would fail [Jack Jansen].
|
|
|
|
Version 2.0.3 13Dec99
|
|
|
|
- Closing a OpenTransport TCP socket with data pending would hang
|
|
[Oebele Dijkstra, Darrell Walisser].
|
|
- Calling gethostbyname() before any sockets were opened would malfunction.
|
|
|
|
Version 2.0.2 12Dec99
|
|
|
|
- Attempting to set SO_LINGER would crash [Keith Rollin].
|
|
- Passing a null timezone argument to gettimeofday() would misbehave [Christopher Stern].
|
|
- GUSISetThreadSwitcher would get the wrong linkage [Bruno Litman].
|
|
- read() on OpenTransport TCP/IP sockets had wrong results on disconnected sockets
|
|
[Keith Rollin].
|
|
- select() would return a wrong result if any descriptors were ready for both reading
|
|
and writing [Keith Rollin].
|
|
- Added pause() call.
|
|
|
|
Version 2.0.1 14Nov99
|
|
|
|
- select() would sometimes unecessarily poll [David Lawrence].
|
|
- Added GUSIwithPPCSockets, GUSIwithLocalSockets, which I had forgotten
|
|
[Darrell Walisser].
|
|
- GUSI would generate SIGINT for background applications if Command-. was
|
|
pressed in the foreground application [Darrell Walisser].
|
|
- Calling signal() before any sockets were created would crash [Darrell Walisser].
|
|
- gethostname() would garble the name if running with TCP/IP off
|
|
[Christopher Stern].
|
|
- stat() would not return an error for nonexistent files [Christopher Stern].
|
|
|
|
Version 2.0 23Oct99
|
|
|
|
- Removed the advertising clause from the BSD headers, as UCB no longer
|
|
requires it. Thanks!
|
|
- Included DCon.h in the distribution so GUSI compiles even if you
|
|
don't have DCon. Thanks to Ed Wynne, Phasic Interware, Inc.,
|
|
for his permission to do so. [Steven Gillispie]
|
|
|
|
Version 2.0fc2 14Oct99
|
|
|
|
- Open Transport sockets didn't close their connections in an orderly way
|
|
[Steven Gillispie].
|
|
|
|
Version 2.0fc1 25Sep99
|
|
|
|
- The number and severity of bug reports has decreased sufficiently to
|
|
convince me to declare final candidate status on GUSI 2. Please report
|
|
all bugs immediately.
|
|
- Added sanity checks on A5 before attempting to call InitGraf [Brian Pink].
|
|
- Renamed the socket option IPPROTO_IP/IP_BROADCAST to its correct name
|
|
SOL_SOCKET/SO_BROADCAST [Chris Brown].
|
|
|
|
Version 2.0b10 08Sep99
|
|
|
|
- I found several bugs in GUSI when trying to port the Darwin Streaming Server
|
|
to MacOS.
|
|
- Attempted to deal with threads created outside GUSI (e.g. in PowerPlant)
|
|
[Eli Bishop].
|
|
- File manager sockets would misbehave when switching off read-ahead.
|
|
- Implemented the interface detection ioctl calls for OpenTransport TCP/IP.
|
|
- getsockname would not work on sockets returned fropm accept under
|
|
OpenTransport.
|
|
- recvfrom would not correctly return the sorce socket address under
|
|
OpenTransport except for a connected datagram socket [Philippe Lang].
|
|
- Nonblocking reads on OpenTransport stream sockets did in fact block.
|
|
- Nonblocking reads on OpenTransport datagram sockets leaked memory.
|
|
- Implemented inet_aton and minimal pthread_condattr and pthread_mutexattr
|
|
support.
|
|
- Fixed bugs in the documentation [Chris Brown]. Added warning about
|
|
interaction between GUSIConfig and precompiled headers [Steven Gillispie].
|
|
|
|
Version 2.0b9 02Sep99
|
|
|
|
- OpenTransport operations in threads sometimes would hang
|
|
[Brian Pink, David Catmull].
|
|
|
|
Version 2.0b8 25Aug99
|
|
|
|
- Fixed problems with nonblocking connects in MacTCP [Philippe Lang].
|
|
- Open transport sockets needed to have an explicit unbind [Steven Gillispie].
|
|
- Work on literate edition of the source code.
|
|
|
|
Version 2.0b7 04Aug99
|
|
|
|
- Adapted to CodeWarrior Pro 5.
|
|
- Updated documentation.
|
|
- Tried to clarify license and added pointer to donations page.
|
|
|
|
Version 2.0b6 01Aug99 (Happy 708th birthday, Switzerland!)
|
|
|
|
- Philippe Lang convinced me to support the SO_ERROR socket option, and while
|
|
I was at it, I supported as many socket options as I reasonably could
|
|
(mostly on Open Transport).
|
|
- Found out that the member fields of a struct timespec are named tv_xxx, not
|
|
ts_xxx, thanks to W. Richard Stevens' sample code.
|
|
- Fixed conditional macros in sys/un.h [Michel Rabozee].
|
|
- Calling MSL __close_all() turned out not to have been such a hot idea.
|
|
|
|
Version 2.0b5 19Jul99
|
|
|
|
- Rick Waits correctly pointed out that most of the new files
|
|
promised in b4 were actually missing.
|
|
- Fixed bug in MacTCP UDP code [Philippe Lang].
|
|
- Specified bool support in Example project so it would compile again [Rick Waits].
|
|
|
|
Version 2.0b4 18Jul99
|
|
|
|
- Added support for SIOW based programs.
|
|
- Added mkdir/rmdir.
|
|
- Fixed Open Transport nonblocking connects [Philippe Lang].
|
|
- Fixed long standing inability to give new files the right type and
|
|
creator [Chris Jacobson].
|
|
- Add MPW makefile and examples to :Examples [Rick Waits].
|
|
|
|
Version 2.0b3 30Jun99
|
|
|
|
- Added support for Standard C and UNIX 98 style signal handling.
|
|
- Added support for using sfio with SC and MrC.
|
|
- Improved performance of file I/O.
|
|
- Tried to improve documentation for SC and MrC [Rick Waits].
|
|
- Added GUSI_Install.MPW installation script.
|
|
- Eradicated dependences on STL from GUSI headers.
|
|
|
|
Version 2.0b2 07Jun99
|
|
|
|
- Added support for SC[pp] and MrC[pp] compilers. I compiled with SCpp 8.8.4d1c1
|
|
and MrCpp 4.1.0a5c3, and intend to maintain the code for newer, but not older
|
|
versions of these compilers. Unfortunately, Stdio does not work yet when
|
|
using GUSI with MrCpp due to shared library conflicts. I intend to support
|
|
sfio for SC and MrC in the near future, though.
|
|
- Added back STDIN_FILENO & co. Fixed various bad comments in header guards
|
|
[Chris Jacobson].
|
|
- select for OpenTransport datagram (UDP) sockets was broken [Philippe Lang].
|
|
- Allow recursive locks for mutexes.
|
|
- Added a CodeWarrior project files to simplify rebuilds.
|
|
- Some more work on PPC sockets.
|
|
|
|
Version 2.0b1 14Apr99
|
|
|
|
- Added support for broadcast and multicast options [Tom Bayley, Quinn].
|
|
- Rewrote GUSIConfig in C++.
|
|
- Brought documentation up to date.
|
|
- Event handling for AppleEvents was broken [Chris Jacobson].
|
|
- Changed auto-spin default to off, as this feature has less importance in
|
|
GUSI II and can easier be turned on with configuration files.
|
|
- Introduced GUSIContextFactory to add more flexibility to GUSIContext
|
|
creation. Made switching in and out fully virtualized.
|
|
- Massively improved and simplified the handling of race conditions
|
|
in wakeups [George Warner & Quinn]
|
|
- Added support for the DCon debugging console, and also switched to DCon
|
|
for our own debugging output.
|
|
- Added support for the PPC (Program-to-program communications) toolbox.
|
|
- Fixed several bugs in Open Transport support.
|
|
- Removed GUSIwithThreading, which is no longer necessary.
|
|
|
|
Version 2.0a4 22Nov98
|
|
|
|
- Since my Mac is getting packed up, a hasty and somewhat incomplete, but
|
|
interesting release.
|
|
- Changed configuration system to explicit configuration files created with
|
|
GUSI_Configurator. This change is not reflected in the examples yet.
|
|
- Added OpenTransport TCP/IP support (finally!)
|
|
|
|
Version 2.0a3 25Oct98
|
|
|
|
- Added MacTCP UDP support, SIOUX support, MSG_PEEK support.
|
|
- Fixed many bugs.
|
|
- Started adapting old test programs in Examples
|
|
|
|
Version 2.0a2 11Oct98
|
|
|
|
- Much more feature complete version: Added most file routines and domain name
|
|
support.
|
|
- Incorporated as much as I could of Michel Rabozee's excellent feedback.
|
|
|
|
Version 2.0a1 02Aug98
|
|
|
|
- A sneak peek to give an impression of the flavor of the new facilities
|
|
in GUSI2. This version is far from feature complete, lacking most file
|
|
routines, UDP support, support for AppleTalk, OpenTransport support,
|
|
and support of the domain name resolver. |