Revision: 4031
http://skim-app.svn.sourceforge.net/skim-app/?rev=4031&view=rev
Author: hofman
Date: 2008-06-19 04:42:50 -0700 (Thu, 19 Jun 2008)
Log Message:
-----------
Add a second shared EA manager that never splits attributes. Ensure that the
shared managers are unique.
Modified Paths:
--------------
trunk/SkimNotes/SKNExtendedAttributeManager.h
trunk/SkimNotes/SKNExtendedAttributeManager.m
Modified: trunk/SkimNotes/SKNExtendedAttributeManager.h
===================================================================
--- trunk/SkimNotes/SKNExtendedAttributeManager.h 2008-06-19 11:25:46 UTC
(rev 4030)
+++ trunk/SkimNotes/SKNExtendedAttributeManager.h 2008-06-19 11:42:50 UTC
(rev 4031)
@@ -60,12 +60,20 @@
+ (id)sharedManager;
/*!
+ @method sharedNoSplitManager
+ @abstract Returns a shared instance with nil prefix. This instance
never splits attributes, and can also not reassemble splitted attributes.
+ @discussion (comprehensive description)
+ @result (description)
+*/
++ (id)sharedNoSplitManager;
+
+/*!
@method initWithPrefix:
@abstract Initializes a new extended attribute manager with keys and
attribute name prefixes used for segments determined by a prefix.
@discussion The prefix is used in splitting large attributes. EA managers
with different prefixes are mutually incompatible,
i.e. attributes written with one manager cannot be safely read
by a manager with a different prefix.
It is safest to just use the shared instance. The prefix
should only contain characters that are valid in attribute names.
- @param prefix Defaults to "net_sourceforge_skim-app" for the shared
instance.
+ @param prefix Defaults to "net_sourceforge_skim-app" for the shared
instance. If nil, the manager never splits attributes.
@result (description)
*/
- (id)initWithPrefix:(NSString *)prefix;
Modified: trunk/SkimNotes/SKNExtendedAttributeManager.m
===================================================================
--- trunk/SkimNotes/SKNExtendedAttributeManager.m 2008-06-19 11:25:46 UTC
(rev 4030)
+++ trunk/SkimNotes/SKNExtendedAttributeManager.m 2008-06-19 11:42:50 UTC
(rev 4031)
@@ -54,6 +54,7 @@
@implementation SKNExtendedAttributeManager
static id sharedManager = nil;
+static id sharedNoSplitManager = nil;
+ (id)sharedManager;
{
@@ -62,21 +63,40 @@
return sharedManager;
}
++ (id)sharedNoSplitManager;
+{
+ if (sharedNoSplitManager == nil)
+ sharedNoSplitManager = [[[self class] alloc] initWithPrefix:nil];
+ return sharedNoSplitManager;
+}
+
- (id)init;
{
- return [self initWithPrefix:nil];
+ self = [self initWithPrefix:PREFIX];
+ if (sharedManager) {
+ [self release];
+ self = [sharedManager retain];
+ } else {
+ sharedManager = self = [self initWithPrefix:PREFIX];
+ }
+ return self;
}
- (id)initWithPrefix:(NSString *)prefix;
{
if (self = [super init]) {
- if (prefix == nil)
- prefix = PREFIX;
- namePrefix = [[prefix stringByAppendingString:@"_"] retain];
- uniqueKey = [[prefix stringByAppendingString:@"_key"] retain];
- wrapperKey = [[prefix stringByAppendingString:@"_has_wrapper"] retain];
- fragmentsKey = [[prefix
stringByAppendingString:@"_number_of_fragments"] retain];
-
+ if (prefix) {
+ namePrefix = [[prefix stringByAppendingString:@"_"] retain];
+ uniqueKey = [[prefix stringByAppendingString:@"_key"] retain];
+ wrapperKey = [[prefix stringByAppendingString:@"_has_wrapper"]
retain];
+ fragmentsKey = [[prefix
stringByAppendingString:@"_number_of_fragments"] retain];
+ } else if (sharedNoSplitManager) {
+ [self release];
+ self = [sharedNoSplitManager retain];
+ } else {
+ namePrefix = uniqueKey = wrapperKey = fragmentsKey = nil;
+ sharedNoSplitManager = self;
+ }
}
return self;
}
@@ -216,7 +236,7 @@
id plist = nil;
- if ([attribute length] >= [plistHeaderData length] && [plistHeaderData
isEqual:[attribute subdataWithRange:NSMakeRange(0, [plistHeaderData length])]])
+ if (namePrefix && [attribute length] >= [plistHeaderData length] &&
[plistHeaderData isEqual:[attribute subdataWithRange:NSMakeRange(0,
[plistHeaderData length])]])
plist = [NSPropertyListSerialization propertyListFromData:attribute
mutabilityOption:NSPropertyListImmutable format:&format
errorDescription:&errorString];
// even if it's a plist, it may not be a dictionary or have the key we're
looking for
@@ -286,7 +306,7 @@
BOOL success;
- if ((options & kSKNXattrNoSplitData) == 0 && [value length] >
MAX_XATTR_LENGTH) {
+ if ((options & kSKNXattrNoSplitData) == 0 && namePrefix && [value length]
> MAX_XATTR_LENGTH) {
// compress to save space, and so we don't identify this as a plist
when reading it (in case it really is plist data)
value = [self bzip2:value];
@@ -391,7 +411,7 @@
id plist = nil;
- if ([attribute length] >= [plistHeaderData length] &&
[plistHeaderData isEqual:[attribute subdataWithRange:NSMakeRange(0,
[plistHeaderData length])]])
+ if (namePrefix && [attribute length] >= [plistHeaderData length]
&& [plistHeaderData isEqual:[attribute subdataWithRange:NSMakeRange(0,
[plistHeaderData length])]])
plist = [NSPropertyListSerialization
propertyListFromData:attribute mutabilityOption:NSPropertyListImmutable
format:&format errorDescription:&errorString];
// even if it's a plist, it may not be a dictionary or have the
key we're looking for
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit