[Libreoffice-commits] core.git: Branch 'libreoffice-4-0' - extensions/source
Tor Lillqvist
tml at iki.fi
Mon Feb 25 04:23:34 PST 2013
extensions/source/macosx/spotlight/OOoSpotlightImporter.m | 27 +++++++++++---
1 file changed, 22 insertions(+), 5 deletions(-)
New commits:
commit 5cb823aa71981c1fb13872e67e74bf5027f46cd0
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.
(cherry picked from commit b8da61acb2bb887a7335a5db82b8b5ae1e0fab69)
(cherry picked from commit 95e6a0885e65cc57b11719cc0658be9d8b78fba9)
Change-Id: I9adc65d1821d0920ce3a39d05697557c4303ff68
Reviewed-on: https://gerrit.libreoffice.org/2265
Reviewed-by: Fridrich Strba <fridrich at documentfoundation.org>
Tested-by: Fridrich Strba <fridrich at documentfoundation.org>
diff --git a/extensions/source/macosx/spotlight/OOoSpotlightImporter.m b/extensions/source/macosx/spotlight/OOoSpotlightImporter.m
index 964b627..3a72d53 100644
--- a/extensions/source/macosx/spotlight/OOoSpotlightImporter.m
+++ b/extensions/source/macosx/spotlight/OOoSpotlightImporter.m
@@ -208,21 +208,38 @@ 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 limit;
+ if (fileLength > 1024)
+ limit = fileLength - 1024;
+ else
+ limit = 0;
+
+ unsigned long long offset;
+ while ((offset = [file offsetInFile]) > limit)
{
- 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