1
GUSI 2 -- A multithreaded POSIX library
4
GUSI is an extension and partial replacement of the standard C runtime library
5
supplied with your compiler. The main objective of GUSI is to faciliate the
6
porting of software written for UNIX systems by implementing a substantial subset
7
of the Single Unix Specification library routines:
11
- Many other POSIX facilities such as diropen().
15
To use GUSI with Metrowerks CodeWarrior, you need one of the following compilers:
17
- Metrowerks CodeWarrior Pro 5 or later.
18
- SC/SCpp 8.8.4d1c1 or later.
19
- MrC/MrCpp 4.1.0a6c1 or later.
23
If you're new to GUSI, start by reading the manual in :doc:GUSI.pdf.
25
If you're using GUSI with the Metrowerks CodeWarrior IDE, also read
26
:doc:GUSI_CW_Guide.pdf if you haver any difficulties getting your first GUSI
27
project to compile/link.
29
If you're using GUSI in combination with the MPW shell and/or the MPW compilers,
30
please run GUSI_Install.MPW. For more details, please consider reading the
31
documentation in the doc folder.
33
To recompile GUSI with the MPW compilers, you need an STL library. I've found
34
STLport, available at http://www.stlport.org/download.shtml, to work perfectly
35
for my purposes. To install it, put it anywhere on your disk and run
40
My primary objective in distributing GUSI is to have it used as widely as
41
possible, while protecting my moral rights of authorship and limiting my
42
exposure to liability.
44
Copyright (C) 1992-2000 Matthias Neeracher
46
Permission is granted to anyone to use this software for any purpose on any
47
computer system, and to redistribute it freely, subject to the following
50
- The author is not responsible for the consequences of use of this software,
51
no matter how awful, even if they arise from defects in it.
52
- The origin of this software must not be misrepresented, either by explicit
54
- You are allowed to distributed modified copies of the software, in source
55
and binary form, provided they are marked plainly as altered versions, and
56
are not misrepresented as being the original software.
58
While I am giving GUSI away for free, that does not mean that I don't like
59
getting appreciation for it. If you want to do something for me beyond your
60
obligations outlined above, you can
62
- Acknowledge the use of GUSI in the about box of your application and/or
64
- Send me a CD as described in
65
http://www.iis.ee.ethz.ch/~neeri/macintosh/donations.html
67
BUGS, QUESTIONS, SUGGESTIONS
69
Please report any problems you experience with the code or the documentation to
70
me. I'd also be interested in hearing about your success stories, if you have
75
An online version of the GUSI manual and a GUSI FAQ are available at
76
http://www.iis.ee.ethz.ch/~neeri/macintosh.html
80
There is a mailing list for announcing new releases and discussions about
81
how to make GUSI change your life. To subscribe, send a mail:
83
----------------------------------
84
To: gusi-request@iis.ee.ethz.ch
88
----------------------------------
90
Mail is now processed by a daemon, so please follow the above format.
92
Matthias Neeracher <neeri@iis.ee.ethz.ch>
93
20875 Valley Green Dr. #50
96
e-Mail: <neeracher@mac.com>
97
Fax: +1 (408) 514-2605 ext. 0023
101
- MSG_PEEK does not yet work for for native OpenTransport sockets, only for MacTCP
102
sockets [John Cargill-Ek].
103
- hstrerror() is not yet implemented [Darrell Walisser].
107
Version 2.1.5 21Jan01
109
- Make literate programming tools configurable to some extent [Jack Jansen].
110
- Made countless tweaks to scheduling and wakeups [Andreas Grosam, Keith Stattenfield].
111
- Prevent inlining of overridable functions [Andreas Grosam].
112
- Socket options did not work properly for OT sockets created by accept [Andreas Grosam].
113
- pthread_cond_timedwait never returned ETIMEDOUT [Andreas Grosam].
115
Version 2.1.4 22Dec00
117
- Using a GUSIFSxxx call before any POSIX calls could cause programs to hang
118
because the default context was not initialized yet.
119
- GUSIForeignThreads was unable to open ThreadsLib [Max Horn].
120
- GUSI diagnostic messages were sometimes emitted at A5 unsafe times
121
[Jean-Pierre Stierlin].
122
- Added ssh entry in hard coded services table [Jean-Pierre Stierlin].
124
Version 2.1.3 29Oct00
126
- More CW 6 fixes, especially for massive problems with time related functions
128
- Nonstandard macros defined in sys/cdefs.h conflicted with CW macros [David Willis].
129
- PPC sockets were totally broken; they seemed to have slipped entirely through any
130
sort of acceptance testing [David Willis].
131
- Deal with CW's non-standard signature for fdopen.
132
- Include two new tests (GUSIThreadTest, GUSIPPCTest) in interactive test suite.
133
- Switched to distributing XML versions of the CW projects for space savings and
136
Version 2.1.2 16Oct00
138
- Fixes for CodeWarrior 6 [Jack Jansen, Jeff Shulman].
139
- SC would always use A5 relative addresses, with disastrous consequences in
140
completion routines [Jean-Pierre Stierlin].
141
- The OpenTransport code for dealing with multiple incoming connections had
142
severe bugs [Gordon McMillan].
143
- Accommodate the fact that CodeWarrior internally uses a different numbering
144
scheme for SIGINT [Jack Jansen].
146
Version 2.1.1 05Jun00
148
- Some functions were returning references to stack values [Alexandre Parenteau].
149
- Fixed a shocking amount of bugs in time(), localtime(), and gmtime()
150
[Jack Jansen, Alexandre Parenteau].
151
- Keep DCon support from crashing under Sfio.
152
- Introduced preliminary support for multiple descriptor tables.
154
Version 2.1.0 29May00
156
- Improved formatting of the woven documentation [Peter Teeson].
157
- Updated to Universal Headers 3.3.1 [Tom Bayley].
158
- Tuned scheduling again [Jack Jansen].
159
- Implemented proper linger model, closing sockets immediately (while
160
actually putting them into a background queue to allow pending data to
161
be transmitted) [Rich Cook, Oebele Dijkstra].
162
- MacTCP sockets would hang on close with pending data [Jack Jansen].
163
- Fixed bugs in lseek for read-only files [Jack Jansen].
164
- Failed OpenTransport DNS lookups would return garbage data instead of
165
error [Karl Armstrong, Mike Johnson].
166
- Repeatedly calling a connect on a nonblocking socket could cause an infinite
168
- Fixed leak in OT UDP sendto [Tom Bayley].
169
- (Hopefully) fixed a problem that could cause select() not to return a
170
ready to read status [Mike Johnson].
172
Version 2.0.6 14Mar00
174
- Fixed several race conditions causing hangs in OpenTransport code
175
[Alexandre Parenteau].
176
- Console would get initialized twice [Steven Gillispie].
177
- Suffix finding code was broken [Alexandre Parenteau].
178
- open(":x:y", O_RDWR) would create x as a file if it didn't exist [Alexandre Parenteau].
179
- Temporary name creation would crash horribly [Alexandre Parenteau].
180
- rename() was broken [Alexandre Parenteau].
181
- Try to enforce alignment of struct and class fields when GUSI headers are
182
included by clients with arbitrary default alignments [Alexandre Parenteau].
183
- Custom thread switchers were not getting correctly reinstalled upon destruction
184
of a thread [Andre Radke].
185
- GUSIFileSpec::Resolve needed to clear fValidInfo [Alexandre Parenteau].
186
- Accidentally had reversed the logic for my "fix" of the double destruction of detached
187
threads [Stephen Coy].
188
- getservbyname would crash if /etc/services did not exist
189
[Christopher Stern, Alexandre Parenteau].
191
Version 2.0.5 06Mar00
193
- Added a visual manual for first time CodeWarrior GUSI users [Rich Cook].
194
- Forgot include guard in inttypes.h
195
- Device families did not check that the paths passed to them were device paths
197
- Sped up thread switching by a factor of up to 1000 [Jack Jansen].
198
- Called InitGraf in one location without checking configuration flag
199
[Alexandre Parenteau].
200
- Used a flaky plausibility test for automatic InitGraf.
201
- Detached threads were deleted twice [Stephen Coy].
202
- Force order of static destructors by closing descriptors before deleting threads
204
- Checked for nonexistent devices in file calls [Alexandre Parenteau].
205
- readdir() would always return an error at the end of the directory, which is against
206
the specification [Alexandre Parenteau].
207
- sleep() from the main thread didn't [Darrell Walisser].
208
- Renamed CodeWarrior projects to .mcp for cross platform compilability [Chris Brown].
210
Version 2.0.4 16Jan00
212
- Updated to CodeWarrior 5.3 compilers (this shouldn't affect any existing CW 5 users
213
negatively, I think. If it does, please alert me.).
214
- Some of the macros in pthread.h had PTHREAD_ misspelled as PTHREADS_ [Mike Davis]
215
- GUSI's version of rename() was incorrectly mangled, so clients would link with
216
the standard rename() [Matthew Nolan].
217
- Removing an open file in the temporary items folder would fail [Jack Jansen].
219
Version 2.0.3 13Dec99
221
- Closing a OpenTransport TCP socket with data pending would hang
222
[Oebele Dijkstra, Darrell Walisser].
223
- Calling gethostbyname() before any sockets were opened would malfunction.
225
Version 2.0.2 12Dec99
227
- Attempting to set SO_LINGER would crash [Keith Rollin].
228
- Passing a null timezone argument to gettimeofday() would misbehave [Christopher Stern].
229
- GUSISetThreadSwitcher would get the wrong linkage [Bruno Litman].
230
- read() on OpenTransport TCP/IP sockets had wrong results on disconnected sockets
232
- select() would return a wrong result if any descriptors were ready for both reading
233
and writing [Keith Rollin].
234
- Added pause() call.
236
Version 2.0.1 14Nov99
238
- select() would sometimes unecessarily poll [David Lawrence].
239
- Added GUSIwithPPCSockets, GUSIwithLocalSockets, which I had forgotten
241
- GUSI would generate SIGINT for background applications if Command-. was
242
pressed in the foreground application [Darrell Walisser].
243
- Calling signal() before any sockets were created would crash [Darrell Walisser].
244
- gethostname() would garble the name if running with TCP/IP off
246
- stat() would not return an error for nonexistent files [Christopher Stern].
250
- Removed the advertising clause from the BSD headers, as UCB no longer
252
- Included DCon.h in the distribution so GUSI compiles even if you
253
don't have DCon. Thanks to Ed Wynne, Phasic Interware, Inc.,
254
for his permission to do so. [Steven Gillispie]
256
Version 2.0fc2 14Oct99
258
- Open Transport sockets didn't close their connections in an orderly way
261
Version 2.0fc1 25Sep99
263
- The number and severity of bug reports has decreased sufficiently to
264
convince me to declare final candidate status on GUSI 2. Please report
265
all bugs immediately.
266
- Added sanity checks on A5 before attempting to call InitGraf [Brian Pink].
267
- Renamed the socket option IPPROTO_IP/IP_BROADCAST to its correct name
268
SOL_SOCKET/SO_BROADCAST [Chris Brown].
270
Version 2.0b10 08Sep99
272
- I found several bugs in GUSI when trying to port the Darwin Streaming Server
274
- Attempted to deal with threads created outside GUSI (e.g. in PowerPlant)
276
- File manager sockets would misbehave when switching off read-ahead.
277
- Implemented the interface detection ioctl calls for OpenTransport TCP/IP.
278
- getsockname would not work on sockets returned fropm accept under
280
- recvfrom would not correctly return the source socket address under
281
OpenTransport except for a connected datagram socket [Philippe Lang].
282
- Nonblocking reads on OpenTransport stream sockets did in fact block.
283
- Nonblocking reads on OpenTransport datagram sockets leaked memory.
284
- Implemented inet_aton and minimal pthread_condattr and pthread_mutexattr
286
- Fixed bugs in the documentation [Chris Brown]. Added warning about
287
interaction between GUSIConfig and precompiled headers [Steven Gillispie].
289
Version 2.0b9 02Sep99
291
- OpenTransport operations in threads sometimes would hang
292
[Brian Pink, David Catmull].
294
Version 2.0b8 25Aug99
296
- Fixed problems with nonblocking connects in MacTCP [Philippe Lang].
297
- Open transport sockets needed to have an explicit unbind [Steven Gillispie].
298
- Work on literate edition of the source code.
300
Version 2.0b7 04Aug99
302
- Adapted to CodeWarrior Pro 5.
303
- Updated documentation.
304
- Tried to clarify license and added pointer to donations page.
306
Version 2.0b6 01Aug99 (Happy 708th birthday, Switzerland!)
308
- Philippe Lang convinced me to support the SO_ERROR socket option, and while
309
I was at it, I supported as many socket options as I reasonably could
310
(mostly on Open Transport).
311
- Found out that the member fields of a struct timespec are named tv_xxx, not
312
ts_xxx, thanks to W. Richard Stevens' sample code.
313
- Fixed conditional macros in sys/un.h [Michel Rabozee].
314
- Calling MSL __close_all() turned out not to have been such a hot idea.
316
Version 2.0b5 19Jul99
318
- Rick Waits correctly pointed out that most of the new files
319
promised in b4 were actually missing.
320
- Fixed bug in MacTCP UDP code [Philippe Lang].
321
- Specified bool support in Example project so it would compile again [Rick Waits].
323
Version 2.0b4 18Jul99
325
- Added support for SIOW based programs.
327
- Fixed Open Transport nonblocking connects [Philippe Lang].
328
- Fixed long standing inability to give new files the right type and
329
creator [Chris Jacobson].
330
- Add MPW makefile and examples to :Examples [Rick Waits].
332
Version 2.0b3 30Jun99
334
- Added support for Standard C and UNIX 98 style signal handling.
335
- Added support for using sfio with SC and MrC.
336
- Improved performance of file I/O.
337
- Tried to improve documentation for SC and MrC [Rick Waits].
338
- Added GUSI_Install.MPW installation script.
339
- Eradicated dependences on STL from GUSI headers.
341
Version 2.0b2 07Jun99
343
- Added support for SC[pp] and MrC[pp] compilers. I compiled with SCpp 8.8.4d1c1
344
and MrCpp 4.1.0a5c3, and intend to maintain the code for newer, but not older
345
versions of these compilers. Unfortunately, Stdio does not work yet when
346
using GUSI with MrCpp due to shared library conflicts. I intend to support
347
sfio for SC and MrC in the near future, though.
348
- Added back STDIN_FILENO & co. Fixed various bad comments in header guards
350
- select for OpenTransport datagram (UDP) sockets was broken [Philippe Lang].
351
- Allow recursive locks for mutexes.
352
- Added a CodeWarrior project files to simplify rebuilds.
353
- Some more work on PPC sockets.
355
Version 2.0b1 14Apr99
357
- Added support for broadcast and multicast options [Tom Bayley, Quinn].
358
- Rewrote GUSIConfig in C++.
359
- Brought documentation up to date.
360
- Event handling for AppleEvents was broken [Chris Jacobson].
361
- Changed auto-spin default to off, as this feature has less importance in
362
GUSI II and can easier be turned on with configuration files.
363
- Introduced GUSIContextFactory to add more flexibility to GUSIContext
364
creation. Made switching in and out fully virtualized.
365
- Massively improved and simplified the handling of race conditions
366
in wakeups [George Warner & Quinn]
367
- Added support for the DCon debugging console, and also switched to DCon
368
for our own debugging output.
369
- Added support for the PPC (Program-to-program communications) toolbox.
370
- Fixed several bugs in Open Transport support.
371
- Removed GUSIwithThreading, which is no longer necessary.
373
Version 2.0a4 22Nov98
375
- Since my Mac is getting packed up, a hasty and somewhat incomplete, but
377
- Changed configuration system to explicit configuration files created with
378
GUSI_Configurator. This change is not reflected in the examples yet.
379
- Added OpenTransport TCP/IP support (finally!)
381
Version 2.0a3 25Oct98
383
- Added MacTCP UDP support, SIOUX support, MSG_PEEK support.
385
- Started adapting old test programs in Examples
387
Version 2.0a2 11Oct98
389
- Much more feature complete version: Added most file routines and domain name
391
- Incorporated as much as I could of Michel Rabozee's excellent feedback.
393
Version 2.0a1 02Aug98
395
- A sneak peek to give an impression of the flavor of the new facilities
396
in GUSI2. This version is far from feature complete, lacking most file
397
routines, UDP support, support for AppleTalk, OpenTransport support,
398
and support of the domain name resolver.
b'\\ No newline at end of file'