extensions/source/macosx/spotlight/OOoSpotlightImporter.m | 21 ++++++++++---- 1 file changed, 16 insertions(+), 5 deletions(-)
New commits: commit b8da61acb2bb887a7335a5db82b8b5ae1e0fab69 Author: Tor Lillqvist <t...@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; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits