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:
fedor 2000-02-19 00:40:47 +00:00
parent 5a2deec1e4
commit 81b7455bda
36 changed files with 1074 additions and 479 deletions

View file

@ -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
View 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
View file

@ -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

View file

@ -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

View file

@ -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.)

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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 */

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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
View file

@ -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
View file

@ -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!

View file

@ -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);

View file

@ -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
{

View file

@ -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

View file

@ -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 **/

View file

@ -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];
}

View file

@ -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);

View file

@ -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;
}
}

View file

@ -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;
}

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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";

View file

@ -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

View file

@ -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

View file

@ -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:
{

View file

@ -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++;
}
}
}

View file

@ -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
View file

@ -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
View file

@ -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
View 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