Revision: 12599
http://bibdesk.svn.sourceforge.net/bibdesk/?rev=12599&view=rev
Author: amaxwell
Date: 2008-01-20 13:29:13 -0800 (Sun, 20 Jan 2008)
Log Message:
-----------
Compute sha1 digest by reading from the file incrementally instead of loading
it all into memory. Results are the same as Omni's, but should have less
memory overhead.
Modified Paths:
--------------
trunk/bibdesk/BDSKFileSearchIndex.m
trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj
trunk/bibdesk/NSData_BDSKExtensions.h
trunk/bibdesk/NSData_BDSKExtensions.m
Modified: trunk/bibdesk/BDSKFileSearchIndex.m
===================================================================
--- trunk/bibdesk/BDSKFileSearchIndex.m 2008-01-20 19:10:32 UTC (rev 12598)
+++ trunk/bibdesk/BDSKFileSearchIndex.m 2008-01-20 21:29:13 UTC (rev 12599)
@@ -44,6 +44,7 @@
#import "BDSKMultiValueDictionary.h"
#import "NSObject_BDSKExtensions.h"
#import "NSFileManager_BDSKExtensions.h"
+#import "NSData_BDSKExtensions.h"
@interface BDSKFileSearchIndex (Private)
@@ -226,11 +227,8 @@
@implementation BDSKFileSearchIndex (Private)
static inline NSData *sha1SignatureForURL(NSURL *aURL) {
- // using the mapped data options will cause a crash in the sha1Signature
method
- NSData *data = [[NSData alloc] initWithContentsOfURL:aURL];
- NSData *sha1Signature = [data sha1Signature];
- [data release];
- return sha1Signature ? sha1Signature : [NSData data];
+ NSData *sha1Signature = [NSData copySha1SignatureForFile:[aURL path]];
+ return sha1Signature ? [sha1Signature autorelease] : [NSData data];
}
+ (NSString *)indexCacheFolder
Modified: trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj
===================================================================
--- trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj 2008-01-20 19:10:32 UTC
(rev 12598)
+++ trunk/bibdesk/Bibdesk.xcodeproj/project.pbxproj 2008-01-20 21:29:13 UTC
(rev 12599)
@@ -485,6 +485,8 @@
F97C9DBE0C44866F0002EE01 /* WSGeneratedObj.m in Sources */ =
{isa = PBXBuildFile; fileRef = F97C9DBB0C44866F0002EE01 /* WSGeneratedObj.m */;
};
F97C9DBF0C4486700002EE01 /* BDSKISIWebServices.m in Sources */
= {isa = PBXBuildFile; fileRef = F97C9DBD0C44866F0002EE01 /*
BDSKISIWebServices.m */; };
F97FA7930AF56FA100C32BBA /* BDSKImageFadeAnimation.m in Sources
*/ = {isa = PBXBuildFile; fileRef = F97FA7910AF56FA100C32BBA /*
BDSKImageFadeAnimation.m */; };
+ F98AACDE0D43DB5A00D3CD64 /* libssl.dylib in Frameworks */ =
{isa = PBXBuildFile; fileRef = F98AACDD0D43DB5A00D3CD64 /* libssl.dylib */; };
+ F98AACF50D43E13C00D3CD64 /* libcrypto.dylib in Frameworks */ =
{isa = PBXBuildFile; fileRef = F98AACF40D43E13C00D3CD64 /* libcrypto.dylib */;
};
F98DB3180A23C7730040D347 /* BDSKTemplate.m in Sources */ = {isa
= PBXBuildFile; fileRef = F98DB3160A23C7730040D347 /* BDSKTemplate.m */; };
F990C58C0D42D58D00B5425E /* BDSKDocumentSearch.m in Sources */
= {isa = PBXBuildFile; fileRef = F990C58A0D42D58D00B5425E /*
BDSKDocumentSearch.m */; };
F9936CC60BC746C300A32DC4 /* BDSKItemSearchIndexes.m in Sources
*/ = {isa = PBXBuildFile; fileRef = F9936CC40BC746C300A32DC4 /*
BDSKItemSearchIndexes.m */; };
@@ -1563,6 +1565,8 @@
F97FA7910AF56FA100C32BBA /* BDSKImageFadeAnimation.m */ = {isa
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc;
path = BDSKImageFadeAnimation.m; sourceTree = "<group>"; };
F98AA67F0971E3F400184BD8 /* BDSKTextViewCompletionController.h
*/ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType =
sourcecode.c.h; path = BDSKTextViewCompletionController.h; sourceTree =
"<group>"; };
F98AA6800971E3F400184BD8 /* BDSKTextViewCompletionController.m
*/ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType =
sourcecode.c.objc; path = BDSKTextViewCompletionController.m; sourceTree =
"<group>"; };
+ F98AACDD0D43DB5A00D3CD64 /* libssl.dylib */ = {isa =
PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name =
libssl.dylib; path = /usr/lib/libssl.dylib; sourceTree = "<absolute>"; };
+ F98AACF40D43E13C00D3CD64 /* libcrypto.dylib */ = {isa =
PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name =
libcrypto.dylib; path = /usr/lib/libcrypto.dylib; sourceTree = "<absolute>"; };
F98C6FC80CDD30A2002FCAD8 /* QuickLook-BibDesk.xcodeproj */ =
{isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name =
"QuickLook-BibDesk.xcodeproj"; path =
"QuickLook-BibDesk/QuickLook-BibDesk.xcodeproj"; sourceTree = "<group>"; };
F98DB3150A23C7730040D347 /* BDSKTemplate.h */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path =
BDSKTemplate.h; sourceTree = "<group>"; };
F98DB3160A23C7730040D347 /* BDSKTemplate.m */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path
= BDSKTemplate.m; sourceTree = "<group>"; };
@@ -1743,6 +1747,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ F98AACDE0D43DB5A00D3CD64 /* libssl.dylib in
Frameworks */,
F911D6BC0CFE8E690009C77B /* FileView.framework
in Frameworks */,
F9B801840B41E89500A5A615 /* yaz.framework in
Frameworks */,
F9937E6C0AD82700001D1DFB /*
QuartzCore.framework in Frameworks */,
@@ -1760,6 +1765,7 @@
F9DF3BC209B7605E00342ADE /*
SystemConfiguration.framework in Frameworks */,
F92ECBA009DEF86600A244D0 /* Security.framework
in Frameworks */,
F95ED6950B07BA4E00000BBF /*
ExceptionHandling.framework in Frameworks */,
+ F98AACF50D43E13C00D3CD64 /* libcrypto.dylib in
Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1973,6 +1979,8 @@
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
+ F98AACF40D43E13C00D3CD64 /* libcrypto.dylib */,
+ F98AACDD0D43DB5A00D3CD64 /* libssl.dylib */,
F9B801830B41E89500A5A615 /* yaz.framework */,
F95ED6910B07BA4E00000BBF /*
ExceptionHandling.framework */,
F92ECB6B09DEF86500A244D0 /* Security.framework
*/,
Modified: trunk/bibdesk/NSData_BDSKExtensions.h
===================================================================
--- trunk/bibdesk/NSData_BDSKExtensions.h 2008-01-20 19:10:32 UTC (rev
12598)
+++ trunk/bibdesk/NSData_BDSKExtensions.h 2008-01-20 21:29:13 UTC (rev
12599)
@@ -40,6 +40,12 @@
extern NSString *BDSKEncodingConversionException;
[EMAIL PROTECTED] NSData (BDSKExtensions)
+
++ (NSData *)copySha1SignatureForFile:(NSString *)absolutePath;
+
[EMAIL PROTECTED]
+
@interface NSMutableData (BDSKExtensions)
/*!
Modified: trunk/bibdesk/NSData_BDSKExtensions.m
===================================================================
--- trunk/bibdesk/NSData_BDSKExtensions.m 2008-01-20 19:10:32 UTC (rev
12598)
+++ trunk/bibdesk/NSData_BDSKExtensions.m 2008-01-20 21:29:13 UTC (rev
12599)
@@ -38,9 +38,54 @@
#import "NSData_BDSKExtensions.h"
#import "NSError_BDSKExtensions.h"
+#import <openssl/evp.h>
+
NSString *BDSKEncodingConversionException = @"BDSKEncodingConversionException";
[EMAIL PROTECTED] NSData (BDSKExtensions)
+
+// avoids reading the entire file into memory at once
++ (NSData *)copySha1SignatureForFile:(NSString *)absolutePath;
+{
+ // early out in case we can't open the file
+ int fd = open([absolutePath fileSystemRepresentation], O_RDONLY);
+ if (fd == -1)
+ return nil;
+
+ EVP_MD_CTX mdctx;
+ const EVP_MD *md = EVP_sha1();
+ int status;
+ EVP_MD_CTX_init(&mdctx);
+
+ // NB: status == 1 for success
+ status = EVP_DigestInit_ex(&mdctx, md, NULL);
+
+ // page size
+ char buffer[4096];
+
+ size_t bytesRead;
+ while ((bytesRead = read(fd, buffer, sizeof(buffer))) > 0)
+ status = EVP_DigestUpdate(&mdctx, buffer, bytesRead);
+
+ close(fd);
+
+ unsigned char md_value[EVP_MAX_MD_SIZE];
+ unsigned int md_len;
+ status = EVP_DigestFinal_ex(&mdctx, md_value, &md_len);
+ status = EVP_MD_CTX_cleanup(&mdctx);
+
+ NSData *digest = [[NSData alloc] initWithBytes:md_value length:md_len];
+#if 0
+ NSData *omniDigest = [[NSData dataWithContentsOfFile:absolutePath]
sha1Signature];
+ NSAssert([omniDigest isEqual:digest], @"sha1 signature not equal to
OmniFoundation's");
+#endif
+ return digest;
+}
+
[EMAIL PROTECTED]
+
+
@implementation NSMutableData (BDSKExtensions)
- (void)appendUTF8DataFromString:(NSString *)string;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit