diff options
author | Tor Lillqvist <tml@iki.fi> | 2013-02-19 17:10:50 +0200 |
---|---|---|
committer | Fridrich Strba <fridrich@documentfoundation.org> | 2013-02-25 12:23:15 +0000 |
commit | 5cb823aa71981c1fb13872e67e74bf5027f46cd0 (patch) | |
tree | 10dd69c82f0a899a44e20a3a65eb063765873f25 /extensions | |
parent | b1bc16f5b342ac9c54201cfd30de3ea87bc20538 (diff) |
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@documentfoundation.org>
Tested-by: Fridrich Strba <fridrich@documentfoundation.org>
Diffstat (limited to 'extensions')
-rw-r--r-- | extensions/source/macosx/spotlight/OOoSpotlightImporter.m | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/extensions/source/macosx/spotlight/OOoSpotlightImporter.m b/extensions/source/macosx/spotlight/OOoSpotlightImporter.m index 964b627d5ca2..3a72d5337051 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; } |