[Libreoffice-commits] core.git: extensions/source
Tor Lillqvist
tml at iki.fi
Tue Feb 19 07:16:41 PST 2013
extensions/source/macosx/spotlight/OOoSpotlightImporter.m | 21 ++++++++++----
1 file changed, 16 insertions(+), 5 deletions(-)
New commits:
commit b8da61acb2bb887a7335a5db82b8b5ae1e0fab69
Author: Tor Lillqvist <tml at iki.fi>
Date: Tue Feb 19 17:10:50 2013 +0200
Fix scan for central directory end signature in ODF in Spotlight importer
Once this was fixed it seems to work nicely. Add keywords in
File:Properties and they show up in Finder's Properties, and Spotlight
finds text from the document contents.
Change-Id: I203576a5a7e53ca3485b0a82f0c6d06122f361d1
diff --git a/extensions/source/macosx/spotlight/OOoSpotlightImporter.m b/extensions/source/macosx/spotlight/OOoSpotlightImporter.m
index 964b627..a4cefc0 100644
--- a/extensions/source/macosx/spotlight/OOoSpotlightImporter.m
+++ b/extensions/source/macosx/spotlight/OOoSpotlightImporter.m
@@ -208,21 +208,32 @@ static bool areHeadersConsistent(const LocalFileHeader *header, const CentralDir
static bool findCentralDirectoryEnd(NSFileHandle *file)
{
+ // Assume the cdir end is in the last 1024 bytes
+ // Scan backward from end of file for the end signature
+
[file seekToEndOfFile];
unsigned long long fileLength = [file offsetInFile];
- [file seekToFileOffset: 0];
- while ([file offsetInFile] < fileLength)
+ if (fileLength < 10)
+ return false;
+
+ [file seekToFileOffset: (fileLength - 4)];
+
+ unsigned long long offset;
+ while ((offset = [file offsetInFile]) > 0 && offset >= fileLength - 1024)
{
- unsigned long long offset = [file offsetInFile];
unsigned signature = readInt(file);
if (signature == CDIR_END_SIG)
{
- [file seekToFileOffset: (offset - 4)];
+ // Seek back over the CDIR_END_SIG
+ [file seekToFileOffset: offset];
return true;
}
else
- [file seekToFileOffset: (offset - 3)];
+ {
+ // Seek one byte back
+ [file seekToFileOffset: (offset - 1)];
+ }
}
return false;
}
More information about the Libreoffice-commits
mailing list