bugfix and optimisation

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@14989 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
CaS 2002-11-14 22:51:11 +00:00
parent 7709cd9dc8
commit 42fa249c8f
2 changed files with 43 additions and 24 deletions

View file

@ -1,3 +1,9 @@
2002-11-12 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSUserDefaults.m: Fix for getting integer, float and bool
values when they are stored as NSNumbers (problem reported by
Ludovic Marcotte). Also optimise a little.
2002-11-15 Richard Frith-Macdonald <rfm@gnu.org> 2002-11-15 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSThread.m: Port pipe to mingw. * Source/NSThread.m: Port pipe to mingw.

View file

@ -68,7 +68,9 @@ static SEL addSel;
static Class NSArrayClass; static Class NSArrayClass;
static Class NSDataClass; static Class NSDataClass;
static Class NSDateClass;
static Class NSDictionaryClass; static Class NSDictionaryClass;
static Class NSNumberClass;
static Class NSMutableDictionaryClass; static Class NSMutableDictionaryClass;
static Class NSStringClass; static Class NSStringClass;
@ -221,7 +223,9 @@ static BOOL setSharedDefaults = NO; /* Flag to prevent infinite recursion */
*/ */
NSArrayClass = [NSArray class]; NSArrayClass = [NSArray class];
NSDataClass = [NSData class]; NSDataClass = [NSData class];
NSDateClass = [NSDate class];
NSDictionaryClass = [NSDictionary class]; NSDictionaryClass = [NSDictionary class];
NSNumberClass = [NSNumber class];
NSMutableDictionaryClass = [NSMutableDictionary class]; NSMutableDictionaryClass = [NSMutableDictionary class];
NSStringClass = [NSString class]; NSStringClass = [NSString class];
classLock = [NSRecursiveLock new]; classLock = [NSRecursiveLock new];
@ -617,7 +621,7 @@ static NSString *pathForUser(NSString *user)
#endif #endif
attr = [NSDictionary dictionaryWithObjectsAndKeys: attr = [NSDictionary dictionaryWithObjectsAndKeys:
NSUserName(), NSFileOwnerAccountName, NSUserName(), NSFileOwnerAccountName,
[NSNumber numberWithUnsignedLong: desired], NSFilePosixPermissions, [NSNumberClass numberWithUnsignedLong: desired], NSFilePosixPermissions,
nil]; nil];
if ([mgr fileExistsAtPath: home isDirectory: &isDir] == NO) if ([mgr fileExistsAtPath: home isDirectory: &isDir] == NO)
@ -860,9 +864,10 @@ static NSString *pathForUser(NSString *user)
*/ */
- (BOOL) boolForKey: (NSString*)defaultName - (BOOL) boolForKey: (NSString*)defaultName
{ {
id obj = [self stringForKey: defaultName]; id obj = [self objectForKey: defaultName];
if (obj != nil) if (obj != nil && ([obj isKindOfClass: NSStringClass]
|| [obj isKindOfClass: NSNumberClass]))
{ {
return [obj boolValue]; return [obj boolValue];
} }
@ -891,7 +896,9 @@ static NSString *pathForUser(NSString *user)
id obj = [self objectForKey: defaultName]; id obj = [self objectForKey: defaultName];
if (obj != nil && [obj isKindOfClass: NSDictionaryClass]) if (obj != nil && [obj isKindOfClass: NSDictionaryClass])
return obj; {
return obj;
}
return nil; return nil;
} }
@ -901,10 +908,13 @@ static NSString *pathForUser(NSString *user)
*/ */
- (float) floatForKey: (NSString*)defaultName - (float) floatForKey: (NSString*)defaultName
{ {
id obj = [self stringForKey: defaultName]; id obj = [self objectForKey: defaultName];
if (obj != nil) if (obj != nil && ([obj isKindOfClass: NSStringClass]
return [obj floatValue]; || [obj isKindOfClass: NSNumberClass]))
{
return [obj floatValue];
}
return 0.0; return 0.0;
} }
@ -914,10 +924,13 @@ static NSString *pathForUser(NSString *user)
*/ */
- (int) integerForKey: (NSString*)defaultName - (int) integerForKey: (NSString*)defaultName
{ {
id obj = [self stringForKey: defaultName]; id obj = [self objectForKey: defaultName];
if (obj != nil) if (obj != nil && ([obj isKindOfClass: NSStringClass]
return [obj intValue]; || [obj isKindOfClass: NSNumberClass]))
{
return [obj intValue];
}
return 0; return 0;
} }
@ -996,7 +1009,7 @@ static NSString *pathForUser(NSString *user)
*/ */
- (void) setBool: (BOOL)value forKey: (NSString*)defaultName - (void) setBool: (BOOL)value forKey: (NSString*)defaultName
{ {
NSNumber *n = [NSNumber numberWithBool: value]; NSNumber *n = [NSNumberClass numberWithBool: value];
[self setObject: n forKey: defaultName]; [self setObject: n forKey: defaultName];
} }
@ -1007,7 +1020,7 @@ static NSString *pathForUser(NSString *user)
*/ */
- (void) setFloat: (float)value forKey: (NSString*)defaultName - (void) setFloat: (float)value forKey: (NSString*)defaultName
{ {
NSNumber *n = [NSNumber numberWithFloat: value]; NSNumber *n = [NSNumberClass numberWithFloat: value];
[self setObject: n forKey: defaultName]; [self setObject: n forKey: defaultName];
} }
@ -1018,30 +1031,30 @@ static NSString *pathForUser(NSString *user)
*/ */
- (void) setInteger: (int)value forKey: (NSString*)defaultName - (void) setInteger: (int)value forKey: (NSString*)defaultName
{ {
NSNumber *n = [NSNumber numberWithInt: value]; NSNumber *n = [NSNumberClass numberWithInt: value];
[self setObject: n forKey: defaultName]; [self setObject: n forKey: defaultName];
} }
static BOOL isPlistObject(id o) static BOOL isPlistObject(id o)
{ {
if ([o isKindOfClass: [NSString class]] == YES) if ([o isKindOfClass: NSStringClass] == YES)
{ {
return YES; return YES;
} }
if ([o isKindOfClass: [NSData class]] == YES) if ([o isKindOfClass: NSDataClass] == YES)
{ {
return YES; return YES;
} }
if ([o isKindOfClass: [NSDate class]] == YES) if ([o isKindOfClass: NSDateClass] == YES)
{ {
return YES; return YES;
} }
if ([o isKindOfClass: [NSNumber class]] == YES) if ([o isKindOfClass: NSNumberClass] == YES)
{ {
return YES; return YES;
} }
if ([o isKindOfClass: [NSArray class]] == YES) if ([o isKindOfClass: NSArrayClass] == YES)
{ {
NSEnumerator *e = [o objectEnumerator]; NSEnumerator *e = [o objectEnumerator];
id tmp; id tmp;
@ -1055,7 +1068,7 @@ static BOOL isPlistObject(id o)
} }
return YES; return YES;
} }
if ([o isKindOfClass: [NSDictionary class]] == YES) if ([o isKindOfClass: NSDictionaryClass] == YES)
{ {
NSEnumerator *e = [o keyEnumerator]; NSEnumerator *e = [o keyEnumerator];
id tmp; id tmp;
@ -1284,7 +1297,7 @@ static BOOL isPlistObject(id o)
NSFileManager *mgr = [NSFileManager defaultManager]; NSFileManager *mgr = [NSFileManager defaultManager];
NSMutableDictionary *newDict; NSMutableDictionary *newDict;
NSDictionary *attr; NSDictionary *attr;
NSDate *started = [NSDate date]; NSDate *started = [NSDateClass date];
unsigned long desired; unsigned long desired;
unsigned long attributes; unsigned long attributes;
@ -1299,7 +1312,7 @@ static BOOL isPlistObject(id o)
NSDate *lockDate; NSDate *lockDate;
lockDate = [_fileLock lockDate]; lockDate = [_fileLock lockDate];
when = [NSDate dateWithTimeIntervalSinceNow: 0.1]; when = [NSDateClass dateWithTimeIntervalSinceNow: 0.1];
/* /*
* In case we have tried and failed to break the lock, * In case we have tried and failed to break the lock,
@ -1425,7 +1438,7 @@ static BOOL isPlistObject(id o)
enforced_attributes = [NSMutableDictionary dictionaryWithDictionary: enforced_attributes = [NSMutableDictionary dictionaryWithDictionary:
[mgr fileAttributesAtPath: _defaultsDatabase traverseLink: YES]]; [mgr fileAttributesAtPath: _defaultsDatabase traverseLink: YES]];
permissions = [NSNumber numberWithUnsignedLong: desired]; permissions = [NSNumberClass numberWithUnsignedLong: desired];
[enforced_attributes setObject: permissions [enforced_attributes setObject: permissions
forKey: NSFilePosixPermissions]; forKey: NSFilePosixPermissions];
@ -1464,11 +1477,11 @@ static BOOL isPlistObject(id o)
return NO; return NO;
} }
} }
ASSIGN(_lastSync, [NSDate date]); ASSIGN(_lastSync, [NSDateClass date]);
} }
else else
{ {
ASSIGN(_lastSync, [NSDate date]); ASSIGN(_lastSync, [NSDateClass date]);
if ([_persDomains isEqual: newDict] == NO) if ([_persDomains isEqual: newDict] == NO)
{ {
RELEASE(_persDomains); RELEASE(_persDomains);