mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-23 00:41:02 +00:00
Merge from 0.6.5
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@6040 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
5a2deec1e4
commit
81b7455bda
36 changed files with 1074 additions and 479 deletions
4
ANNOUNCE
4
ANNOUNCE
|
@ -1,7 +1,7 @@
|
|||
Announcement
|
||||
************
|
||||
|
||||
The GNUstep Base Library, version 0.6.0, is now available.
|
||||
The GNUstep Base Library, version 0.6.5, is now available.
|
||||
|
||||
What is the GNUstep Base Library?
|
||||
=================================
|
||||
|
@ -22,7 +22,7 @@ portion of the OpenStep standard (the Foundation library).
|
|||
Where can you get it? How can you compile it?
|
||||
==============================================
|
||||
|
||||
The gstepbase-0.6.0.tar.gz distribution file has been placed on
|
||||
The gstepbase-0.6.5.tar.gz distribution file has been placed on
|
||||
`ftp.gnu.org' in `pub/gnu/gstep'.
|
||||
|
||||
The library requires gcc 2.8.0 or higher. Significant sections of
|
||||
|
|
15
BUGS
Normal file
15
BUGS
Normal file
|
@ -0,0 +1,15 @@
|
|||
TODO
|
||||
****
|
||||
|
||||
* NSZone memory allocation may not work correctly. If you encounter
|
||||
a problem with NSZones, switch to using the default zone instead
|
||||
of creating one.
|
||||
|
||||
* Invocations (and by extension, Distributed Objects) work well only
|
||||
on ix86 platforms. In particular, they don't work well on PPC and
|
||||
Sparc platforms.
|
||||
|
||||
* Distributed Objects aren't thread safe. Don't use DO between
|
||||
threads in a multi-theaded app.
|
||||
|
||||
|
112
ChangeLog
112
ChangeLog
|
@ -11,7 +11,117 @@ Fri Feb 4 17:20:00 2000 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
|||
* Source/NSConnection.m: Tidied a little and added ([-registerName:])
|
||||
* Source/NSConnection.h: ditto
|
||||
|
||||
Sun Jan 16 9:10:00 2000 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
2000-02-17 Adam Fedor <fedor@gnu.org>
|
||||
|
||||
* Version: 0.6.5 released.
|
||||
|
||||
2000-02-16 Adam Fedor <fedor@gnu.org>
|
||||
|
||||
* gnustep-base.spec: Newfile
|
||||
|
||||
Wed Feb 16 06:28:00 2000 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
|
||||
* Source/NSAssertionHandler.m: Applied patch by David relson to change
|
||||
output format for function assertions, fixed error in format string,
|
||||
and made similar changes for method assertions.
|
||||
|
||||
2000-02-14 Adam Fedor <fedor@gnu.org>
|
||||
|
||||
* Version: Update version number
|
||||
* Documentation/announce.tmpl.texi: Update
|
||||
* Documentation/readme.tmpl.texi: Likewise.
|
||||
* Documentation/news.tmpl.texi: Likewise.
|
||||
* Documentation/todo.tmpl.texi: Likewise.
|
||||
* ANNOUNCE, BUGS, NEWS, README: Regenerate
|
||||
|
||||
Fri Feb 11 06:27:00 2000 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
|
||||
* Source/NSZone.m: Tidied indentation etc to GNU style.
|
||||
|
||||
Thu Feb 10 23:01:00 2000 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
|
||||
* Source/NSDebug.m: Patch by David Relson to change memory allocation
|
||||
report and add thread-safety. Modified by me to automatically use
|
||||
locking if necessary, to tidy up, and to fix a couple of bugs in
|
||||
lock/unlock sequencing. All new stuff - but since the previous
|
||||
version was completely unusable in a multithreaded environment I
|
||||
don't think we are running any risk by adding this here.
|
||||
|
||||
Thu Feb 10 15:00:00 2000 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
|
||||
Changes to fix possible crashes where task completion notifications
|
||||
are sent at inappropriate times due to SIGCHLD.
|
||||
* Source/NSTask.m: Move signal handler code to GSChecktasks() and
|
||||
have the signal handler simply set a flag to say work needs doing.
|
||||
* Source/NSRunLoop.m: Add calls to GSCheckTasks() so that we notice
|
||||
the death of a child.
|
||||
|
||||
Thu Feb 10 14:13:00 2000 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
|
||||
* Source/UnixFileHandle.m: ([-receivedEvent:type:extra: forMode:])
|
||||
fix so that incoming connections are closed when their file handle
|
||||
is deallocated.
|
||||
|
||||
Thu Feb 10 9:34:00 2000 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
|
||||
* Headers/gnustep/base/preface.h.in: Added tests to see if _C_LNG_LNG
|
||||
and _C_ULNG_LNG are defined in the objc compiler headers and, if not,
|
||||
define them. Long long support was added in gcc 2.8 (minimum
|
||||
compiler version recommended for GNUstep), but the defines were
|
||||
missing from the headers :-(
|
||||
* Source/NSArchiver.m: Remove conditional compile for long long stuff.
|
||||
* Source/NSData.m: ditto
|
||||
* Source/NSUnarchiver.m: ditto
|
||||
* Source/mframe.m: ditto
|
||||
|
||||
2000-02-09 Adam Fedor <fedor@gnu.org>
|
||||
|
||||
* Documentation/gnustep-base.tmpl.texi: Update.
|
||||
* Documentation/news.tmpl.texi: Likewise.
|
||||
* Documentation/readme.tmpl.texi:Likewise.
|
||||
|
||||
* Headers/gnustep/base/NSObjCRuntime.h: Include preface for stdargs.
|
||||
|
||||
Wed Feb 9 17:44:00 2000 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
|
||||
* Headers/gnustep/base/NSObjCRuntime.h: fix for header dependencies.
|
||||
* Headers/gnustep/base/Unicode.h: ditto
|
||||
* Source/NSDebug.m: ditto
|
||||
|
||||
Tue Feb 8 23:00:00 2000 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
|
||||
* Source/NSRunLoop.m: ([acceptInputForMode:beforeDate:]) fix handling
|
||||
of notifications in idle queue.
|
||||
|
||||
2000-02-08 Adam Fedor <fedor@gnu.org>
|
||||
|
||||
* config.guess: New version
|
||||
* config.sub: Likewise.
|
||||
|
||||
Tue Feb 8 23:00:00 2000 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
|
||||
* Source/NSArray.m: Move ([writeToFile:atomically:]) from mutable
|
||||
array to array code.
|
||||
|
||||
Tue Feb 8 12:44:00 2000 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
|
||||
* Source/Foundation/HSConfig.h.in: Added some GC macros
|
||||
* Source/NSData.m: Attempt to remove temporary file if an atomic
|
||||
write attempt fails.
|
||||
|
||||
Sat Feb 5 8:47:00 2000 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
|
||||
* Source/Foundation/NSDebug.h: Add missing function prototype -
|
||||
Patch by David Relson <relson@expressgate.net>
|
||||
|
||||
2000-01-27 Adam Fedor <fedor@gnu.org>
|
||||
|
||||
* Tools/gdomap.c (init_iface): Check to see if an
|
||||
interface is up (using SIOCGIFFLAGS), and then get the address
|
||||
information before checking whether the address is in the AF_INET
|
||||
family (patch from Jonathan Gapen <jagapen@whitewater.chem.wisc.edu>).
|
||||
|
||||
Sun Jan 16 9:10:00 1999 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
|
||||
Moved objc-load.c to objc-load.m and filnd-exec.c to find-exec.m
|
||||
Added logging functions to objc-load.m so that logging can be
|
||||
|
|
|
@ -35,17 +35,17 @@ DOCUMENT_NAME = gnustep-base
|
|||
|
||||
# The text documents to be generated
|
||||
DOCUMENT_TEXT_NAME = \
|
||||
INSTALL NEWS CODING-STANDARDS README ANNOUNCE
|
||||
INSTALL NEWS CODING-STANDARDS README ANNOUNCE BUGS
|
||||
|
||||
TOP_DOC_FILES = INSTALL NEWS README ANNOUNCE
|
||||
TOP_DOC_FILES = INSTALL NEWS README ANNOUNCE BUGS
|
||||
|
||||
gnustep-base_TEXI_FILES = \
|
||||
version.tmpl.texi \
|
||||
gnustep-base.tmpl.texi \
|
||||
gnustep-zones.tmpl.texi
|
||||
|
||||
TODO_TEXI_FILES = version.tmpl.texi
|
||||
TODO_TEXT_MAIN = todo.tmpl.texi
|
||||
BUGS_TEXI_FILES = version.tmpl.texi
|
||||
BUGS_TEXT_MAIN = todo.tmpl.texi
|
||||
|
||||
INSTALL_TEXI_FILES = version.tmpl.texi
|
||||
INSTALL_TEXT_MAIN = install.tmpl.texi
|
||||
|
|
|
@ -152,11 +152,14 @@ Type @code{make install} to install the libraries and programs
|
|||
@chapter Implementation Details
|
||||
|
||||
@menu
|
||||
* Memory Management::
|
||||
* Memory Management::
|
||||
* Memory Allocation::
|
||||
* Reference Counting::
|
||||
* Garbage Collection::
|
||||
* Time Zone::
|
||||
@end menu
|
||||
|
||||
@node Memory Management, Time Zones, Implementation, Implementation
|
||||
@node Memory Management, Memory Allocation, Implementation, Implementation
|
||||
@section Memory Management
|
||||
|
||||
The OpenStep standard defines an reference-count based memory management scheme which the GNUstep libraries support. GNUstep also supports garbage collection
|
||||
|
@ -169,7 +172,7 @@ currently (October 1999) in a pre-alpha state.
|
|||
* Garbage Collection::
|
||||
@end menu
|
||||
|
||||
@node Memory Allocation, , Reference Counting, Memory Management
|
||||
@node Memory Allocation, Reference Counting, Memory Management, Implementation
|
||||
@section Memory Allocation
|
||||
|
||||
Normally, memory is allocated in zones. Most memory is allocated from a
|
||||
|
@ -213,7 +216,7 @@ make memory management easy. In addition to this, the GNU Objective-C compiler
|
|||
and the GNUstep system provide a memory sweeping garbage collection mechanism
|
||||
(using the Boehm conservative garbage collection library).
|
||||
|
||||
@node Reference Counting, Memory Allocation, Garbage Collection, Memory Management
|
||||
@node Reference Counting, Garbage Collection, Memory Allocation, Implementation
|
||||
@section Reference Counting
|
||||
|
||||
The reference counting scheme for object allocation/deallocation is quite
|
||||
|
@ -237,15 +240,15 @@ so you don't need to worry about releasing it yourself. However, if you wish
|
|||
to store the object for any length of time, you will need to send it a retain
|
||||
message, and then send it a release when you have finished with it.
|
||||
|
||||
@node Garbage Collection, Reference Counting, Memory Management, Memory Management
|
||||
@node Garbage Collection, Time Zone, Reference Counting, Implementation
|
||||
@section Garbage Collection
|
||||
|
||||
|
||||
@node Time Zone, , Memory Management, Implementation
|
||||
@node Time Zone, , Garbage Collection, Implementation
|
||||
@section Time Zones
|
||||
|
||||
If the GNUstep time zone datafiles become too out of date, one can
|
||||
download an updated database from <ftp://elsie.nci.nih.gov/pub/> and
|
||||
download an updated database from @url{ftp://elsie.nci.nih.gov/pub/} and
|
||||
compile it as specified in the README file in the NSTimeZones
|
||||
directory. (In fact, I believe it's about time they're updated.)
|
||||
|
||||
|
|
|
@ -7,6 +7,17 @@
|
|||
The currently released version of the library is
|
||||
@samp{@value{GNUSTEP-BASE-VERSION}}.
|
||||
|
||||
@section Noteworthy changes in version @samp{0.6.5}
|
||||
|
||||
@itemize @bullet
|
||||
@item Better debugging information.
|
||||
@item Timezone information rewritten to work more like GNUstep wants it
|
||||
rather than strict Posix.
|
||||
@item Added support for FreeBSD native POSIX threads
|
||||
@item Better garbage collection support.
|
||||
@item Lots of optimizations and bug fixes.
|
||||
@end itemize
|
||||
|
||||
@section Noteworthy changes in version @samp{0.6.0}
|
||||
|
||||
Most of the changes to the Base Library are bug fixes and updates to
|
||||
|
|
|
@ -14,13 +14,6 @@ The file @samp{NEWS} has the library's feature history.
|
|||
The file @samp{GNUstep-HOWTO}
|
||||
give instructions for installing the library.
|
||||
|
||||
@section Preparing to write code
|
||||
|
||||
The documentation isn't much to speak of so far. Better documentation
|
||||
will be forthcoming, but the library needs to settle first. For now I
|
||||
recommend reading the header files.
|
||||
The headers for the classes are in @file{./src/include}.
|
||||
|
||||
@section How can you help?
|
||||
|
||||
@itemize @bullet
|
||||
|
@ -29,10 +22,6 @@ The headers for the classes are in @file{./src/include}.
|
|||
Give us feedback! Tell us what you like; tell us what you think
|
||||
could be better. Send bug reports to @email{bug-gnustep@@gnu.org}.
|
||||
|
||||
@item
|
||||
Donate classes. If you write classes that fit in the libgnustep-base
|
||||
framework, I'd be happy to include them.
|
||||
|
||||
@end itemize
|
||||
|
||||
@example
|
||||
|
|
|
@ -10,5 +10,15 @@
|
|||
|
||||
@itemize @bullet
|
||||
|
||||
@end itemize
|
||||
@item NSZone memory allocation may not work correctly. If you
|
||||
encounter a problem with NSZones, switch to using the
|
||||
default zone instead of creating one.
|
||||
|
||||
@item Invocations (and by extension, Distributed Objects) work well only
|
||||
on ix86 platforms. In particular, they don't work well on PPC and Sparc
|
||||
platforms.
|
||||
|
||||
@item Distributed Objects aren't thread safe. Don't use DO
|
||||
between threads in a multi-theaded app.
|
||||
|
||||
@end itemize
|
||||
|
|
|
@ -128,5 +128,22 @@ typedef @GS_ADDR@ gsaddr;
|
|||
#define GS_HAVE_I64 @GS_HAVE_I64@
|
||||
#define GS_HAVE_I128 @GS_HAVE_I128@
|
||||
|
||||
/*
|
||||
* Macros to deal with hiding an object from the garbage collector
|
||||
* This macro employs the procesor-dependent knowledge that a pointer to an
|
||||
* object will always be on an even address boundary. If we ever port to a
|
||||
* system where this is not the case, we will have to find another mechanism.
|
||||
*/
|
||||
#ifndef GS_WITH_GC
|
||||
#define GS_WITH_GC 0
|
||||
#endif
|
||||
#if GS_WITH_GC
|
||||
#define GS_GC_HIDE(obj) ((id)(((gsaddr)obj) | 1))
|
||||
#define GS_GC_UNHIDE(obj) ((id)(((gsaddr)obj) & ~1))
|
||||
#else
|
||||
#define GS_GC_HIDE(obj) ((id)obj)
|
||||
#define GS_GC_UNHIDE(obj) ((id)obj)
|
||||
#endif
|
||||
|
||||
#endif /* included_GSConfig_h */
|
||||
|
||||
|
|
|
@ -65,6 +65,7 @@ extern void GSDebugAllocationRemove(Class c);
|
|||
extern BOOL GSDebugAllocationActive(BOOL active);
|
||||
extern int GSDebugAllocationCount(Class c);
|
||||
extern const char* GSDebugAllocationList(BOOL changeFlag);
|
||||
extern const char* GSDebugAllocationListAll();
|
||||
|
||||
extern NSString* GSDebugFunctionMsg(const char *func, const char *file,
|
||||
int line, NSString *fmt);
|
||||
|
|
|
@ -24,8 +24,10 @@
|
|||
#ifndef __NSObjCRuntime_h_GNUSTEP_BASE_INCLUDE
|
||||
#define __NSObjCRuntime_h_GNUSTEP_BASE_INCLUDE
|
||||
|
||||
#include <base/preface.h>
|
||||
#include <objc/objc.h>
|
||||
#include <Foundation/NSString.h>
|
||||
|
||||
@class NSString;
|
||||
|
||||
extern NSString *NSStringFromSelector(SEL aSelector);
|
||||
extern SEL NSSelectorFromString(NSString *aSelectorName);
|
||||
|
|
|
@ -17,14 +17,15 @@
|
|||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with this library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA,
|
||||
USA.
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
|
||||
*/
|
||||
|
||||
#ifndef __Unicode_h_OBJECTS_INCLUDE
|
||||
#define __Unicode_h_OBJECTS_INCLUDE
|
||||
|
||||
#include <Foundation/NSString.h> /* For string encodings */
|
||||
|
||||
unichar encode_chartouni(char c, NSStringEncoding enc);
|
||||
char encode_unitochar(unichar u, NSStringEncoding enc);
|
||||
unichar chartouni(char c);
|
||||
|
|
|
@ -67,6 +67,17 @@
|
|||
/* #include <objc/objc-list.h> */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Hack for older compiler versions that don't have all defines
|
||||
* needed in objc-api.h
|
||||
*/
|
||||
#ifndef _C_LNG_LNG
|
||||
#define _C_LNG_LNG 'q'
|
||||
#endif
|
||||
#ifndef _C_ULNG_LNG
|
||||
#define _C_ULNG_LNG 'Q'
|
||||
#endif
|
||||
|
||||
#ifndef __WIN32__
|
||||
#include <sys/param.h> /* Hack to get rid of warning in GNU libc 2.0.3. */
|
||||
#endif
|
||||
|
|
35
NEWS
35
NEWS
|
@ -1,7 +1,21 @@
|
|||
News
|
||||
****
|
||||
|
||||
The currently released version of the library is `0.6.0'.
|
||||
The currently released version of the library is `0.6.5'.
|
||||
|
||||
Noteworthy changes in version `0.6.5'
|
||||
=====================================
|
||||
|
||||
* Better debugging information.
|
||||
|
||||
* Timezone information rewritten to work more like GNUstep wants it
|
||||
rather than strict Posix.
|
||||
|
||||
* Added support for FreeBSD native POSIX threads
|
||||
|
||||
* Better garbage collection support.
|
||||
|
||||
* Lots of optimizations and bug fixes.
|
||||
|
||||
Noteworthy changes in version `0.6.0'
|
||||
=====================================
|
||||
|
@ -18,6 +32,7 @@ and installations, and is considered to be fairly stable.
|
|||
|
||||
* Performance boosts in many classes.
|
||||
|
||||
|
||||
Noteworthy changes in version `0.5.5'
|
||||
=====================================
|
||||
|
||||
|
@ -36,12 +51,14 @@ Noteworthy changes in version `0.5.5'
|
|||
* There are several new tools for handling services, defaults, and
|
||||
pasteboards.
|
||||
|
||||
|
||||
Noteworthy changes in version `0.5.1'
|
||||
=====================================
|
||||
|
||||
* Additional runtime functions for interaction with Guile and
|
||||
ObjC-Guile library.
|
||||
|
||||
|
||||
Noteworthy changes in version `0.5.0'
|
||||
=====================================
|
||||
|
||||
|
@ -56,6 +73,7 @@ Noteworthy changes in version `0.5.0'
|
|||
addresses from Richard Frith-Macdonald
|
||||
<richard@brainstorm.co.uk>.
|
||||
|
||||
|
||||
Noteworthy changes in version `0.4.0'
|
||||
=====================================
|
||||
|
||||
|
@ -90,6 +108,7 @@ Noteworthy changes in version `0.4.0'
|
|||
|
||||
* Many, many, many, many bug fixes and new classes.
|
||||
|
||||
|
||||
Noteworthy changes since version `0.1.19'
|
||||
=========================================
|
||||
|
||||
|
@ -191,6 +210,7 @@ Noteworthy changes since version `0.1.19'
|
|||
|
||||
* ...and many bug fixes.
|
||||
|
||||
|
||||
Noteworthy changes since version `0.1.14'
|
||||
=========================================
|
||||
|
||||
|
@ -225,6 +245,7 @@ Noteworthy changes since version `0.1.14'
|
|||
* Bug fixes in NSString, NSDictionary, NSArray, NSGeometry and other
|
||||
places.
|
||||
|
||||
|
||||
Noteworthy changes since version `0.1.13'
|
||||
=========================================
|
||||
|
||||
|
@ -239,6 +260,7 @@ Noteworthy changes since version `0.1.13'
|
|||
|
||||
* Many bug fixes.
|
||||
|
||||
|
||||
Noteworthy changes since version `0.1.12'
|
||||
=========================================
|
||||
|
||||
|
@ -247,6 +269,7 @@ Noteworthy changes since version `0.1.12'
|
|||
class configurability; NSString -getCharacter:range:. See the
|
||||
ChangeLog for more details.
|
||||
|
||||
|
||||
Noteworthy changes since version `0.1.10'
|
||||
=========================================
|
||||
|
||||
|
@ -264,6 +287,7 @@ Noteworthy changes since version `0.1.10'
|
|||
|
||||
* And several bug fixes. See the ChangeLog for details.
|
||||
|
||||
|
||||
Noteworthy changes since version `0.1.9'
|
||||
========================================
|
||||
|
||||
|
@ -273,6 +297,7 @@ Noteworthy changes since version `0.1.9'
|
|||
* Several bug fixes, including a problem with a missing file in
|
||||
0.1.9.
|
||||
|
||||
|
||||
Noteworthy changes since version `0.1.8'
|
||||
========================================
|
||||
|
||||
|
@ -309,6 +334,7 @@ Noteworthy changes since version `0.1.8'
|
|||
in Collection.m; typo in BinaryTree.m; put -write: and -read:
|
||||
implementations back in Collection.m.
|
||||
|
||||
|
||||
Noteworthy changes since version `0.1.7'
|
||||
========================================
|
||||
|
||||
|
@ -330,6 +356,7 @@ Noteworthy changes since version `0.1.7'
|
|||
* Several bug fixes, including two serious ones in Collection
|
||||
deallocation and behavior adding. See the ChangeLog for details.
|
||||
|
||||
|
||||
Noteworthy changes since version `0.1.5'
|
||||
========================================
|
||||
|
||||
|
@ -357,6 +384,7 @@ Noteworthy changes since version `0.1.5'
|
|||
* Several bug fixes. Thanks to those who reported them. Credits
|
||||
are in the ChangeLog.
|
||||
|
||||
|
||||
Noteworthy changes since version `0.1.3'
|
||||
========================================
|
||||
|
||||
|
@ -383,6 +411,7 @@ made on GNUSTEP.
|
|||
* Entire library converted to use `retain', `release',
|
||||
`autorelease', `dealloc' instead of `free'.
|
||||
|
||||
|
||||
Noteworthy changes since version `0.1.0'
|
||||
========================================
|
||||
|
||||
|
@ -392,6 +421,7 @@ Noteworthy changes since version `0.1.0'
|
|||
* Bug fixes: Install next-includes properly. New instructions in
|
||||
README.ULTRIX. Time.m patched for Solaris 2.4. test12.m free fix.
|
||||
|
||||
|
||||
Noteworthy changes in version `0.1.0'
|
||||
=====================================
|
||||
|
||||
|
@ -425,6 +455,7 @@ Noteworthy changes in version `0.1.0'
|
|||
in List and HashTable. New files zone.[hc] containing dummy stubs
|
||||
for NeXT-compatible zone functions.
|
||||
|
||||
|
||||
Noteworthy changes in verion `940524'
|
||||
=====================================
|
||||
|
||||
|
@ -451,6 +482,7 @@ Noteworthy changes in verion `940524'
|
|||
`-freeEnumState:'. Several bug fixes in List and Storage; changes
|
||||
for better NeXT-compability. And more.
|
||||
|
||||
|
||||
Noteworthy changes in version `931026'
|
||||
======================================
|
||||
|
||||
|
@ -490,5 +522,6 @@ Noteworthy changes in version `931026'
|
|||
|
||||
* ...and more.
|
||||
|
||||
|
||||
Also see the `ChangeLog' file for more detail.
|
||||
|
||||
|
|
10
README
10
README
|
@ -21,22 +21,12 @@ Initial reading
|
|||
The file `GNUstep-HOWTO' give instructions for installing the
|
||||
library.
|
||||
|
||||
Preparing to write code
|
||||
=======================
|
||||
|
||||
The documentation isn't much to speak of so far. Better
|
||||
documentation will be forthcoming, but the library needs to settle
|
||||
first. For now I recommend reading the header files. The headers for
|
||||
the classes are in `./src/include'.
|
||||
|
||||
How can you help?
|
||||
=================
|
||||
|
||||
* Give us feedback! Tell us what you like; tell us what you think
|
||||
could be better. Send bug reports to <bug-gnustep@gnu.org>.
|
||||
|
||||
* Donate classes. If you write classes that fit in the
|
||||
libgnustep-base framework, I'd be happy to include them.
|
||||
|
||||
Happy hacking!
|
||||
|
||||
|
|
|
@ -205,10 +205,8 @@ static SEL eValSel = @selector(encodeValueOfObjCType:at:);
|
|||
case _C_UINT: info = _GSC_UINT | _GSC_S_INT; break;
|
||||
case _C_LNG: info = _GSC_LNG | _GSC_S_LNG; break;
|
||||
case _C_ULNG: info = _GSC_ULNG | _GSC_S_LNG; break;
|
||||
#ifdef _C_LNG_LNG
|
||||
case _C_LNG_LNG: info = _GSC_LNG_LNG | _GSC_S_LNG_LNG; break;
|
||||
case _C_ULNG_LNG: info = _GSC_ULNG_LNG | _GSC_S_LNG_LNG; break;
|
||||
#endif
|
||||
case _C_FLT: info = _GSC_FLT; break;
|
||||
case _C_DBL: info = _GSC_DBL; break;
|
||||
default: info = _GSC_NONE; break;
|
||||
|
@ -537,7 +535,6 @@ static SEL eValSel = @selector(encodeValueOfObjCType:at:);
|
|||
(*_serImp)(_dst, serSel, (void*)buf, @encode(unsigned long), nil);
|
||||
return;
|
||||
|
||||
#ifdef _C_LNG_LNG
|
||||
case _C_LNG_LNG:
|
||||
(*_tagImp)(_dst, tagSel, _GSC_LNG_LNG | _GSC_S_LNG_LNG);
|
||||
(*_serImp)(_dst, serSel, (void*)buf, @encode(long long), nil);
|
||||
|
@ -548,7 +545,6 @@ static SEL eValSel = @selector(encodeValueOfObjCType:at:);
|
|||
(*_serImp)(_dst, serSel, (void*)buf, @encode(unsigned long long), nil);
|
||||
return;
|
||||
|
||||
#endif
|
||||
case _C_FLT:
|
||||
(*_tagImp)(_dst, tagSel, _GSC_FLT);
|
||||
(*_serImp)(_dst, serSel, (void*)buf, @encode(float), nil);
|
||||
|
|
|
@ -745,6 +745,11 @@ static NSString *indentStrings[] = {
|
|||
(*appImp)(result, appSel, @")");
|
||||
}
|
||||
|
||||
- (BOOL) writeToFile: (NSString *)path atomically: (BOOL)useAuxiliaryFile
|
||||
{
|
||||
return [[self description] writeToFile: path atomically: useAuxiliaryFile];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
@ -846,11 +851,6 @@ static NSString *indentStrings[] = {
|
|||
initWithCapacity: numItems]);
|
||||
}
|
||||
|
||||
- (BOOL) writeToFile: (NSString *)path atomically: (BOOL)useAuxiliaryFile
|
||||
{
|
||||
return [[self description] writeToFile: path atomically: useAuxiliaryFile];
|
||||
}
|
||||
|
||||
/* Override our superclass's designated initializer to go our's */
|
||||
- (id) initWithObjects: (id*)objects count: (unsigned)count
|
||||
{
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
/* Key for thread dictionary. */
|
||||
static NSString *dict_key = @"_NSAssertionHandler";
|
||||
|
||||
+ (NSAssertionHandler *)currentHandler
|
||||
+ (NSAssertionHandler*)currentHandler
|
||||
{
|
||||
NSMutableDictionary *dict;
|
||||
NSAssertionHandler *handler;
|
||||
|
@ -48,10 +48,10 @@ static NSString *dict_key = @"_NSAssertionHandler";
|
|||
return handler;
|
||||
}
|
||||
|
||||
- (void)handleFailureInFunction:(NSString *)functionName
|
||||
file:(NSString *)fileName
|
||||
lineNumber:(int)line
|
||||
description:(NSString *)format,...
|
||||
- (void) handleFailureInFunction: (NSString*)functionName
|
||||
file: (NSString*)fileName
|
||||
lineNumber: (int)line
|
||||
description: (NSString*)format,...
|
||||
{
|
||||
id message;
|
||||
va_list ap;
|
||||
|
@ -59,8 +59,8 @@ static NSString *dict_key = @"_NSAssertionHandler";
|
|||
va_start(ap, format);
|
||||
message =
|
||||
[NSString
|
||||
stringWithFormat: @"Assertion failed in %@, file %@:%d. %@",
|
||||
functionName, fileName, line, format];
|
||||
stringWithFormat: @"%@:%d Assertion failed in %@. %@",
|
||||
fileName, line, functionName, format];
|
||||
NSLogv(message, ap);
|
||||
va_end(ap);
|
||||
|
||||
|
@ -81,9 +81,9 @@ static NSString *dict_key = @"_NSAssertionHandler";
|
|||
va_start(ap, format);
|
||||
message =
|
||||
[NSString
|
||||
stringWithFormat: @"Assertion failed in %s, method %s, file %@:%d. %@",
|
||||
object_get_class_name(object), sel_get_name(aSelector),
|
||||
fileName, line, format];
|
||||
stringWithFormat: @"%@:%d Assertion failed in %s, method %s. %@",
|
||||
fileName, line, object_get_class_name(object), sel_get_name(aSelector),
|
||||
format];
|
||||
NSLogv(message, ap);
|
||||
|
||||
[NSException raise: NSInternalInconsistencyException
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
/* GNUStep callback functions prototypes.
|
||||
* Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
* Copyright(C) 1996 Free Software Foundation, Inc.
|
||||
*
|
||||
* Author: Albin L. Jones <Albin.L.Jones@Dartmouth.EDU>
|
||||
* Created: Tue Feb 13 23:10:29 EST 1996
|
||||
* Updated: Tue Feb 13 23:10:29 EST 1996
|
||||
* Updated: Mon Feb 7 10:25:00 GMT 2000
|
||||
* Serial: 96.02.13.01
|
||||
*
|
||||
* This file is part of the GNUstep Base Library.
|
||||
|
@ -11,7 +12,7 @@
|
|||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
* version 2 of the License, or(at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -36,47 +37,47 @@
|
|||
|
||||
/** For `int's **/
|
||||
|
||||
unsigned int _NS_int_hash (void *table, int i);
|
||||
BOOL _NS_int_is_equal (void *table, int i, int j);
|
||||
void _NS_int_retain (void *table, int i);
|
||||
void _NS_int_release (void *table, int i);
|
||||
NSString *_NS_int_describe (void *table, int i);
|
||||
unsigned int _NS_int_hash(void *table, int i);
|
||||
BOOL _NS_int_is_equal(void *table, int i, int j);
|
||||
void _NS_int_retain(void *table, int i);
|
||||
void _NS_int_release(void *table, int i);
|
||||
NSString *_NS_int_describe(void *table, int i);
|
||||
|
||||
/** For owned `void *' **/
|
||||
|
||||
unsigned int _NS_owned_void_p_hash (void *table, void *p);
|
||||
BOOL _NS_owned_void_p_is_equal (void *table, void *p, void *q);
|
||||
void _NS_owned_void_p_retain (void *table, void *p);
|
||||
void _NS_owned_void_p_release (void *table, void *p);
|
||||
NSString *_NS_owned_void_p_describe (void *table, void *p);
|
||||
unsigned int _NS_owned_void_p_hash(void *table, void *p);
|
||||
BOOL _NS_owned_void_p_is_equal(void *table, void *p, void *q);
|
||||
void _NS_owned_void_p_retain(void *table, void *p);
|
||||
void _NS_owned_void_p_release(void *table, void *p);
|
||||
NSString *_NS_owned_void_p_describe(void *table, void *p);
|
||||
|
||||
/** For non-retained Objective-C objects **/
|
||||
unsigned int _NS_non_retained_id_hash (void *table, id <NSObject> o);
|
||||
BOOL _NS_non_retained_id_is_equal (void *table, id <NSObject> o, id <NSObject> p);
|
||||
void _NS_non_retained_id_retain (void *table, id <NSObject> o);
|
||||
void _NS_non_retained_id_release (void *table, id <NSObject> o);
|
||||
NSString *_NS_non_retained_id_describe (void *table, id <NSObject> o);
|
||||
unsigned int _NS_non_retained_id_hash(void *table, id <NSObject> o);
|
||||
BOOL _NS_non_retained_id_is_equal(void *table, id <NSObject> o, id <NSObject> p);
|
||||
void _NS_non_retained_id_retain(void *table, id <NSObject> o);
|
||||
void _NS_non_retained_id_release(void *table, id <NSObject> o);
|
||||
NSString *_NS_non_retained_id_describe(void *table, id <NSObject> o);
|
||||
|
||||
/** For (retainable) objects **/
|
||||
unsigned int _NS_id_hash (void *table, id <NSObject> o);
|
||||
BOOL _NS_id_is_equal (void *table, id <NSObject> o, id <NSObject> p);
|
||||
void _NS_id_retain (void *table, id <NSObject> o);
|
||||
void _NS_id_release (void *table, id <NSObject> o);
|
||||
NSString *_NS_id_describe (void *table, id <NSObject> o);
|
||||
/** For(retainable) objects **/
|
||||
unsigned int _NS_id_hash(void *table, id <NSObject> o);
|
||||
BOOL _NS_id_is_equal(void *table, id <NSObject> o, id <NSObject> p);
|
||||
void _NS_id_retain(void *table, id <NSObject> o);
|
||||
void _NS_id_release(void *table, id <NSObject> o);
|
||||
NSString *_NS_id_describe(void *table, id <NSObject> o);
|
||||
|
||||
/** For (non-owned) `void *' **/
|
||||
unsigned int _NS_non_owned_void_p_hash (void *table, void *p);
|
||||
BOOL _NS_non_owned_void_p_is_equal (void *table, void *p, void *q);
|
||||
void _NS_non_owned_void_p_retain (void *table, void *p);
|
||||
void _NS_non_owned_void_p_release (void *table, void *p);
|
||||
NSString *_NS_non_owned_void_p_describe (void *table, void *p);
|
||||
/** For(non-owned) `void *' **/
|
||||
unsigned int _NS_non_owned_void_p_hash(void *table, void *p);
|
||||
BOOL _NS_non_owned_void_p_is_equal(void *table, void *p, void *q);
|
||||
void _NS_non_owned_void_p_retain(void *table, void *p);
|
||||
void _NS_non_owned_void_p_release(void *table, void *p);
|
||||
NSString *_NS_non_owned_void_p_describe(void *table, void *p);
|
||||
|
||||
/** For pointers to structures and `int *' **/
|
||||
unsigned int _NS_int_p_hash (void *table, int *p);
|
||||
BOOL _NS_int_p_is_equal (void *table, int *p, int *q);
|
||||
void _NS_int_p_retain (void *table, int *p);
|
||||
void _NS_int_p_release (void *table, int *p);
|
||||
NSString *_NS_int_p_describe (void *table, int *p);
|
||||
unsigned int _NS_int_p_hash(void *table, int *p);
|
||||
BOOL _NS_int_p_is_equal(void *table, int *p, int *q);
|
||||
void _NS_int_p_retain(void *table, int *p);
|
||||
void _NS_int_p_release(void *table, int *p);
|
||||
NSString *_NS_int_p_describe(void *table, int *p);
|
||||
|
||||
#endif /* __NSCallBacks_h_OBJECTS_INCLUDE **/
|
||||
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
/* GNUStep callback functions. Implicitly required by the standard.
|
||||
* Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
* Copyright(C) 1996 Free Software Foundation, Inc.
|
||||
*
|
||||
* Author: Albin L. Jones <Albin.L.Jones@Dartmouth.EDU>
|
||||
* Created: Tue Feb 13 23:10:29 EST 1996
|
||||
* Updated: Wed Mar 20 19:53:48 EST 1996
|
||||
* Updated: Mon Feb 7 10:25:00 GMT 2000
|
||||
* Serial: 96.03.20.02
|
||||
*
|
||||
* This file is part of the GNUstep Base Library.
|
||||
|
@ -11,7 +12,7 @@
|
|||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
* version 2 of the License, or(at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -36,58 +37,58 @@
|
|||
/** For `int's **/
|
||||
|
||||
unsigned int
|
||||
_NS_int_hash (void *table, int i)
|
||||
_NS_int_hash(void *table, int i)
|
||||
{
|
||||
return (unsigned int) i;
|
||||
}
|
||||
|
||||
BOOL
|
||||
_NS_int_is_equal (void *table, int i, int j)
|
||||
_NS_int_is_equal(void *table, int i, int j)
|
||||
{
|
||||
return (i == j) ? YES : NO;
|
||||
}
|
||||
|
||||
void
|
||||
_NS_int_retain (void *table, int i)
|
||||
_NS_int_retain(void *table, int i)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
_NS_int_release (void *table, int i)
|
||||
_NS_int_release(void *table, int i)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *
|
||||
_NS_int_describe (void *table, int i)
|
||||
_NS_int_describe(void *table, int i)
|
||||
{
|
||||
return [NSString stringWithFormat:@"%d", i];
|
||||
return [NSString stringWithFormat: @"%d", i];
|
||||
}
|
||||
|
||||
/** For owned `void *' **/
|
||||
|
||||
unsigned int
|
||||
_NS_owned_void_p_hash (void *table, void *p)
|
||||
_NS_owned_void_p_hash(void *table, void *p)
|
||||
{
|
||||
/* P may be aligned, so we need to compensate. */
|
||||
return ((unsigned int)p)/4;
|
||||
}
|
||||
|
||||
BOOL
|
||||
_NS_owned_void_p_is_equal (void *table, void *p, void *q)
|
||||
_NS_owned_void_p_is_equal(void *table, void *p, void *q)
|
||||
{
|
||||
return (p == q) ? YES : NO;
|
||||
}
|
||||
|
||||
void
|
||||
_NS_owned_void_p_retain (void *table, void *p)
|
||||
_NS_owned_void_p_retain(void *table, void *p)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
_NS_owned_void_p_release (void *table, void *p)
|
||||
_NS_owned_void_p_release(void *table, void *p)
|
||||
{
|
||||
if (p != 0)
|
||||
free(p);
|
||||
|
@ -95,139 +96,139 @@ _NS_owned_void_p_release (void *table, void *p)
|
|||
}
|
||||
|
||||
NSString *
|
||||
_NS_owned_void_p_describe (void *table, void *p)
|
||||
_NS_owned_void_p_describe(void *table, void *p)
|
||||
{
|
||||
return [NSString stringWithFormat:@"%#x", p];
|
||||
return [NSString stringWithFormat: @"%#x", p];
|
||||
}
|
||||
|
||||
/** For non-retained Objective-C objects **/
|
||||
|
||||
unsigned int
|
||||
_NS_non_retained_id_hash (void *table, id <NSObject> o)
|
||||
_NS_non_retained_id_hash(void *table, id <NSObject> o)
|
||||
{
|
||||
return [o hash];
|
||||
}
|
||||
|
||||
BOOL
|
||||
_NS_non_retained_id_is_equal (void *table, id <NSObject> o, id <NSObject> p)
|
||||
_NS_non_retained_id_is_equal(void *table, id <NSObject> o, id <NSObject> p)
|
||||
{
|
||||
return [o isEqual:p];
|
||||
return [o isEqual: p];
|
||||
}
|
||||
|
||||
void
|
||||
_NS_non_retained_id_retain (void *table, id <NSObject> o)
|
||||
_NS_non_retained_id_retain(void *table, id <NSObject> o)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
_NS_non_retained_id_release (void *table, id <NSObject> o)
|
||||
_NS_non_retained_id_release(void *table, id <NSObject> o)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *
|
||||
_NS_non_retained_id_describe (void *table, id <NSObject> o)
|
||||
_NS_non_retained_id_describe(void *table, id <NSObject> o)
|
||||
{
|
||||
return [o description];
|
||||
}
|
||||
|
||||
/** For (retainable) objects **/
|
||||
/** For(retainable) objects **/
|
||||
|
||||
unsigned int
|
||||
_NS_id_hash (void *table, id <NSObject> o)
|
||||
_NS_id_hash(void *table, id <NSObject> o)
|
||||
{
|
||||
return [o hash];
|
||||
}
|
||||
|
||||
BOOL
|
||||
_NS_id_is_equal (void *table, id <NSObject> o, id <NSObject> p)
|
||||
_NS_id_is_equal(void *table, id <NSObject> o, id <NSObject> p)
|
||||
{
|
||||
return [o isEqual:p];
|
||||
return [o isEqual: p];
|
||||
}
|
||||
|
||||
void
|
||||
_NS_id_retain (void *table, id <NSObject> o)
|
||||
_NS_id_retain(void *table, id <NSObject> o)
|
||||
{
|
||||
IF_NO_GC(RETAIN(o));
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
_NS_id_release (void *table, id <NSObject> o)
|
||||
_NS_id_release(void *table, id <NSObject> o)
|
||||
{
|
||||
RELEASE(o);
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *
|
||||
_NS_id_describe (void *table, id <NSObject> o)
|
||||
_NS_id_describe(void *table, id <NSObject> o)
|
||||
{
|
||||
return [o description];
|
||||
}
|
||||
|
||||
|
||||
/** For (non-owned) `void *' **/
|
||||
/** For(non-owned) `void *' **/
|
||||
|
||||
unsigned int
|
||||
_NS_non_owned_void_p_hash (void *table, void *p)
|
||||
_NS_non_owned_void_p_hash(void *table, void *p)
|
||||
{
|
||||
return ((unsigned int)p)/4;
|
||||
}
|
||||
|
||||
BOOL
|
||||
_NS_non_owned_void_p_is_equal (void *table, void *p, void *q)
|
||||
_NS_non_owned_void_p_is_equal(void *table, void *p, void *q)
|
||||
{
|
||||
return (p == q) ? YES : NO;
|
||||
}
|
||||
|
||||
void
|
||||
_NS_non_owned_void_p_retain (void *table, void *p)
|
||||
_NS_non_owned_void_p_retain(void *table, void *p)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
_NS_non_owned_void_p_release (void *table, void *p)
|
||||
_NS_non_owned_void_p_release(void *table, void *p)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *
|
||||
_NS_non_owned_void_p_describe (void *table, void *p)
|
||||
_NS_non_owned_void_p_describe(void *table, void *p)
|
||||
{
|
||||
return [NSString stringWithFormat:@"%0x", p];
|
||||
return [NSString stringWithFormat: @"%0x", p];
|
||||
}
|
||||
|
||||
/** For pointers to structures and `int *' **/
|
||||
|
||||
unsigned int
|
||||
_NS_int_p_hash (void *table, int *p)
|
||||
_NS_int_p_hash(void *table, int *p)
|
||||
{
|
||||
return ((unsigned int)p)/4;
|
||||
}
|
||||
|
||||
BOOL
|
||||
_NS_int_p_is_equal (void *table, int *p, int *q)
|
||||
_NS_int_p_is_equal(void *table, int *p, int *q)
|
||||
{
|
||||
return (p == q) ? YES : NO;
|
||||
}
|
||||
|
||||
void
|
||||
_NS_int_p_retain (void *table, int *p)
|
||||
_NS_int_p_retain(void *table, int *p)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
_NS_int_p_release (void *table, int *p)
|
||||
_NS_int_p_release(void *table, int *p)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *
|
||||
_NS_int_p_describe (void *table, int *p)
|
||||
_NS_int_p_describe(void *table, int *p)
|
||||
{
|
||||
/* Is this useful? */
|
||||
return [NSString stringWithFormat:@"%d (%#x)", *p, p];
|
||||
return [NSString stringWithFormat: @"%d(%#x)", *p, p];
|
||||
}
|
||||
|
|
|
@ -615,14 +615,16 @@ failure:
|
|||
|
||||
if ([mgr fileExistsAtPath: path])
|
||||
{
|
||||
att = [[mgr fileAttributesAtPath:path traverseLink:YES] mutableCopy];
|
||||
att = [[mgr fileAttributesAtPath: path
|
||||
traverseLink: YES] mutableCopy];
|
||||
IF_NO_GC(TEST_AUTORELEASE(att));
|
||||
}
|
||||
|
||||
c = rename(thePath, theRealPath);
|
||||
if (c != 0) /* Many things could go wrong, I guess. */
|
||||
{
|
||||
NSLog(@"Rename (%s) failed - %s", thePath, strerror(errno));
|
||||
NSLog(@"Rename ('%s' to '%s') failed - %s",
|
||||
thePath, theRealPath, strerror(errno));
|
||||
goto failure;
|
||||
}
|
||||
|
||||
|
@ -656,6 +658,13 @@ failure:
|
|||
|
||||
/* Just in case the failure action needs to be changed. */
|
||||
failure:
|
||||
/*
|
||||
* Attempt to tidy up by removing temporary file on failure.
|
||||
*/
|
||||
if (useAuxiliaryFile)
|
||||
{
|
||||
unlink(thePath);
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
@ -837,7 +846,6 @@ failure:
|
|||
*(unsigned long*)data = NSSwapBigLongToHost(nl);
|
||||
return;
|
||||
}
|
||||
#ifdef _C_LNG_LNG
|
||||
case _C_LNG_LNG:
|
||||
case _C_ULNG_LNG:
|
||||
{
|
||||
|
@ -849,7 +857,6 @@ failure:
|
|||
*(unsigned long long*)data = NSSwapBigLongLongToHost(nl);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
case _C_FLT:
|
||||
{
|
||||
NSSwappedFloat nf;
|
||||
|
@ -1420,7 +1427,6 @@ failure:
|
|||
[self appendBytes: &nl length: sizeof(unsigned long)];
|
||||
return;
|
||||
}
|
||||
#ifdef _C_LNG_LNG
|
||||
case _C_LNG_LNG:
|
||||
case _C_ULNG_LNG:
|
||||
{
|
||||
|
@ -1430,7 +1436,6 @@ failure:
|
|||
[self appendBytes: &nl length: sizeof(unsigned long long)];
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
case _C_FLT:
|
||||
{
|
||||
NSSwappedFloat nf = NSSwapHostFloatToBig(*(float*)data);
|
||||
|
@ -1903,7 +1908,6 @@ getBytes(void* dst, void* src, unsigned len, unsigned limit, unsigned *pos)
|
|||
*(unsigned long*)data = NSSwapBigLongToHost(nl);
|
||||
return;
|
||||
}
|
||||
#ifdef _C_LNG_LNG
|
||||
case _C_LNG_LNG:
|
||||
case _C_ULNG_LNG:
|
||||
{
|
||||
|
@ -1913,7 +1917,6 @@ getBytes(void* dst, void* src, unsigned len, unsigned limit, unsigned *pos)
|
|||
*(unsigned long long*)data = NSSwapBigLongLongToHost(nl);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
case _C_FLT:
|
||||
{
|
||||
NSSwappedFloat nf;
|
||||
|
@ -2836,7 +2839,6 @@ getBytes(void* dst, void* src, unsigned len, unsigned limit, unsigned *pos)
|
|||
(*appendImp)(self, appendSel, &nl, sizeof(unsigned long));
|
||||
return;
|
||||
}
|
||||
#ifdef _C_LNG_LNG
|
||||
case _C_LNG_LNG:
|
||||
case _C_ULNG_LNG:
|
||||
{
|
||||
|
@ -2846,7 +2848,6 @@ getBytes(void* dst, void* src, unsigned len, unsigned limit, unsigned *pos)
|
|||
(*appendImp)(self, appendSel, &nl, sizeof(unsigned long long));
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
case _C_FLT:
|
||||
{
|
||||
NSSwappedFloat nf = NSSwapHostFloatToBig(*(float*)data);
|
||||
|
|
101
Source/NSDebug.m
101
Source/NSDebug.m
|
@ -1,5 +1,5 @@
|
|||
/* Debugging utilities for GNUStep and OpenStep
|
||||
Copyright (C) 1997,1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997,1999,2000 Free Software Foundation, Inc.
|
||||
|
||||
Written by: Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||
Date: August 1997
|
||||
|
@ -23,6 +23,10 @@
|
|||
|
||||
#include <config.h>
|
||||
#include <Foundation/NSDebug.h>
|
||||
#include <Foundation/NSString.h>
|
||||
#include <Foundation/NSLock.h>
|
||||
#include <Foundation/NSNotificationQueue.h>
|
||||
#include <Foundation/NSThread.h>
|
||||
|
||||
#ifndef HAVE_STRERROR
|
||||
const char*
|
||||
|
@ -53,11 +57,47 @@ static table_entry* the_table = 0;
|
|||
|
||||
static BOOL debug_allocation = NO;
|
||||
|
||||
static NSLock *uniqueLock;
|
||||
|
||||
static const char* _GSDebugAllocationList(BOOL difference);
|
||||
static const char* _GSDebugAllocationListAll();
|
||||
|
||||
@interface GSDebugAlloc : NSObject
|
||||
+ (void) initialize;
|
||||
+ (void) _becomeThreaded: (NSNotification*)notification;
|
||||
@end
|
||||
|
||||
@implementation GSDebugAlloc
|
||||
|
||||
+ (void) initialize
|
||||
{
|
||||
if ([NSThread isMultiThreaded])
|
||||
{
|
||||
[self _becomeThreaded: nil];
|
||||
}
|
||||
else
|
||||
{
|
||||
[[NSNotificationCenter defaultCenter]
|
||||
addObserver: self
|
||||
selector: @selector(_becomeThreaded:)
|
||||
name: NSWillBecomeMultiThreadedNotification
|
||||
object: nil];
|
||||
}
|
||||
}
|
||||
|
||||
+ (void) _becomeThreaded: (NSNotification*)notification
|
||||
{
|
||||
uniqueLock = [NSRecursiveLock new];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
BOOL
|
||||
GSDebugAllocationActive(BOOL active)
|
||||
{
|
||||
BOOL old = debug_allocation;
|
||||
|
||||
[GSDebugAlloc class]; /* Ensure thread support is working */
|
||||
debug_allocation = active;
|
||||
return old;
|
||||
}
|
||||
|
@ -73,11 +113,17 @@ GSDebugAllocationAdd(Class c)
|
|||
{
|
||||
if (the_table[i].class == c)
|
||||
{
|
||||
if (uniqueLock != nil)
|
||||
[uniqueLock lock];
|
||||
the_table[i].count++;
|
||||
the_table[i].total++;
|
||||
if (uniqueLock != nil)
|
||||
[uniqueLock unlock];
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (uniqueLock != nil)
|
||||
[uniqueLock lock];
|
||||
if (num_classes >= table_size)
|
||||
{
|
||||
int more = table_size + 128;
|
||||
|
@ -87,6 +133,8 @@ GSDebugAllocationAdd(Class c)
|
|||
|
||||
if (tmp == 0)
|
||||
{
|
||||
if (uniqueLock != nil)
|
||||
[uniqueLock unlock];
|
||||
return; /* Argh */
|
||||
}
|
||||
if (the_table)
|
||||
|
@ -101,6 +149,8 @@ GSDebugAllocationAdd(Class c)
|
|||
the_table[num_classes].lastc = 0;
|
||||
the_table[num_classes].total = 1;
|
||||
num_classes++;
|
||||
if (uniqueLock != nil)
|
||||
[uniqueLock unlock];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -127,16 +177,28 @@ GSDebugAllocationCount(Class c)
|
|||
*/
|
||||
const char*
|
||||
GSDebugAllocationList(BOOL difference)
|
||||
{
|
||||
const char *ans;
|
||||
if (debug_allocation == NO)
|
||||
{
|
||||
return "Debug allocation system is not active!\n";
|
||||
}
|
||||
if (uniqueLock != nil)
|
||||
[uniqueLock lock];
|
||||
ans = _GSDebugAllocationList(difference);
|
||||
if (uniqueLock != nil)
|
||||
[uniqueLock unlock];
|
||||
return ans;
|
||||
}
|
||||
|
||||
static const char*
|
||||
_GSDebugAllocationList(BOOL difference)
|
||||
{
|
||||
int pos = 0;
|
||||
int i;
|
||||
static int siz = 0;
|
||||
static char *buf = 0;
|
||||
|
||||
if (debug_allocation == NO)
|
||||
{
|
||||
return "Debug allocation system is not active!\n";
|
||||
}
|
||||
for (i = 0; i < num_classes; i++)
|
||||
{
|
||||
int val = the_table[i].count;
|
||||
|
@ -161,6 +223,7 @@ GSDebugAllocationList(BOOL difference)
|
|||
return "I can find NO allocated object!\n";
|
||||
}
|
||||
}
|
||||
|
||||
pos++;
|
||||
|
||||
if (pos > siz)
|
||||
|
@ -192,7 +255,7 @@ GSDebugAllocationList(BOOL difference)
|
|||
|
||||
if (val != 0)
|
||||
{
|
||||
sprintf(&buf[pos], "%s\t%d\n", the_table[i].class->name, val);
|
||||
sprintf(&buf[pos], "%d\t%s\n", val, the_table[i].class->name);
|
||||
pos += strlen(&buf[pos]);
|
||||
}
|
||||
}
|
||||
|
@ -202,16 +265,28 @@ GSDebugAllocationList(BOOL difference)
|
|||
|
||||
const char*
|
||||
GSDebugAllocationListAll()
|
||||
{
|
||||
const char *ans;
|
||||
if (debug_allocation == NO)
|
||||
{
|
||||
return "Debug allocation system is not active!\n";
|
||||
}
|
||||
if (uniqueLock != nil)
|
||||
[uniqueLock lock];
|
||||
ans = _GSDebugAllocationListAll();
|
||||
if (uniqueLock != nil)
|
||||
[uniqueLock unlock];
|
||||
return ans;
|
||||
}
|
||||
|
||||
static const char*
|
||||
_GSDebugAllocationListAll()
|
||||
{
|
||||
int pos = 0;
|
||||
int i;
|
||||
static int siz = 0;
|
||||
static char *buf = 0;
|
||||
|
||||
if (debug_allocation == NO)
|
||||
{
|
||||
return "Debug allocation system is not active!\n";
|
||||
}
|
||||
for (i = 0; i < num_classes; i++)
|
||||
{
|
||||
int val = the_table[i].total;
|
||||
|
@ -250,7 +325,7 @@ GSDebugAllocationListAll()
|
|||
|
||||
if (val != 0)
|
||||
{
|
||||
sprintf(&buf[pos], "%s\t%d\n", the_table[i].class->name, val);
|
||||
sprintf(&buf[pos], "%d\t%s\n", val, the_table[i].class->name);
|
||||
pos += strlen(&buf[pos]);
|
||||
}
|
||||
}
|
||||
|
@ -269,7 +344,11 @@ GSDebugAllocationRemove(Class c)
|
|||
{
|
||||
if (the_table[i].class == c)
|
||||
{
|
||||
if (uniqueLock != nil)
|
||||
[uniqueLock lock];
|
||||
the_table[i].count--;
|
||||
if (uniqueLock != nil)
|
||||
[uniqueLock unlock];
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ static Class NSFileHandle_concrete_class = nil;
|
|||
}
|
||||
}
|
||||
|
||||
+ (void)_setConcreteClass:(Class)c
|
||||
+ (void)_setConcreteClass: (Class)c
|
||||
{
|
||||
NSFileHandle_concrete_class = c;
|
||||
}
|
||||
|
@ -51,29 +51,29 @@ static Class NSFileHandle_concrete_class = nil;
|
|||
return NSFileHandle_concrete_class;
|
||||
}
|
||||
|
||||
+ allocWithZone:(NSZone*)z
|
||||
+ allocWithZone: (NSZone*)z
|
||||
{
|
||||
return NSAllocateObject ([self _concreteClass], 0, z);
|
||||
}
|
||||
|
||||
// Allocating and Initializing a FileHandle Object
|
||||
|
||||
+ (id)fileHandleForReadingAtPath:(NSString*)path
|
||||
+ (id)fileHandleForReadingAtPath: (NSString*)path
|
||||
{
|
||||
return [[[[self _concreteClass] alloc]
|
||||
initForReadingAtPath:path] autorelease];
|
||||
initForReadingAtPath: path] autorelease];
|
||||
}
|
||||
|
||||
+ (id)fileHandleForWritingAtPath:(NSString*)path
|
||||
+ (id)fileHandleForWritingAtPath: (NSString*)path
|
||||
{
|
||||
return [[[[self _concreteClass] alloc]
|
||||
initForWritingAtPath:path] autorelease];
|
||||
initForWritingAtPath: path] autorelease];
|
||||
}
|
||||
|
||||
+ (id)fileHandleForUpdatingAtPath:(NSString*)path
|
||||
+ (id)fileHandleForUpdatingAtPath: (NSString*)path
|
||||
{
|
||||
return [[[[self _concreteClass] alloc]
|
||||
initForUpdatingAtPath:path] autorelease];
|
||||
initForUpdatingAtPath: path] autorelease];
|
||||
}
|
||||
|
||||
+ (id)fileHandleWithStandardError
|
||||
|
@ -100,27 +100,27 @@ static Class NSFileHandle_concrete_class = nil;
|
|||
initWithNullDevice] autorelease];
|
||||
}
|
||||
|
||||
- (id)initWithFileDescriptor:(int)desc
|
||||
- (id)initWithFileDescriptor: (int)desc
|
||||
{
|
||||
return [self initWithFileDescriptor:desc closeOnDealloc:NO];
|
||||
return [self initWithFileDescriptor: desc closeOnDealloc: NO];
|
||||
}
|
||||
|
||||
- (id)initWithFileDescriptor:(int)desc closeOnDealloc:(BOOL)flag
|
||||
- (id)initWithFileDescriptor: (int)desc closeOnDealloc: (BOOL)flag
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (id)initWithNativeHandle:(void*)hdl
|
||||
- (id)initWithNativeHandle: (void*)hdl
|
||||
{
|
||||
return [self initWithNativeHandle:hdl closeOnDealloc:NO];
|
||||
return [self initWithNativeHandle: hdl closeOnDealloc: NO];
|
||||
}
|
||||
|
||||
// This is the designated initializer.
|
||||
|
||||
- (id)initWithNativeHandle:(void*)hdl closeOnDealloc:(BOOL)flag
|
||||
- (id)initWithNativeHandle: (void*)hdl closeOnDealloc: (BOOL)flag
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
return nil;
|
||||
}
|
||||
|
||||
|
@ -128,13 +128,13 @@ static Class NSFileHandle_concrete_class = nil;
|
|||
|
||||
- (int)fileDescriptor
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
return -1;
|
||||
}
|
||||
|
||||
- (void*)nativeHandle
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -142,68 +142,68 @@ static Class NSFileHandle_concrete_class = nil;
|
|||
|
||||
- (NSData*)availableData
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (NSData*)readDataToEndOfFile
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (NSData*)readDataOfLength:(unsigned int)len
|
||||
- (NSData*)readDataOfLength: (unsigned int)len
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (void)writeData:(NSData*)item
|
||||
- (void)writeData: (NSData*)item
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
}
|
||||
|
||||
|
||||
// Asynchronous I/O operations
|
||||
|
||||
- (void)acceptConnectionInBackgroundAndNotifyForModes:(NSArray*)modes
|
||||
- (void)acceptConnectionInBackgroundAndNotifyForModes: (NSArray*)modes
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
}
|
||||
|
||||
- (void)acceptConnectionInBackgroundAndNotify
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
}
|
||||
|
||||
- (void)readInBackgroundAndNotifyForModes:(NSArray*)modes
|
||||
- (void)readInBackgroundAndNotifyForModes: (NSArray*)modes
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
}
|
||||
|
||||
- (void)readInBackgroundAndNotify
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
}
|
||||
|
||||
- (void)readToEndOfFileInBackgroundAndNotifyForModes:(NSArray*)modes
|
||||
- (void)readToEndOfFileInBackgroundAndNotifyForModes: (NSArray*)modes
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
}
|
||||
|
||||
- (void)readToEndOfFileInBackgroundAndNotify
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
}
|
||||
|
||||
- (void)waitForDataInBackgroundAndNotifyForModes:(NSArray*)modes
|
||||
- (void)waitForDataInBackgroundAndNotifyForModes: (NSArray*)modes
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
}
|
||||
|
||||
- (void)waitForDataInBackgroundAndNotify
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
}
|
||||
|
||||
|
||||
|
@ -211,19 +211,19 @@ static Class NSFileHandle_concrete_class = nil;
|
|||
|
||||
- (unsigned long long)offsetInFile
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
return 0;
|
||||
}
|
||||
|
||||
- (unsigned long long)seekToEndOfFile
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
return 0;
|
||||
}
|
||||
|
||||
- (void)seekToFileOffset:(unsigned long long)pos
|
||||
- (void)seekToFileOffset: (unsigned long long)pos
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
}
|
||||
|
||||
|
||||
|
@ -231,17 +231,17 @@ static Class NSFileHandle_concrete_class = nil;
|
|||
|
||||
- (void)closeFile
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
}
|
||||
|
||||
- (void)synchronizeFile
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
}
|
||||
|
||||
- (void)truncateFileAtOffset:(unsigned long long)pos
|
||||
- (void)truncateFileAtOffset: (unsigned long long)pos
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
}
|
||||
|
||||
|
||||
|
@ -277,52 +277,52 @@ NSString* NSFileHandleOperationException =
|
|||
|
||||
@implementation NSFileHandle (GNUstepExtensions)
|
||||
|
||||
+ (id)fileHandleAsClientAtAddress:(NSString*)address
|
||||
service:(NSString*)service
|
||||
protocol:(NSString*)protocol
|
||||
+ (id)fileHandleAsClientAtAddress: (NSString*)address
|
||||
service: (NSString*)service
|
||||
protocol: (NSString*)protocol
|
||||
{
|
||||
return [[[[self _concreteClass] alloc]
|
||||
initAsClientAtAddress:address
|
||||
service:service
|
||||
protocol:protocol] autorelease];
|
||||
initAsClientAtAddress: address
|
||||
service: service
|
||||
protocol: protocol] autorelease];
|
||||
}
|
||||
|
||||
+ (id)fileHandleAsClientInBackgroundAtAddress:(NSString*)address
|
||||
service:(NSString*)service
|
||||
protocol:(NSString*)protocol
|
||||
+ (id)fileHandleAsClientInBackgroundAtAddress: (NSString*)address
|
||||
service: (NSString*)service
|
||||
protocol: (NSString*)protocol
|
||||
{
|
||||
return [[[[self _concreteClass] alloc]
|
||||
initAsClientInBackgroundAtAddress:address
|
||||
service:service
|
||||
protocol:protocol
|
||||
forModes:nil] autorelease];
|
||||
initAsClientInBackgroundAtAddress: address
|
||||
service: service
|
||||
protocol: protocol
|
||||
forModes: nil] autorelease];
|
||||
}
|
||||
|
||||
+ (id)fileHandleAsClientInBackgroundAtAddress:(NSString*)address
|
||||
service:(NSString*)service
|
||||
protocol:(NSString*)protocol
|
||||
forModes:(NSArray*)modes
|
||||
+ (id)fileHandleAsClientInBackgroundAtAddress: (NSString*)address
|
||||
service: (NSString*)service
|
||||
protocol: (NSString*)protocol
|
||||
forModes: (NSArray*)modes
|
||||
{
|
||||
return [[[[self _concreteClass] alloc]
|
||||
initAsClientInBackgroundAtAddress:address
|
||||
service:service
|
||||
protocol:protocol
|
||||
forModes:modes] autorelease];
|
||||
initAsClientInBackgroundAtAddress: address
|
||||
service: service
|
||||
protocol: protocol
|
||||
forModes: modes] autorelease];
|
||||
}
|
||||
|
||||
+ (id)fileHandleAsServerAtAddress:(NSString*)address
|
||||
service:(NSString*)service
|
||||
protocol:(NSString*)protocol
|
||||
+ (id)fileHandleAsServerAtAddress: (NSString*)address
|
||||
service: (NSString*)service
|
||||
protocol: (NSString*)protocol
|
||||
{
|
||||
return [[[[self _concreteClass] alloc]
|
||||
initAsServerAtAddress:address
|
||||
service:service
|
||||
protocol:protocol] autorelease];
|
||||
initAsServerAtAddress: address
|
||||
service: service
|
||||
protocol: protocol] autorelease];
|
||||
}
|
||||
|
||||
- (BOOL)readInProgress
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
@ -341,19 +341,19 @@ NSString* NSFileHandleOperationException =
|
|||
return nil;
|
||||
}
|
||||
|
||||
- (void)writeInBackgroundAndNotify:(NSData*)item forModes:(NSArray*)modes
|
||||
- (void)writeInBackgroundAndNotify: (NSData*)item forModes: (NSArray*)modes
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
}
|
||||
|
||||
- (void)writeInBackgroundAndNotify:(NSData*)item;
|
||||
- (void)writeInBackgroundAndNotify: (NSData*)item;
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
}
|
||||
|
||||
- (BOOL)writeInProgress
|
||||
{
|
||||
[self subclassResponsibility:_cmd];
|
||||
[self subclassResponsibility: _cmd];
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
|
|
@ -910,7 +910,7 @@ static NSNotificationCenter *default_center = nil;
|
|||
/*
|
||||
* If this is a recursive posting of a notification, the array will already
|
||||
* be in use, so we restrict our operation to array indices beyond the end
|
||||
* of those used by the posting that cuased this one.
|
||||
* of those used by the posting that caused this one.
|
||||
*/
|
||||
arrayBase = GSIArrayCount(a);
|
||||
|
||||
|
@ -1053,7 +1053,7 @@ static NSNotificationCenter *default_center = nil;
|
|||
|
||||
/*
|
||||
* Post the notification to all the observers of NAME, except those
|
||||
* observers with a non-nill OBJECT that doesn't match the
|
||||
* observers with a non-nil OBJECT that doesn't match the
|
||||
* notification's OBJECT).
|
||||
*/
|
||||
if (n_name)
|
||||
|
|
|
@ -443,7 +443,7 @@ add_to_queue(NSNotificationQueueList *queue, NSNotification *notification,
|
|||
}
|
||||
|
||||
- (void) enqueueNotification: (NSNotification*)notification
|
||||
postingStyle: (NSPostingStyle)postingStyle
|
||||
postingStyle: (NSPostingStyle)postingStyle
|
||||
{
|
||||
[self enqueueNotification: notification
|
||||
postingStyle: postingStyle
|
||||
|
@ -453,9 +453,9 @@ add_to_queue(NSNotificationQueueList *queue, NSNotification *notification,
|
|||
}
|
||||
|
||||
- (void) enqueueNotification: (NSNotification*)notification
|
||||
postingStyle: (NSPostingStyle)postingStyle
|
||||
coalesceMask: (NSNotificationCoalescing)coalesceMask
|
||||
forModes: (NSArray*)modes
|
||||
postingStyle: (NSPostingStyle)postingStyle
|
||||
coalesceMask: (NSNotificationCoalescing)coalesceMask
|
||||
forModes: (NSArray*)modes
|
||||
{
|
||||
if (coalesceMask != NSNotificationNoCoalescing)
|
||||
[self dequeueNotificationsMatching: notification
|
||||
|
|
|
@ -1011,6 +1011,7 @@ const NSMapTableValueCallBacks ArrayMapValueCallBacks =
|
|||
- (void) acceptInputForMode: (NSString*)mode
|
||||
beforeDate: limit_date
|
||||
{
|
||||
extern BOOL GSCheckTasks();
|
||||
NSTimeInterval ti;
|
||||
struct timeval timeout;
|
||||
void *select_timeout;
|
||||
|
@ -1053,6 +1054,7 @@ const NSMapTableValueCallBacks ArrayMapValueCallBacks =
|
|||
/* The LIMIT_DATE has already past; return immediately without
|
||||
polling any inputs. */
|
||||
[self _checkPerformers];
|
||||
GSNotifyASAP();
|
||||
if (debug_run_loop)
|
||||
printf ("\tNSRunLoop limit date past, returning\n");
|
||||
_current_mode = saved_mode;
|
||||
|
@ -1147,9 +1149,12 @@ const NSMapTableValueCallBacks ArrayMapValueCallBacks =
|
|||
read_fds = fds;
|
||||
exception_fds = fds;
|
||||
|
||||
/* Detect if the NSRunLoop is idle, and if necessary - dispatch the
|
||||
notifications from NSNotificationQueue's idle queue? */
|
||||
if (num_inputs == 0 && GSNotifyMore())
|
||||
/*
|
||||
* If there are notifications in the 'idle' queue, we try an instantaneous
|
||||
* select so that, if there is no input pending, we can service the queue.
|
||||
* Similarly, if a task has completed, we need to deliver it's notifications.
|
||||
*/
|
||||
if (GSCheckTasks() || GSNotifyMore())
|
||||
{
|
||||
timeout.tv_sec = 0;
|
||||
timeout.tv_usec = 0;
|
||||
|
@ -1168,6 +1173,7 @@ const NSMapTableValueCallBacks ArrayMapValueCallBacks =
|
|||
{
|
||||
if (errno == EINTR)
|
||||
{
|
||||
GSCheckTasks();
|
||||
select_return = 0;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -67,31 +67,47 @@ static NSMapTable *activeTasks = 0;
|
|||
|
||||
@implementation NSTask
|
||||
|
||||
static BOOL hadChildSignal = NO;
|
||||
static void handleSignal(int sig)
|
||||
{
|
||||
int result;
|
||||
int status;
|
||||
hadChildSignal = YES;
|
||||
}
|
||||
|
||||
do
|
||||
BOOL
|
||||
GSCheckTasks()
|
||||
{
|
||||
BOOL found = NO;
|
||||
|
||||
if (hadChildSignal)
|
||||
{
|
||||
result = waitpid(-1, &status, WNOHANG);
|
||||
if (result > 0)
|
||||
{
|
||||
if (WIFEXITED(status))
|
||||
{
|
||||
NSTask *t;
|
||||
int result;
|
||||
int status;
|
||||
|
||||
[tasksLock lock];
|
||||
t = (NSTask*)NSMapGet(activeTasks, (void*)result);
|
||||
[tasksLock unlock];
|
||||
if (t)
|
||||
{
|
||||
[t _terminatedChild: WEXITSTATUS(status)];
|
||||
}
|
||||
}
|
||||
}
|
||||
hadChildSignal = NO;
|
||||
|
||||
do
|
||||
{
|
||||
result = waitpid(-1, &status, WNOHANG);
|
||||
if (result > 0)
|
||||
{
|
||||
if (WIFEXITED(status))
|
||||
{
|
||||
NSTask *t;
|
||||
|
||||
[tasksLock lock];
|
||||
t = (NSTask*)NSMapGet(activeTasks, (void*)result);
|
||||
[tasksLock unlock];
|
||||
if (t)
|
||||
{
|
||||
[t _terminatedChild: WEXITSTATUS(status)];
|
||||
found = YES;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
while (result > 0);
|
||||
}
|
||||
while (result > 0);
|
||||
return found;
|
||||
}
|
||||
|
||||
+ (void) initialize
|
||||
|
|
|
@ -64,10 +64,8 @@ typeToName1(char type)
|
|||
case _C_UINT: return "unsigned int";
|
||||
case _C_LNG: return "long";
|
||||
case _C_ULNG: return "unsigned long";
|
||||
#ifdef _C_LNG_LNG
|
||||
case _C_LNG_LNG: return "long long";
|
||||
case _C_ULNG_LNG: return "unsigned long long";
|
||||
#endif
|
||||
case _C_FLT: return "float";
|
||||
case _C_DBL: return "double";
|
||||
case _C_PTR: return "pointer";
|
||||
|
@ -110,10 +108,8 @@ typeToName2(char type)
|
|||
case _GSC_UINT: return "unsigned int";
|
||||
case _GSC_LNG: return "long";
|
||||
case _GSC_ULNG: return "unsigned long";
|
||||
#ifdef _GSC_LNG_LNG
|
||||
case _GSC_LNG_LNG: return "long long";
|
||||
case _GSC_ULNG_LNG: return "unsigned long long";
|
||||
#endif
|
||||
case _GSC_FLT: return "float";
|
||||
case _GSC_DBL: return "double";
|
||||
case _GSC_PTR: return "pointer";
|
||||
|
|
254
Source/NSZone.m
254
Source/NSZone.m
|
@ -154,8 +154,8 @@ struct _nfree_block_struct
|
|||
};
|
||||
|
||||
struct _ffree_block_unpadded {
|
||||
size_t size;
|
||||
struct _ffree_block_struct *next;
|
||||
size_t size;
|
||||
struct _ffree_block_struct *next;
|
||||
};
|
||||
#define FFCPAD sizeof(struct _ffree_block_unpadded)
|
||||
|
||||
|
@ -169,20 +169,20 @@ struct _ffree_block_struct
|
|||
|
||||
struct _ffree_free_link_unpadded
|
||||
{
|
||||
size_t size;
|
||||
ff_link *prev;
|
||||
ff_link *next;
|
||||
size_t back; /* Back link at end of 'dead' block. */
|
||||
size_t size;
|
||||
ff_link *prev;
|
||||
ff_link *next;
|
||||
size_t back; /* Back link at end of 'dead' block. */
|
||||
};
|
||||
#define FFDPAD sizeof(struct _ffree_free_link_unpadded)
|
||||
|
||||
struct _ffree_free_link
|
||||
{
|
||||
size_t size;
|
||||
ff_link *prev;
|
||||
ff_link *next;
|
||||
size_t back;
|
||||
char padding[ALIGN - ((FFDPAD % ALIGN) ? (FFDPAD % ALIGN) : ALIGN)];
|
||||
size_t size;
|
||||
ff_link *prev;
|
||||
ff_link *next;
|
||||
size_t back;
|
||||
char padding[ALIGN - ((FFDPAD % ALIGN) ? (FFDPAD % ALIGN) : ALIGN)];
|
||||
};
|
||||
|
||||
/* NSZone structure for freeable zones. */
|
||||
|
@ -220,123 +220,124 @@ roundupto (size_t n, size_t base)
|
|||
static inline void*
|
||||
chunkToPointer(ff_block *chunk)
|
||||
{
|
||||
return (void*)(&chunk[1]);
|
||||
return (void*)(&chunk[1]);
|
||||
}
|
||||
|
||||
static inline ff_block*
|
||||
pointerToChunk(void* ptr)
|
||||
{
|
||||
return &(((ff_block*)ptr)[-1]);
|
||||
return &(((ff_block*)ptr)[-1]);
|
||||
}
|
||||
|
||||
static inline size_t
|
||||
chunkIsLive(ff_block* ptr)
|
||||
{
|
||||
return ptr->size & LIVE;
|
||||
return ptr->size & LIVE;
|
||||
}
|
||||
|
||||
static inline size_t
|
||||
chunkIsInUse(ff_block* ptr)
|
||||
{
|
||||
return ptr->size & INUSE;
|
||||
return ptr->size & INUSE;
|
||||
}
|
||||
|
||||
static inline size_t
|
||||
chunkIsPrevInUse(ff_block* ptr)
|
||||
{
|
||||
return ptr->size & PREVUSE;
|
||||
return ptr->size & PREVUSE;
|
||||
}
|
||||
|
||||
static inline size_t
|
||||
chunkSize(ff_block* ptr)
|
||||
{
|
||||
return ptr->size & ~SIZE_BITS;
|
||||
return ptr->size & ~SIZE_BITS;
|
||||
}
|
||||
|
||||
static inline void
|
||||
chunkClrInUse(ff_block* ptr)
|
||||
{
|
||||
ptr->size &= ~INUSE;
|
||||
ptr->size &= ~INUSE;
|
||||
}
|
||||
|
||||
static inline size_t
|
||||
chunkClrLive(ff_block* ptr)
|
||||
{
|
||||
return ptr->size &= ~LIVE;
|
||||
return ptr->size &= ~LIVE;
|
||||
}
|
||||
|
||||
static inline void
|
||||
chunkClrPrevInUse(ff_block* ptr)
|
||||
{
|
||||
ptr->size &= ~PREVUSE;
|
||||
ptr->size &= ~PREVUSE;
|
||||
}
|
||||
|
||||
static inline void
|
||||
chunkSetInUse(ff_block* ptr)
|
||||
{
|
||||
ptr->size |= INUSE;
|
||||
ptr->size |= INUSE;
|
||||
}
|
||||
|
||||
static inline size_t
|
||||
chunkSetLive(ff_block* ptr)
|
||||
{
|
||||
return ptr->size |= LIVE;
|
||||
return ptr->size |= LIVE;
|
||||
}
|
||||
|
||||
static inline void
|
||||
chunkSetPrevInUse(ff_block* ptr)
|
||||
{
|
||||
ptr->size |= PREVUSE;
|
||||
ptr->size |= PREVUSE;
|
||||
}
|
||||
|
||||
static inline void
|
||||
chunkSetSize(ff_block* ptr, size_t size)
|
||||
{
|
||||
ptr->size = size;
|
||||
ptr->size = size;
|
||||
}
|
||||
|
||||
static inline ff_block*
|
||||
chunkNext(ff_block *ptr)
|
||||
{
|
||||
return (ff_block*) ((void*)ptr+chunkSize(ptr));
|
||||
return (ff_block*) ((void*)ptr+chunkSize(ptr));
|
||||
}
|
||||
|
||||
static inline void
|
||||
chunkMakeLink(ff_block *ptr)
|
||||
{
|
||||
NSAssert(!chunkIsInUse(ptr), NSInternalInconsistencyException);
|
||||
NSAssert(!chunkIsLive(ptr), NSInternalInconsistencyException);
|
||||
(&(chunkNext(ptr)->size))[-1] = chunkSize(ptr);
|
||||
NSAssert(!chunkIsInUse(ptr), NSInternalInconsistencyException);
|
||||
NSAssert(!chunkIsLive(ptr), NSInternalInconsistencyException);
|
||||
(&(chunkNext(ptr)->size))[-1] = chunkSize(ptr);
|
||||
}
|
||||
|
||||
static inline ff_block*
|
||||
chunkChop(ff_block *ptr, size_t size)
|
||||
{
|
||||
ff_block *remainder;
|
||||
size_t left = chunkSize(ptr)-size;
|
||||
ff_block *remainder;
|
||||
size_t left = chunkSize(ptr)-size;
|
||||
|
||||
NSAssert((chunkSize(ptr) % MINCHUNK) == 0, NSInternalInconsistencyException);
|
||||
NSAssert(chunkSize(ptr) > size, NSInternalInconsistencyException);
|
||||
remainder = (ff_block*)((void*)ptr+size);
|
||||
chunkSetSize(remainder, left | PREVUSE);
|
||||
chunkMakeLink(remainder);
|
||||
chunkSetSize(ptr, size | chunkIsPrevInUse(ptr) | INUSE);
|
||||
return remainder;
|
||||
NSAssert((chunkSize(ptr) % MINCHUNK) == 0, NSInternalInconsistencyException);
|
||||
NSAssert(chunkSize(ptr) > size, NSInternalInconsistencyException);
|
||||
remainder = (ff_block*)((void*)ptr+size);
|
||||
chunkSetSize(remainder, left | PREVUSE);
|
||||
chunkMakeLink(remainder);
|
||||
chunkSetSize(ptr, size | chunkIsPrevInUse(ptr) | INUSE);
|
||||
return remainder;
|
||||
}
|
||||
|
||||
static inline ff_block*
|
||||
chunkPrev(ff_block *ptr)
|
||||
{
|
||||
size_t offset;
|
||||
ff_block *prev;
|
||||
size_t offset;
|
||||
ff_block *prev;
|
||||
|
||||
NSAssert(!chunkIsPrevInUse(ptr), NSInternalInconsistencyException);
|
||||
offset = (&(ptr->size))[-1];
|
||||
NSAssert(offset > 0 && (offset % MINCHUNK) == 0, NSInternalInconsistencyException);
|
||||
prev = (ff_block*)((void*)ptr-offset);
|
||||
NSAssert(chunkSize(prev) == offset, NSInternalInconsistencyException);
|
||||
NSAssert(!chunkIsInUse(prev), NSInternalInconsistencyException);
|
||||
return prev;
|
||||
NSAssert(!chunkIsPrevInUse(ptr), NSInternalInconsistencyException);
|
||||
offset = (&(ptr->size))[-1];
|
||||
NSAssert(offset > 0 && (offset % MINCHUNK) == 0,
|
||||
NSInternalInconsistencyException);
|
||||
prev = (ff_block*)((void*)ptr-offset);
|
||||
NSAssert(chunkSize(prev) == offset, NSInternalInconsistencyException);
|
||||
NSAssert(!chunkIsInUse(prev), NSInternalInconsistencyException);
|
||||
return prev;
|
||||
}
|
||||
|
||||
/* NSZone structure for nonfreeable zones. */
|
||||
|
@ -412,21 +413,23 @@ static NSZone *zone_list = 0;
|
|||
inline NSZone*
|
||||
NSZoneFromPointer(void *ptr)
|
||||
{
|
||||
NSZone *zone;
|
||||
NSZone *zone;
|
||||
|
||||
if (ptr == 0) return 0;
|
||||
if (ptr == 0) return 0;
|
||||
|
||||
/*
|
||||
* See if we can find the zone in our list of all zones.
|
||||
*/
|
||||
[gnustep_global_lock lock];
|
||||
for (zone = zone_list; zone != 0; zone = zone->next) {
|
||||
if ((zone->lookup)(zone, ptr) == YES) {
|
||||
break;
|
||||
/*
|
||||
* See if we can find the zone in our list of all zones.
|
||||
*/
|
||||
[gnustep_global_lock lock];
|
||||
for (zone = zone_list; zone != 0; zone = zone->next)
|
||||
{
|
||||
if ((zone->lookup)(zone, ptr) == YES)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
[gnustep_global_lock unlock];
|
||||
return (zone == 0) ? __nszone_private_hidden_default_zone : zone;
|
||||
[gnustep_global_lock unlock];
|
||||
return (zone == 0) ? __nszone_private_hidden_default_zone : zone;
|
||||
}
|
||||
|
||||
static inline void
|
||||
|
@ -463,17 +466,19 @@ default_realloc (NSZone *zone, void *ptr, size_t size)
|
|||
{
|
||||
void *mem;
|
||||
|
||||
if (size == 0) {
|
||||
objc_free(ptr);
|
||||
return NULL;
|
||||
}
|
||||
if (ptr == 0) {
|
||||
mem = objc_malloc(size);
|
||||
if (mem == NULL)
|
||||
[NSException raise: NSMallocException
|
||||
format: @"Default zone has run out of memory"];
|
||||
return mem;
|
||||
}
|
||||
if (size == 0)
|
||||
{
|
||||
objc_free(ptr);
|
||||
return NULL;
|
||||
}
|
||||
if (ptr == 0)
|
||||
{
|
||||
mem = objc_malloc(size);
|
||||
if (mem == NULL)
|
||||
[NSException raise: NSMallocException
|
||||
format: @"Default zone has run out of memory"];
|
||||
return mem;
|
||||
}
|
||||
mem = objc_realloc(ptr, size);
|
||||
if (mem == NULL)
|
||||
[NSException raise: NSMallocException
|
||||
|
@ -492,7 +497,7 @@ default_recycle (NSZone *zone)
|
|||
{
|
||||
/* Recycle the default zone? Thou hast got to be kiddin'. */
|
||||
[NSException raise: NSGenericException
|
||||
format: @"Trying to recycle default zone"];
|
||||
format: @"Trying to recycle default zone"];
|
||||
}
|
||||
|
||||
static BOOL
|
||||
|
@ -500,7 +505,7 @@ default_check (NSZone *zone)
|
|||
{
|
||||
/* We can't check memory managed by objc_malloc(). */
|
||||
[NSException raise: NSGenericException
|
||||
format: @"No checking for default zone"];
|
||||
format: @"No checking for default zone"];
|
||||
return NO;
|
||||
}
|
||||
|
||||
|
@ -518,7 +523,7 @@ default_stats (NSZone *zone)
|
|||
|
||||
/* We can't obtain statistics from the memory managed by objc_malloc(). */
|
||||
[NSException raise: NSGenericException
|
||||
format: @"No statistics for default zone"];
|
||||
format: @"No statistics for default zone"];
|
||||
return dummy;
|
||||
}
|
||||
|
||||
|
@ -559,7 +564,8 @@ fmalloc (NSZone *zone, size_t size)
|
|||
ptr_buf[i] = ptr_buf[bufsize];
|
||||
|
||||
NSAssert(chunkIsInUse(chunkhead), NSInternalInconsistencyException);
|
||||
NSAssert((chunkSize(chunkhead) % MINCHUNK) == 0, NSInternalInconsistencyException);
|
||||
NSAssert((chunkSize(chunkhead) % MINCHUNK) == 0,
|
||||
NSInternalInconsistencyException);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -583,16 +589,18 @@ fmalloc (NSZone *zone, size_t size)
|
|||
objc_mutex_unlock(zptr->lock);
|
||||
if (zone->name != nil)
|
||||
[NSException raise: NSMallocException
|
||||
format: @"Zone %s has run out of memory",
|
||||
format: @"Zone %s has run out of memory",
|
||||
[zone->name cString]];
|
||||
else
|
||||
[NSException raise: NSMallocException
|
||||
format: @"Out of memory"];
|
||||
format: @"Out of memory"];
|
||||
}
|
||||
|
||||
NSAssert(chunkIsInUse(chunkhead), NSInternalInconsistencyException);
|
||||
NSAssert(chunkIsPrevInUse(chunkNext(chunkhead)), NSInternalInconsistencyException);
|
||||
NSAssert((chunkSize(chunkhead) % MINCHUNK) == 0, NSInternalInconsistencyException);
|
||||
NSAssert(chunkIsPrevInUse(chunkNext(chunkhead)),
|
||||
NSInternalInconsistencyException);
|
||||
NSAssert((chunkSize(chunkhead) % MINCHUNK) == 0,
|
||||
NSInternalInconsistencyException);
|
||||
}
|
||||
chunkhead->next = (ff_block*)(chunkToPointer(chunkhead)+size);
|
||||
*((char*)chunkhead->next) = (char)42;
|
||||
|
@ -617,7 +625,8 @@ frealloc (NSZone *zone, void *ptr, size_t size)
|
|||
ff_block *chunkhead, *slack;
|
||||
void *result;
|
||||
|
||||
NSAssert(ptr == NULL || NSZoneFromPointer(ptr) == zone, NSInternalInconsistencyException);
|
||||
NSAssert(ptr == NULL || NSZoneFromPointer(ptr) == zone,
|
||||
NSInternalInconsistencyException);
|
||||
if (ptr == NULL)
|
||||
return fmalloc(zone, size);
|
||||
chunkhead = pointerToChunk(ptr);
|
||||
|
@ -680,11 +689,11 @@ frealloc (NSZone *zone, void *ptr, size_t size)
|
|||
objc_mutex_unlock(zptr->lock);
|
||||
if (zone->name != nil)
|
||||
[NSException raise: NSMallocException
|
||||
format: @"Zone %s has run out of memory",
|
||||
format: @"Zone %s has run out of memory",
|
||||
[zone->name cString]];
|
||||
else
|
||||
[NSException raise: NSMallocException
|
||||
format: @"Out of memory"];
|
||||
format: @"Out of memory"];
|
||||
}
|
||||
memcpy((void*)(&newchunk[1]), (void*)(&chunkhead[1]), realsize-FBSZ);
|
||||
add_buf(zptr, chunkhead);
|
||||
|
@ -900,19 +909,21 @@ inconsistent: // Jump here if an inconsistency was found.
|
|||
static BOOL
|
||||
flookup (NSZone *zone, void *ptr)
|
||||
{
|
||||
ffree_zone *zptr = (ffree_zone*)zone;
|
||||
ff_block *block;
|
||||
BOOL found = NO;
|
||||
|
||||
objc_mutex_lock(zptr->lock);
|
||||
for (block = zptr->blocks; block != NULL; block = block->next) {
|
||||
if (ptr >= (void*)block && ptr < (void*)chunkNext(block)) {
|
||||
found = YES;
|
||||
break;
|
||||
ffree_zone *zptr = (ffree_zone*)zone;
|
||||
ff_block *block;
|
||||
BOOL found = NO;
|
||||
|
||||
objc_mutex_lock(zptr->lock);
|
||||
for (block = zptr->blocks; block != NULL; block = block->next)
|
||||
{
|
||||
if (ptr >= (void*)block && ptr < (void*)chunkNext(block))
|
||||
{
|
||||
found = YES;
|
||||
break;
|
||||
}
|
||||
}
|
||||
objc_mutex_unlock(zptr->lock);
|
||||
return found;
|
||||
objc_mutex_unlock(zptr->lock);
|
||||
return found;
|
||||
}
|
||||
|
||||
/* Obtain statistics about the zone. Doesn't have to be particularly
|
||||
|
@ -1071,7 +1082,8 @@ get_chunk (ffree_zone *zone, size_t size)
|
|||
|
||||
NSAssert(!chunkIsInUse(chunk), NSInternalInconsistencyException);
|
||||
NSAssert(size < chunkSize(chunk), NSInternalInconsistencyException);
|
||||
NSAssert((chunkSize(chunk) % MINCHUNK) == 0, NSInternalInconsistencyException);
|
||||
NSAssert((chunkSize(chunk) % MINCHUNK) == 0,
|
||||
NSInternalInconsistencyException);
|
||||
|
||||
take_chunk(zone, chunk);
|
||||
slack = chunkChop(chunk, size);
|
||||
|
@ -1088,7 +1100,8 @@ get_chunk (ffree_zone *zone, size_t size)
|
|||
NSAssert((chunksize % MINCHUNK) == 0, NSInternalInconsistencyException);
|
||||
NSAssert(!chunkIsInUse(chunk), NSInternalInconsistencyException);
|
||||
NSAssert(chunkIsPrevInUse(chunk), NSInternalInconsistencyException);
|
||||
NSAssert(chunkIsInUse(chunkNext(chunk)), NSInternalInconsistencyException);
|
||||
NSAssert(chunkIsInUse(chunkNext(chunk)),
|
||||
NSInternalInconsistencyException);
|
||||
|
||||
take_chunk(zone, chunk);
|
||||
if (chunksize > size)
|
||||
|
@ -1103,14 +1116,16 @@ get_chunk (ffree_zone *zone, size_t size)
|
|||
ff_block *nextchunk = chunkNext(chunk);
|
||||
|
||||
NSAssert(!chunkIsInUse(chunk), NSInternalInconsistencyException);
|
||||
NSAssert(!chunkIsPrevInUse(nextchunk), NSInternalInconsistencyException);
|
||||
NSAssert(!chunkIsPrevInUse(nextchunk),
|
||||
NSInternalInconsistencyException);
|
||||
NSAssert(chunksize == size, NSInternalInconsistencyException);
|
||||
chunkSetInUse(chunk);
|
||||
chunkSetPrevInUse(nextchunk);
|
||||
}
|
||||
}
|
||||
NSAssert(chunkIsInUse(chunk), NSInternalInconsistencyException);
|
||||
NSAssert(chunkIsPrevInUse(chunkNext(chunk)), NSInternalInconsistencyException);
|
||||
NSAssert(chunkIsPrevInUse(chunkNext(chunk)),
|
||||
NSInternalInconsistencyException);
|
||||
return chunk;
|
||||
}
|
||||
|
||||
|
@ -1156,7 +1171,8 @@ put_chunk (ffree_zone *zone, ff_block *chunk)
|
|||
size_t class = segindex(size);
|
||||
ff_link *links = (ff_link*)chunk;
|
||||
|
||||
NSAssert((chunkSize(chunk) % MINCHUNK) == 0, NSInternalInconsistencyException);
|
||||
NSAssert((chunkSize(chunk) % MINCHUNK) == 0,
|
||||
NSInternalInconsistencyException);
|
||||
NSAssert(!chunkIsInUse(chunk), NSInternalInconsistencyException);
|
||||
NSAssert(chunkIsPrevInUse(chunk), NSInternalInconsistencyException);
|
||||
NSAssert(chunkIsInUse(chunkNext(chunk)), NSInternalInconsistencyException);
|
||||
|
@ -1164,7 +1180,8 @@ put_chunk (ffree_zone *zone, ff_block *chunk)
|
|||
chunkMakeLink(chunk);
|
||||
if (zone->segtaillist[class] == NULL)
|
||||
{
|
||||
NSAssert(zone->segheadlist[class] == NULL, NSInternalInconsistencyException);
|
||||
NSAssert(zone->segheadlist[class] == NULL,
|
||||
NSInternalInconsistencyException);
|
||||
|
||||
zone->segheadlist[class] = zone->segtaillist[class] = links;
|
||||
links->prev = links->next = NULL;
|
||||
|
@ -1173,7 +1190,8 @@ put_chunk (ffree_zone *zone, ff_block *chunk)
|
|||
{
|
||||
ff_link *prevlink = zone->segtaillist[class];
|
||||
|
||||
NSAssert(zone->segheadlist[class] != NULL, NSInternalInconsistencyException);
|
||||
NSAssert(zone->segheadlist[class] != NULL,
|
||||
NSInternalInconsistencyException);
|
||||
|
||||
links->next = NULL;
|
||||
links->prev = prevlink;
|
||||
|
@ -1192,7 +1210,8 @@ add_buf (ffree_zone *zone, ff_block *chunk)
|
|||
|
||||
NSAssert(bufsize < BUFFER, NSInternalInconsistencyException);
|
||||
NSAssert(chunkIsInUse(chunk), NSInternalInconsistencyException);
|
||||
NSAssert((chunkSize(chunk) % MINCHUNK) == 0, NSInternalInconsistencyException);
|
||||
NSAssert((chunkSize(chunk) % MINCHUNK) == 0,
|
||||
NSInternalInconsistencyException);
|
||||
NSAssert(chunkSize(chunk) >= MINCHUNK, NSInternalInconsistencyException);
|
||||
|
||||
zone->bufsize++;
|
||||
|
@ -1238,8 +1257,10 @@ flush_buf (ffree_zone *zone)
|
|||
{
|
||||
size_t nextsize = chunkSize(nextchunk);
|
||||
|
||||
NSAssert(chunkIsPrevInUse(nextchunk), NSInternalInconsistencyException);
|
||||
NSAssert((nextsize % MINCHUNK) == 0, NSInternalInconsistencyException);
|
||||
NSAssert(chunkIsPrevInUse(nextchunk),
|
||||
NSInternalInconsistencyException);
|
||||
NSAssert((nextsize % MINCHUNK) == 0,
|
||||
NSInternalInconsistencyException);
|
||||
size += nextsize;
|
||||
take_chunk(zone, nextchunk);
|
||||
nextchunk = chunkNext(nextchunk);
|
||||
|
@ -1249,7 +1270,8 @@ flush_buf (ffree_zone *zone)
|
|||
chunkClrPrevInUse(nextchunk);
|
||||
NSAssert(chunkNext(chunk) == nextchunk, NSInternalInconsistencyException);
|
||||
NSAssert(chunkPrev(nextchunk) == chunk, NSInternalInconsistencyException);
|
||||
NSAssert((chunkSize(chunk) % MINCHUNK) == 0, NSInternalInconsistencyException);
|
||||
NSAssert((chunkSize(chunk) % MINCHUNK) == 0,
|
||||
NSInternalInconsistencyException);
|
||||
NSAssert(!chunkIsInUse(chunk), NSInternalInconsistencyException);
|
||||
NSAssert(chunkIsPrevInUse(chunk), NSInternalInconsistencyException);
|
||||
NSAssert(chunkIsInUse(nextchunk), NSInternalInconsistencyException);
|
||||
|
@ -1291,7 +1313,7 @@ nmalloc (NSZone *zone, size_t size)
|
|||
/* First, get the block list in decreasing free size order. */
|
||||
preblock = NULL;
|
||||
while ((block->next != NULL)
|
||||
&& (freesize < block->next->size-block->next->top))
|
||||
&& (freesize < block->next->size-block->next->top))
|
||||
{
|
||||
preblock = block;
|
||||
block = block->next;
|
||||
|
@ -1313,11 +1335,11 @@ nmalloc (NSZone *zone, size_t size)
|
|||
objc_mutex_unlock(zptr->lock);
|
||||
if (zone->name != nil)
|
||||
[NSException raise: NSMallocException
|
||||
format: @"Zone %s has run out of memory",
|
||||
format: @"Zone %s has run out of memory",
|
||||
[zone->name cString]];
|
||||
else
|
||||
[NSException raise: NSMallocException
|
||||
format: @"Out of memory"];
|
||||
format: @"Out of memory"];
|
||||
}
|
||||
block->next = zptr->blocks;
|
||||
block->size = blocksize;
|
||||
|
@ -1476,19 +1498,21 @@ ncheck (NSZone *zone)
|
|||
static BOOL
|
||||
nlookup (NSZone *zone, void *ptr)
|
||||
{
|
||||
nfree_zone *zptr = (nfree_zone*)zone;
|
||||
nf_block *block;
|
||||
BOOL found = NO;
|
||||
|
||||
objc_mutex_lock(zptr->lock);
|
||||
for (block = zptr->blocks; block != NULL; block = block->next) {
|
||||
if (ptr >= (void*)block && ptr < ((void*)block)+block->size) {
|
||||
found = YES;
|
||||
break;
|
||||
nfree_zone *zptr = (nfree_zone*)zone;
|
||||
nf_block *block;
|
||||
BOOL found = NO;
|
||||
|
||||
objc_mutex_lock(zptr->lock);
|
||||
for (block = zptr->blocks; block != NULL; block = block->next)
|
||||
{
|
||||
if (ptr >= (void*)block && ptr < ((void*)block)+block->size)
|
||||
{
|
||||
found = YES;
|
||||
break;
|
||||
}
|
||||
}
|
||||
objc_mutex_unlock(zptr->lock);
|
||||
return found;
|
||||
objc_mutex_unlock(zptr->lock);
|
||||
return found;
|
||||
}
|
||||
|
||||
/* Return statistics for a nonfreeable zone. Doesn't have to
|
||||
|
|
|
@ -1224,7 +1224,8 @@ getAddr(NSString* name, NSString* svc, NSString* pcl, struct sockaddr_in *sin)
|
|||
struct sockaddr_in sin;
|
||||
int size = sizeof(sin);
|
||||
|
||||
h = [[UnixFileHandle alloc] initWithFileDescriptor: desc];
|
||||
h = [[UnixFileHandle alloc] initWithFileDescriptor: desc
|
||||
closeOnDealloc: YES];
|
||||
getpeername(desc, (struct sockaddr*)&sin, &size);
|
||||
[h setAddr: &sin];
|
||||
[readInfo setObject: h
|
||||
|
|
|
@ -291,7 +291,6 @@ mframe_next_arg(const char *typePtr, NSArgumentInfo *info)
|
|||
info->align = __alignof__(unsigned long);
|
||||
break;
|
||||
|
||||
#ifdef _C_LNG_LNG
|
||||
case _C_LNG_LNG:
|
||||
info->size = sizeof(long long);
|
||||
info->align = __alignof__(long long);
|
||||
|
@ -302,7 +301,6 @@ mframe_next_arg(const char *typePtr, NSArgumentInfo *info)
|
|||
info->align = __alignof__(unsigned long long);
|
||||
break;
|
||||
|
||||
#endif
|
||||
case _C_FLT:
|
||||
info->size = sizeof(float);
|
||||
info->align = __alignof__(float);
|
||||
|
@ -1653,7 +1651,6 @@ mframe_decode_return (const char *type, void* buffer, void* retframe)
|
|||
break;
|
||||
}
|
||||
|
||||
#ifdef _C_LNG_LNG
|
||||
case _C_LNG_LNG:
|
||||
case _C_ULNG_LNG:
|
||||
{
|
||||
|
@ -1664,7 +1661,6 @@ mframe_decode_return (const char *type, void* buffer, void* retframe)
|
|||
*(unsigned long long*)buffer = retframe_longlong(retframe);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
case _C_FLT:
|
||||
{
|
||||
|
|
|
@ -756,57 +756,54 @@ init_iface()
|
|||
final = (struct ifreq*)&ifc.ifc_buf[ifc.ifc_len];
|
||||
for (ifr = ifc.ifc_req; ifr < final; ifr++)
|
||||
{
|
||||
if (ifr->ifr_addr.sa_family == AF_INET)
|
||||
{ /* IP interface */
|
||||
ifreq = *ifr;
|
||||
if (ioctl(desc, SIOCGIFFLAGS, (char *)&ifreq) < 0)
|
||||
{
|
||||
perror("SIOCGIFFLAGS");
|
||||
}
|
||||
else if (ifreq.ifr_flags & IFF_UP)
|
||||
{ /* active interface */
|
||||
if (ioctl(desc, SIOCGIFADDR, (char *)&ifreq) < 0)
|
||||
{
|
||||
perror("SIOCGIFADDR");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (interfaces >= MAX_IFACE)
|
||||
{
|
||||
fprintf(stderr,
|
||||
ifreq = *ifr;
|
||||
if (ioctl(desc, SIOCGIFFLAGS, (char *)&ifreq) < 0)
|
||||
{
|
||||
perror("SIOCGIFFLAGS");
|
||||
}
|
||||
else if (ifreq.ifr_flags & IFF_UP)
|
||||
{ /* interface is up */
|
||||
if (ioctl(desc, SIOCGIFADDR, (char *)&ifreq) < 0)
|
||||
{
|
||||
perror("SIOCGIFADDR");
|
||||
}
|
||||
else if (ifreq.ifr_addr.sa_family == AF_INET)
|
||||
{ /* IP interface */
|
||||
if (interfaces >= MAX_IFACE)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"You have too many network interfaces on your machine (in which case you need\n"
|
||||
"to change the 'MAX_IFACE' constant in gdomap.c and rebuild it), or your\n"
|
||||
"system is buggy, and you need to use the '-a' command line flag for\n"
|
||||
"gdomap to manually set the interface addresses and masks to be used.\n");
|
||||
close(desc);
|
||||
exit(1);
|
||||
}
|
||||
addr[interfaces] =
|
||||
((struct sockaddr_in *)&ifreq.ifr_addr)->sin_addr;
|
||||
if (ioctl(desc, SIOCGIFNETMASK, (char *)&ifreq) < 0)
|
||||
{
|
||||
perror("SIOCGIFNETMASK");
|
||||
/*
|
||||
* If we can't get a netmask - assume a class-c
|
||||
* network.
|
||||
*/
|
||||
mask[interfaces] = class_c_mask;
|
||||
}
|
||||
else
|
||||
{
|
||||
close(desc);
|
||||
exit(1);
|
||||
}
|
||||
addr[interfaces] =
|
||||
((struct sockaddr_in *)&ifreq.ifr_addr)->sin_addr;
|
||||
if (ioctl(desc, SIOCGIFNETMASK, (char *)&ifreq) < 0)
|
||||
{
|
||||
perror("SIOCGIFNETMASK");
|
||||
/*
|
||||
* If we can't get a netmask - assume a class-c
|
||||
* network.
|
||||
*/
|
||||
mask[interfaces] = class_c_mask;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Some systems don't have ifr_netmask
|
||||
*/
|
||||
#ifdef ifr_netmask
|
||||
mask[interfaces] =
|
||||
((struct sockaddr_in *)&ifreq.ifr_netmask)->sin_addr;
|
||||
mask[interfaces] =
|
||||
((struct sockaddr_in *)&ifreq.ifr_netmask)->sin_addr;
|
||||
#else
|
||||
mask[interfaces] =
|
||||
((struct sockaddr_in *)&ifreq.ifr_addr)->sin_addr;
|
||||
mask[interfaces] =
|
||||
((struct sockaddr_in *)&ifreq.ifr_addr)->sin_addr;
|
||||
#endif
|
||||
}
|
||||
interfaces++;
|
||||
}
|
||||
}
|
||||
interfaces++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
2
Version
2
Version
|
@ -7,7 +7,7 @@ GCC_VERSION=2.8.0
|
|||
# The version number of this release.
|
||||
MAJOR_VERSION=0
|
||||
MINOR_VERSION=6
|
||||
SUBMINOR_VERSION=0
|
||||
SUBMINOR_VERSION=5
|
||||
GNUSTEP_BASE_VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${SUBMINOR_VERSION}
|
||||
VERSION=${GNUSTEP_BASE_VERSION}
|
||||
|
||||
|
|
114
config.guess
vendored
114
config.guess
vendored
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# Attempt to guess a canonical system name.
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify it
|
||||
|
@ -23,8 +23,7 @@
|
|||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Written by Per Bothner <bothner@cygnus.com>.
|
||||
# The master version of this file is at the FSF in /home/gd/gnu/lib.
|
||||
# Please send patches to the Autoconf mailing list <autoconf@gnu.org>.
|
||||
# Please send patches to <config-patches@gnu.org>.
|
||||
#
|
||||
# This script attempts to guess a canonical system name similar to
|
||||
# config.sub. If it succeeds, it prints the system name on stdout, and
|
||||
|
@ -156,6 +155,9 @@ EOF
|
|||
wgrisc:OpenBSD:*:*)
|
||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:OS/390:*:*)
|
||||
echo i370-ibm-openedition
|
||||
exit 0 ;;
|
||||
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
||||
echo arm-acorn-riscix${UNAME_RELEASE}
|
||||
exit 0;;
|
||||
|
@ -289,6 +291,7 @@ EOF
|
|||
mips:*:*:UMIPS | mips:*:*:RISCos)
|
||||
sed 's/^ //' << EOF >$dummy.c
|
||||
#ifdef __cplusplus
|
||||
#include <stdio.h> /* for printf() prototype */
|
||||
int main (int argc, char *argv[]) {
|
||||
#else
|
||||
int main (argc, argv) int argc; char *argv[]; {
|
||||
|
@ -328,15 +331,18 @@ EOF
|
|||
AViiON:dgux:*:*)
|
||||
# DG/UX returns AViiON for all architectures
|
||||
UNAME_PROCESSOR=`/usr/bin/uname -p`
|
||||
if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
|
||||
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
|
||||
-o ${TARGET_BINARY_INTERFACE}x = x ] ; then
|
||||
if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110]
|
||||
then
|
||||
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
|
||||
[ ${TARGET_BINARY_INTERFACE}x = x ]
|
||||
then
|
||||
echo m88k-dg-dgux${UNAME_RELEASE}
|
||||
else
|
||||
else
|
||||
echo m88k-dg-dguxbcs${UNAME_RELEASE}
|
||||
fi
|
||||
else
|
||||
echo i586-dg-dgux${UNAME_RELEASE}
|
||||
fi
|
||||
else echo i586-dg-dgux${UNAME_RELEASE}
|
||||
fi
|
||||
exit 0 ;;
|
||||
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
|
||||
echo m88k-dolphin-sysv3
|
||||
|
@ -453,7 +459,7 @@ EOF
|
|||
exit (0);
|
||||
}
|
||||
EOF
|
||||
($CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
|
||||
(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
|
||||
rm -f $dummy.c $dummy
|
||||
esac
|
||||
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
||||
|
@ -547,10 +553,13 @@ EOF
|
|||
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
|
||||
exit 0 ;;
|
||||
CRAY*TS:*:*:*)
|
||||
echo t90-cray-unicos${UNAME_RELEASE}
|
||||
echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||
exit 0 ;;
|
||||
CRAY*T3E:*:*:*)
|
||||
echo t3e-cray-unicosmk${UNAME_RELEASE}
|
||||
echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||
exit 0 ;;
|
||||
CRAY*SV1:*:*:*)
|
||||
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||
exit 0 ;;
|
||||
CRAY-2:*:*:*)
|
||||
echo cray2-cray-unicos
|
||||
|
@ -588,7 +597,7 @@ EOF
|
|||
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
||||
exit 0 ;;
|
||||
*:NetBSD:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||
echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
|
||||
exit 0 ;;
|
||||
*:OpenBSD:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||
|
@ -617,16 +626,7 @@ EOF
|
|||
*:GNU:*:*)
|
||||
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||
exit 0 ;;
|
||||
armv4l:[lL]inux:*:*)
|
||||
echo arm-unknown-linux-gnuelf
|
||||
exit 0;;
|
||||
*:Linux:*:*)
|
||||
# uname on the ARM produces all sorts of strangeness, and we need to
|
||||
# filter it out.
|
||||
case "$UNAME_MACHINE" in
|
||||
armv*) UNAME_MACHINE=$UNAME_MACHINE ;;
|
||||
arm* | sa110*) UNAME_MACHINE="arm" ;;
|
||||
esac
|
||||
|
||||
# The BFD linker knows what the default object file format is, so
|
||||
# first see if it will tell us. cd to the root directory to prevent
|
||||
|
@ -639,12 +639,39 @@ EOF
|
|||
s/ .*//
|
||||
p'`
|
||||
case "$ld_supported_emulations" in
|
||||
i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;;
|
||||
i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;;
|
||||
sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
||||
armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
||||
m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
||||
elf32ppc)
|
||||
*ia64)
|
||||
echo "${UNAME_MACHINE}-unknown-linux"
|
||||
exit 0
|
||||
;;
|
||||
i?86linux)
|
||||
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
|
||||
exit 0
|
||||
;;
|
||||
i?86coff)
|
||||
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
|
||||
exit 0
|
||||
;;
|
||||
sparclinux)
|
||||
echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
|
||||
exit 0
|
||||
;;
|
||||
armlinux)
|
||||
echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
|
||||
exit 0
|
||||
;;
|
||||
elf32arm*)
|
||||
echo "${UNAME_MACHINE}-unknown-linux-gnu"
|
||||
exit 0
|
||||
;;
|
||||
armelf_linux*)
|
||||
echo "${UNAME_MACHINE}-unknown-linux-gnu"
|
||||
exit 0
|
||||
;;
|
||||
m68klinux)
|
||||
echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
|
||||
exit 0
|
||||
;;
|
||||
elf32ppc | elf32ppclinux)
|
||||
# Determine Lib Version
|
||||
cat >$dummy.c <<EOF
|
||||
#include <features.h>
|
||||
|
@ -673,7 +700,9 @@ EOF
|
|||
fi
|
||||
fi
|
||||
rm -f $dummy.c $dummy
|
||||
echo powerpc-unknown-linux-gnu${LIBC} ; exit 0 ;;
|
||||
echo powerpc-unknown-linux-gnu${LIBC}
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
if test "${UNAME_MACHINE}" = "alpha" ; then
|
||||
|
@ -727,6 +756,7 @@ EOF
|
|||
elif test "${UNAME_MACHINE}" = "mips" ; then
|
||||
cat >$dummy.c <<EOF
|
||||
#ifdef __cplusplus
|
||||
#include <stdio.h> /* for printf() prototype */
|
||||
int main (int argc, char *argv[]) {
|
||||
#else
|
||||
int main (argc, argv) int argc; char *argv[]; {
|
||||
|
@ -763,6 +793,7 @@ EOF
|
|||
cat >$dummy.c <<EOF
|
||||
#include <features.h>
|
||||
#ifdef __cplusplus
|
||||
#include <stdio.h> /* for printf() prototype */
|
||||
int main (int argc, char *argv[]) {
|
||||
#else
|
||||
int main (argc, argv) int argc; char *argv[]; {
|
||||
|
@ -800,19 +831,21 @@ EOF
|
|||
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
|
||||
exit 0 ;;
|
||||
i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
|
||||
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
|
||||
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
||||
echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
|
||||
echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
|
||||
else
|
||||
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
|
||||
echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
|
||||
fi
|
||||
exit 0 ;;
|
||||
i?86:*:5:7*)
|
||||
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
|
||||
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
|
||||
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) && UNAME_MACHINE=i586
|
||||
(/bin/uname -X|egrep '^Machine.*Pent.*II' >/dev/null) && UNAME_MACHINE=i686
|
||||
(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) && UNAME_MACHINE=i585
|
||||
echo ${UNAME_MACHINE}-${UNAME_SYSTEM}${UNAME_VERSION}-sysv${UNAME_RELEASE}
|
||||
# Fixed at (any) Pentium or better
|
||||
UNAME_MACHINE=i586
|
||||
if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
|
||||
echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
|
||||
else
|
||||
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
|
||||
fi
|
||||
exit 0 ;;
|
||||
i?86:*:3.2:*)
|
||||
if test -f /usr/options/cb.name; then
|
||||
|
@ -832,7 +865,11 @@ EOF
|
|||
echo ${UNAME_MACHINE}-pc-sysv32
|
||||
fi
|
||||
exit 0 ;;
|
||||
i?86:*DOS:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-msdosdjgpp
|
||||
exit 0 ;;
|
||||
pc:*:*:*)
|
||||
# Left here for compatibility:
|
||||
# uname -m prints for DJGPP always 'pc', but it prints nothing about
|
||||
# the processor, so we play safe by assuming i386.
|
||||
echo i386-pc-msdosdjgpp
|
||||
|
@ -946,6 +983,9 @@ EOF
|
|||
*:Rhapsody:*:*)
|
||||
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:QNX:*:4*)
|
||||
echo i386-qnx-qnx${UNAME_VERSION}
|
||||
exit 0 ;;
|
||||
esac
|
||||
|
||||
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||
|
|
58
config.sub
vendored
58
config.sub
vendored
|
@ -1,6 +1,8 @@
|
|||
#! /bin/sh
|
||||
# Configuration validation subroutine script, version 1.1.
|
||||
# Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is (in principle) common to ALL GNU software.
|
||||
# The presence of a machine in this file suggests that SOME GNU software
|
||||
# can handle that machine. It does not imply ALL GNU software can.
|
||||
|
@ -25,6 +27,9 @@
|
|||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Written by Per Bothner <bothner@cygnus.com>.
|
||||
# Please send patches to <config-patches@gnu.org>.
|
||||
#
|
||||
# Configuration subroutine to validate and canonicalize a configuration type.
|
||||
# Supply the specified configuration type as an argument.
|
||||
# If it is invalid, we print an error message on stderr and exit with code 1.
|
||||
|
@ -105,7 +110,7 @@ case $os in
|
|||
-scout)
|
||||
;;
|
||||
-wrs)
|
||||
os=vxworks
|
||||
os=-vxworks
|
||||
basic_machine=$1
|
||||
;;
|
||||
-hiux*)
|
||||
|
@ -156,13 +161,17 @@ case $os in
|
|||
-psos*)
|
||||
os=-psos
|
||||
;;
|
||||
-mint | -mint[0-9]*)
|
||||
basic_machine=m68k-atari
|
||||
os=-mint
|
||||
;;
|
||||
esac
|
||||
|
||||
# Decode aliases for certain CPU-COMPANY combinations.
|
||||
case $basic_machine in
|
||||
# Recognize the basic CPU types without company name.
|
||||
# Some are omitted here because they have special meanings below.
|
||||
tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
|
||||
tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
|
||||
| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
|
||||
| 580 | i960 | h8300 \
|
||||
| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
|
||||
|
@ -171,12 +180,12 @@ case $basic_machine in
|
|||
| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
|
||||
| mips64orion | mips64orionel | mipstx39 | mipstx39el \
|
||||
| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
|
||||
| mips64vr5000 | miprs64vr5000el \
|
||||
| mips64vr5000 | miprs64vr5000el | mcore \
|
||||
| sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
|
||||
| thumb | d10v)
|
||||
| thumb | d10v | fr30)
|
||||
basic_machine=$basic_machine-unknown
|
||||
;;
|
||||
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65)
|
||||
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl)
|
||||
;;
|
||||
|
||||
# We use `pc' rather than `unknown'
|
||||
|
@ -191,7 +200,8 @@ case $basic_machine in
|
|||
exit 1
|
||||
;;
|
||||
# Recognize the basic CPU types with company name.
|
||||
vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
|
||||
# FIXME: clean up the formatting here.
|
||||
vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
|
||||
| m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
|
||||
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
|
||||
| power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
|
||||
|
@ -204,10 +214,10 @@ case $basic_machine in
|
|||
| sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
|
||||
| mips64el-* | mips64orion-* | mips64orionel-* \
|
||||
| mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
|
||||
| mipstx39-* | mipstx39el-* \
|
||||
| mipstx39-* | mipstx39el-* | mcore-* \
|
||||
| f301-* | armv*-* | t3e-* \
|
||||
| m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
|
||||
| thumb-* | v850-* | d30v-* | tic30-* | c30-* )
|
||||
| thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* )
|
||||
;;
|
||||
# Recognize the various machine names and aliases which stand
|
||||
# for a CPU type and a company and sometimes even an OS.
|
||||
|
@ -425,7 +435,6 @@ case $basic_machine in
|
|||
;;
|
||||
i370-ibm* | ibm*)
|
||||
basic_machine=i370-ibm
|
||||
os=-mvs
|
||||
;;
|
||||
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
||||
i[34567]86v32)
|
||||
|
@ -460,6 +469,9 @@ case $basic_machine in
|
|||
basic_machine=i386-unknown
|
||||
os=-mingw32
|
||||
;;
|
||||
i386-qnx | qnx)
|
||||
basic_machine=i386-qnx
|
||||
;;
|
||||
iris | iris4d)
|
||||
basic_machine=mips-sgi
|
||||
case $os in
|
||||
|
@ -488,7 +500,7 @@ case $basic_machine in
|
|||
miniframe)
|
||||
basic_machine=m68000-convergent
|
||||
;;
|
||||
*mint | *MiNT)
|
||||
*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
|
||||
basic_machine=m68k-atari
|
||||
os=-mint
|
||||
;;
|
||||
|
@ -506,6 +518,10 @@ case $basic_machine in
|
|||
mips3*)
|
||||
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
||||
;;
|
||||
mmix*)
|
||||
basic_machine=mmix-knuth
|
||||
os=-mmixware
|
||||
;;
|
||||
monitor)
|
||||
basic_machine=m68k-rom68k
|
||||
os=-coff
|
||||
|
@ -514,6 +530,10 @@ case $basic_machine in
|
|||
basic_machine=i386-unknown
|
||||
os=-msdos
|
||||
;;
|
||||
mvs)
|
||||
basic_machine=i370-ibm
|
||||
os=-mvs
|
||||
;;
|
||||
ncr3000)
|
||||
basic_machine=i486-ncr
|
||||
os=-sysv4
|
||||
|
@ -523,7 +543,7 @@ case $basic_machine in
|
|||
os=-netbsd
|
||||
;;
|
||||
netwinder)
|
||||
basic_machine=armv4l-corel
|
||||
basic_machine=armv4l-rebel
|
||||
os=-linux
|
||||
;;
|
||||
news | news700 | news800 | news900)
|
||||
|
@ -907,12 +927,12 @@ case $os in
|
|||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
|
||||
| -interix* | -uwin* | -rhapsody* | -openstep* | -oskit*)
|
||||
| -interix* | -uwin* | -rhapsody* | -opened* | -openstep* | -oskit*)
|
||||
# Remember, each alternative MUST END IN *, to match a version number.
|
||||
;;
|
||||
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
|
||||
| -windows* | -osx | -abug | -netware* | -os9* | -beos* \
|
||||
| -macos* | -mpw* | -magic* | -mon960* | -lnews*)
|
||||
| -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
|
||||
;;
|
||||
-mac*)
|
||||
os=`echo $os | sed -e 's|mac|macos|'`
|
||||
|
@ -926,6 +946,9 @@ case $os in
|
|||
-sunos6*)
|
||||
os=`echo $os | sed -e 's|sunos6|solaris3|'`
|
||||
;;
|
||||
-opened*)
|
||||
os=-openedition
|
||||
;;
|
||||
-osfrose*)
|
||||
os=-osfrose
|
||||
;;
|
||||
|
@ -963,6 +986,9 @@ case $os in
|
|||
-oss*)
|
||||
os=-sysv3
|
||||
;;
|
||||
-qnx)
|
||||
os=-qnx4
|
||||
;;
|
||||
-svr4)
|
||||
os=-sysv4
|
||||
;;
|
||||
|
@ -1012,7 +1038,7 @@ case $basic_machine in
|
|||
*-acorn)
|
||||
os=-riscix1.2
|
||||
;;
|
||||
arm*-corel)
|
||||
arm*-rebel)
|
||||
os=-linux
|
||||
;;
|
||||
arm*-semi)
|
||||
|
@ -1186,7 +1212,7 @@ case $basic_machine in
|
|||
-genix*)
|
||||
vendor=ns
|
||||
;;
|
||||
-mvs*)
|
||||
-mvs* | -opened*)
|
||||
vendor=ibm
|
||||
;;
|
||||
-ptx*)
|
||||
|
|
222
gnustep-base.spec
Normal file
222
gnustep-base.spec
Normal file
|
@ -0,0 +1,222 @@
|
|||
# This package is not relocatable
|
||||
%define ver 0.6.5
|
||||
%define date 20000217
|
||||
%define prefix /usr
|
||||
%define gsr %{prefix}/GNUstep
|
||||
%define libcombo gnu-gnu-gnu-xgps
|
||||
Name: gnustep-base
|
||||
Version: %{ver}
|
||||
Release: 1
|
||||
Source: ftp://ftp.gnustep.org/pub/gnustep/core/gstep-base-%{ver}.tar.gz
|
||||
Copyright: GPL
|
||||
Group: Development/Tools
|
||||
Summary: GNUstep Base library package
|
||||
Packager: Christopher Seawood <cls@seawood.org>
|
||||
Distribution: Seawood's Random RPMS (%{_buildsym})
|
||||
Vendor: The Seawood Project
|
||||
URL: http://www.gnustep.org/
|
||||
BuildRoot: /var/tmp/build-%{name}
|
||||
Conflicts: gnustep-core
|
||||
Requires: gnustep-make
|
||||
|
||||
%description
|
||||
The GNUstep Base Library is a library of general-purpose, non-graphical
|
||||
Objective C objects. For example, it includes classes for strings,
|
||||
object collections, byte streams, typed coders, invocations,
|
||||
notifications, notification dispatchers, moments in time, network ports,
|
||||
remote object messaging support (distributed objects), event loops, and
|
||||
random number generators.
|
||||
Library combo is %{libcombo}.
|
||||
%{_buildblurb}
|
||||
|
||||
%package devel
|
||||
Summary: GNUstep Base headers and development libs.
|
||||
Group: Development/Libraries
|
||||
Requires: %{name} = %{ver}, gnustep-make-devel
|
||||
Conflicts: gnustep-core
|
||||
|
||||
%description devel
|
||||
Header files required to build applications against the GNUstep Base library.
|
||||
Library combo is %{libcombo}.
|
||||
%{_buildblurb}
|
||||
|
||||
%prep
|
||||
%setup -q -n gstep-%{ver}/base
|
||||
%patch -p2 -b .unicode
|
||||
|
||||
%build
|
||||
if [ -z "$GNUSTEP_SYSTEM_ROOT" ]; then
|
||||
. %{gsr}/Makefiles/GNUstep.sh
|
||||
fi
|
||||
CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{gsr} --with-library-combo=%{libcombo}
|
||||
make
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
if [ -z "$GNUSTEP_SYSTEM_ROOT" ]; then
|
||||
. %{gsr}/Makefiles/GNUstep.sh
|
||||
fi
|
||||
make install GNUSTEP_INSTALLATION_DIR=${RPM_BUILD_ROOT}%{gsr}
|
||||
|
||||
%ifos Linux
|
||||
cat > mygnustep.init.in << EOF
|
||||
#!/bin/sh
|
||||
#
|
||||
# gnustep daemons
|
||||
#
|
||||
# chkconfig: 2345 35 65
|
||||
# description: Starts gnustep daemons
|
||||
#
|
||||
# Source function library.
|
||||
. /etc/rc.d/init.d/functions
|
||||
|
||||
case "\$1" in
|
||||
start)
|
||||
echo -n "Starting gnustep services: "
|
||||
daemon %{gsr}/Tools/GSARCH/GSOS/gdomap
|
||||
echo
|
||||
touch /var/lock/subsys/gnustep
|
||||
;;
|
||||
|
||||
stop)
|
||||
echo -n "Stopping gnustep services: "
|
||||
killproc gdomap
|
||||
echo
|
||||
rm -f /var/lock/subsys/gnustep
|
||||
;;
|
||||
|
||||
status)
|
||||
status gdomap
|
||||
;;
|
||||
|
||||
restart|reload)
|
||||
\$0 stop
|
||||
\$0 start
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: gnustep {start|stop|status|restart|reload}"
|
||||
exit 1
|
||||
esac
|
||||
EOF
|
||||
|
||||
sed -e "s|GSARCH|${GNUSTEP_HOST_CPU}|g" -e "s|GSOS|${GNUSTEP_HOST_OS}|g" < mygnustep.init.in > mygnustep.init
|
||||
mkdir -p ${RPM_BUILD_ROOT}/etc/rc.d/init.d
|
||||
mv mygnustep.init ${RPM_BUILD_ROOT}/etc/rc.d/init.d/gnustep
|
||||
%endif
|
||||
|
||||
cat > filelist.rpm.in << EOF
|
||||
%defattr (-, bin, bin)
|
||||
%doc ANNOUNCE AUTHORS COPYING* ChangeLog* INSTALL* NEWS README Version
|
||||
%config %{gsr}/Libraries/Resources/NSTimeZones/localtime
|
||||
%ifos Linux
|
||||
%config /etc/rc.d/init.d/gnustep
|
||||
%endif
|
||||
|
||||
%dir %{gsr}/Libraries
|
||||
%dir %{gsr}/Libraries/Resources
|
||||
%dir %{gsr}/Libraries/Resources/NSTimeZones
|
||||
%dir %{gsr}/Libraries/GSARCH
|
||||
%dir %{gsr}/Libraries/GSARCH/GSOS
|
||||
%dir %{gsr}/Libraries/GSARCH/GSOS/%{libcombo}
|
||||
%dir %{gsr}/Tools
|
||||
%dir %{gsr}/Tools/GSARCH
|
||||
%dir %{gsr}/Tools/GSARCH/GSOS
|
||||
%dir %{gsr}/Tools/GSARCH/GSOS/%{libcombo}
|
||||
|
||||
%{gsr}/Libraries/Resources/NSCharacterSets
|
||||
%{gsr}/Libraries/Resources/NSTimeZones/README
|
||||
%{gsr}/Libraries/Resources/NSTimeZones/abbreviations
|
||||
%{gsr}/Libraries/Resources/NSTimeZones/regions
|
||||
%{gsr}/Libraries/Resources/NSTimeZones/zones
|
||||
%{gsr}/Libraries/Resources/NSTimeZones/*.m
|
||||
%{gsr}/Libraries/GSARCH/GSOS/%{libcombo}/lib*.so.*
|
||||
|
||||
%{gsr}/Tools/dread
|
||||
%{gsr}/Tools/dwrite
|
||||
%{gsr}/Tools/dremove
|
||||
%{gsr}/Tools/gdnc
|
||||
%{gsr}/Tools/plparse
|
||||
%{gsr}/Tools/sfparse
|
||||
%{gsr}/Tools/pldes
|
||||
%{gsr}/Tools/plser
|
||||
%{gsr}/Tools/GSARCH/GSOS/%{libcombo}/*
|
||||
|
||||
%attr(4755, root, root) %{gsr}/Tools/GSARCH/GSOS/gdomap
|
||||
|
||||
EOF
|
||||
|
||||
cat > filelist-devel.rpm.in << EOF
|
||||
%defattr(-, bin, bin)
|
||||
%dir %{gsr}/Headers
|
||||
%dir %{gsr}/Headers/gnustep
|
||||
|
||||
%{gsr}/Headers/gnustep/Foundation
|
||||
%{gsr}/Headers/gnustep/base
|
||||
%{gsr}/Headers/gnustep/unicode
|
||||
%{gsr}/Headers/GSARCH
|
||||
%{gsr}/Libraries/GSARCH/GSOS/%{libcombo}/lib*.so
|
||||
|
||||
EOF
|
||||
|
||||
sed -e "s|GSARCH|${GNUSTEP_HOST_CPU}|" -e "s|GSOS|${GNUSTEP_HOST_OS}|" < filelist.rpm.in > filelist.rpm
|
||||
sed -e "s|GSARCH|${GNUSTEP_HOST_CPU}|" -e "s|GSOS|${GNUSTEP_HOST_OS}|" < filelist-devel.rpm.in > filelist-devel.rpm
|
||||
|
||||
echo 'GMT' > $RPM_BUILD_ROOT/%{gsr}/Libraries/Resources/NSTimeZones/localtime
|
||||
|
||||
%post
|
||||
if [ -z "$GNUSTEP_SYSTEM_ROOT" ]; then
|
||||
. %{gsr}/Makefiles/GNUstep.sh
|
||||
fi
|
||||
grep -q '^gdomap' /etc/services || (echo "gdomap 538/tcp # GNUstep distrib objects" >> /etc/services && echo "gdomap 538/udp # GNUstep distrib objects" >> /etc/services)
|
||||
%ifos Linux
|
||||
grep -q '%{gsr}/Libraries/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/gnu-gnu-gnu-xgps' /etc/ld.so.conf || echo "%{gsr}/Libraries/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/%{libcombo}" >> /etc/ld.so.conf
|
||||
/sbin/ldconfig
|
||||
/sbin/chkconfig --add gnustep
|
||||
%endif
|
||||
|
||||
%preun
|
||||
if [ -z "$GNUSTEP_SYSTEM_ROOT" ]; then
|
||||
. %{gsr}/Makefiles/GNUstep.sh
|
||||
fi
|
||||
if [ $1 = 0 ]; then
|
||||
/sbin/chkconfig --del gnustep
|
||||
mv -f /etc/services /etc/services.orig
|
||||
grep -v "^gdomap 538" /etc/services.orig > /etc/services
|
||||
rm -f /etc/services.orig
|
||||
fi
|
||||
|
||||
|
||||
%postun
|
||||
if [ -z "$GNUSTEP_SYSTEM_ROOT" ]; then
|
||||
. %{gsr}/Makefiles/GNUstep.sh
|
||||
fi
|
||||
if [ $1 = 0 ]; then
|
||||
%ifos Linux
|
||||
mv -f /etc/ld.so.conf /etc/ld.so.conf.orig
|
||||
grep -v "^%{gsr}/Libraries/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/%{libcombo}$" /etc/ld.so.conf.orig > /etc/ld.so.conf
|
||||
rm -f /etc/ld.so.conf.orig
|
||||
/sbin/ldconfig
|
||||
%endif
|
||||
fi
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%files -f filelist.rpm
|
||||
%files -f filelist-devel.rpm devel
|
||||
|
||||
%changelog
|
||||
* Sat Sep 18 1999 Christopher Seawood <cls@seawood.org>
|
||||
- Version 0.6.0
|
||||
- Added unicode patch to make sure unicode headers were installed
|
||||
|
||||
* Sat Aug 07 1999 Christopher Seawood <cls@seawood.org>
|
||||
- Updated to cvs dawn_6 branch
|
||||
|
||||
* Fri Jun 25 1999 Christopher Seawood <cls@seawood.org>
|
||||
- Split into separate rpm from gnustep-core
|
||||
- Build from cvs snapshot
|
||||
- Added header patch
|
||||
- Split into main & -devel packages
|
||||
|
Loading…
Reference in a new issue