[Libreoffice-commits] core.git: Branch 'distro/suse/suse-3.6' - 5 commits - instsetoo_native/util shell/inc shell/source solenv/inc
Andras Timar
atimar at suse.com
Fri Nov 15 13:39:18 PST 2013
instsetoo_native/util/openoffice.lst | 8
shell/inc/internal/stream_helper.hxx | 4
shell/inc/internal/types.hxx | 2
shell/source/win32/shlxthandler/ooofilt/stream_helper.cxx | 7
shell/source/win32/zipfile/zipfile.cxx | 115 +++++++++-----
solenv/inc/minor.mk | 4
6 files changed, 91 insertions(+), 49 deletions(-)
New commits:
commit 7d8745e4f852f867ac7bc02997b1be353633449f
Author: Andras Timar <atimar at suse.com>
Date: Wed Oct 16 15:05:28 2013 +0200
Bump for 3.6-32
Change-Id: I3dccc20c6b6a237954c136a14af215c6c385a877
diff --git a/instsetoo_native/util/openoffice.lst b/instsetoo_native/util/openoffice.lst
index 21ee86d..1393da5 100644
--- a/instsetoo_native/util/openoffice.lst
+++ b/instsetoo_native/util/openoffice.lst
@@ -32,7 +32,7 @@ Globals
CREATE_MSP_INSTALLSET 1
UPDATE_DATABASE_LISTNAME finals_instsetoo.txt
PACKAGEMAP package_names.txt,package_names_ext.txt
- WINDOWSPATCHLEVEL 31
+ WINDOWSPATCHLEVEL 32
OOOVENDOR The Document Foundation
OOODOWNLOADNAME 1
BUILDIDCWS {buildidcws}
@@ -57,7 +57,7 @@ LibreOffice
BRANDPACKAGEVERSION 3.6
USERDIRPRODUCTVERSION 3
ABOUTBOXPRODUCTVERSION 3.6
- ABOUTBOXPRODUCTVERSIONSUFFIX :build-531
+ ABOUTBOXPRODUCTVERSIONSUFFIX :build-532
BASEPRODUCTVERSION 3.6
PCPFILENAME libreoffice.pcp
UPDATEURL http://update.libreoffice.org/check.php
@@ -110,7 +110,7 @@ LibreOffice_Dev
BRANDPACKAGEVERSION 3.6
USERDIRPRODUCTVERSION 3
ABOUTBOXPRODUCTVERSION 3.6
- ABOUTBOXPRODUCTVERSIONSUFFIX :build-531
+ ABOUTBOXPRODUCTVERSIONSUFFIX :build-532
BASEPRODUCTVERSION 3.6
DEVELOPMENTPRODUCT 1
BASISPACKAGEPREFIX lodevbasis
@@ -380,7 +380,7 @@ OxygenOffice
BRANDPACKAGEVERSION 3.6
USERDIRPRODUCTVERSION 3
ABOUTBOXPRODUCTVERSION 3.6
- ABOUTBOXPRODUCTVERSIONSUFFIX :build-531
+ ABOUTBOXPRODUCTVERSIONSUFFIX :build-532
BASEPRODUCTVERSION 3.6
PCPFILENAME openoffice.pcp
UPDATEURL http://update.libreoffice.org/check.php
diff --git a/solenv/inc/minor.mk b/solenv/inc/minor.mk
index 59249f5..7fd1240 100644
--- a/solenv/inc/minor.mk
+++ b/solenv/inc/minor.mk
@@ -1,6 +1,6 @@
RSCVERSION=360
-RSCREVISION=360m1(Build:531)
-BUILD=531
+RSCREVISION=360m1(Build:532)
+BUILD=532
LAST_MINOR=m1
SOURCEVERSION=OOO360
commit 86b94ce821f12a4bdd15b9e3f5333f5dbe563fd8
Author: Tor Lillqvist <tml at collabora.com>
Date: Fri Oct 4 19:36:57 2013 +0200
fdo#67534: try to avoid file locking in Explorer shell extensions
Change-Id: I287395f6c25b1bfb9b9482166ae6f34d9af8f455
diff --git a/shell/source/win32/shlxthandler/ooofilt/stream_helper.cxx b/shell/source/win32/shlxthandler/ooofilt/stream_helper.cxx
index 5ab0c20..f41aa09 100644
--- a/shell/source/win32/shlxthandler/ooofilt/stream_helper.cxx
+++ b/shell/source/win32/shlxthandler/ooofilt/stream_helper.cxx
@@ -115,7 +115,8 @@ long BufferStream::sseek (long offset, int origin)
FileStream::FileStream(const char *filename) :
file(0)
{
- file = fopen(filename, "rb");
+ // fdo#67534: avoid locking to not interfere with soffice opening the file
+ file = _fsopen(filename, "rb", _SH_DENYNO);
}
FileStream::~FileStream()
commit e5a1c6461d4ca4d82925dccabd91e1c08bb560b6
Author: Fridrich Å trba <fridrich.strba at bluewin.ch>
Date: Tue Jul 16 17:13:14 2013 +0200
bnc#829017 fix issue with negative seeks in win32 shell extension
Change-Id: Ia8072f78ad43281e406377922f50f8de53194f1b
diff --git a/shell/inc/internal/stream_helper.hxx b/shell/inc/internal/stream_helper.hxx
index f0d41bb..23745d7 100644
--- a/shell/inc/internal/stream_helper.hxx
+++ b/shell/inc/internal/stream_helper.hxx
@@ -40,7 +40,7 @@ public:
~BufferStream();
unsigned long sread (unsigned char *vuf, unsigned long size);
long stell ();
- long sseek (unsigned long offset, int origin);
+ long sseek (long offset, int origin);
private:
IStream *stream;
};
@@ -52,7 +52,7 @@ public:
~FileStream();
unsigned long sread (unsigned char *buf, unsigned long size);
long stell ();
- long sseek (unsigned long offset, int origin);
+ long sseek (long offset, int origin);
private:
FILE *file;
};
diff --git a/shell/inc/internal/types.hxx b/shell/inc/internal/types.hxx
index c6fbfac..628c9f6 100644
--- a/shell/inc/internal/types.hxx
+++ b/shell/inc/internal/types.hxx
@@ -87,7 +87,7 @@ public:
virtual ~StreamInterface() {}
virtual unsigned long sread (unsigned char* vuf, unsigned long size) = 0;
virtual long stell () = 0;
- virtual long sseek (unsigned long offset, int origin) = 0;
+ virtual long sseek (long offset, int origin) = 0;
};
#endif
diff --git a/shell/source/win32/shlxthandler/ooofilt/stream_helper.cxx b/shell/source/win32/shlxthandler/ooofilt/stream_helper.cxx
index e4ace54..5ab0c20 100644
--- a/shell/source/win32/shlxthandler/ooofilt/stream_helper.cxx
+++ b/shell/source/win32/shlxthandler/ooofilt/stream_helper.cxx
@@ -83,7 +83,7 @@ long BufferStream::stell ()
return -1;
}
-long BufferStream::sseek (unsigned long offset, int origin)
+long BufferStream::sseek (long offset, int origin)
{
HRESULT hr;
LARGE_INTEGER Move;
@@ -138,7 +138,7 @@ long FileStream::stell ()
return -1L;
}
-long FileStream::sseek (unsigned long offset, int origin)
+long FileStream::sseek (long offset, int origin)
{
if (file)
return fseek(file, offset, origin);
commit 7a530a1fc9a318c21a697ac17fc8c7c6ca63fe6b
Author: Mathieu Parent <mathieu.parent at nantesmetropole.fr>
Date: Mon Oct 14 22:23:05 2013 +0100
fdo#56007 - Read more bytes on Zip read (for thumbnails)
Change-Id: Ia8c6caa44ed8019a8139beb5a855f0f28805544d
diff --git a/shell/source/win32/zipfile/zipfile.cxx b/shell/source/win32/zipfile/zipfile.cxx
index 2188579..2a31247 100644
--- a/shell/source/win32/zipfile/zipfile.cxx
+++ b/shell/source/win32/zipfile/zipfile.cxx
@@ -127,18 +127,42 @@ static unsigned char readByte(StreamInterface *stream)
static unsigned short readShort(StreamInterface *stream)
{
- unsigned short p0 = (unsigned short)readByte(stream);
- unsigned short p1 = (unsigned short)readByte(stream);
- return (unsigned short)(p0|(p1<<8));
+ if (!stream || stream->stell() == -1)
+ throw IOException(-1);
+ unsigned short tmpBuf;
+ unsigned long numBytesRead = stream->sread(
+ reinterpret_cast<unsigned char *>( &tmpBuf ), 2);
+ if (numBytesRead != 2)
+ throw IOException(-1);
+ return tmpBuf;
}
static unsigned readInt(StreamInterface *stream)
{
- unsigned p0 = (unsigned)readByte(stream);
- unsigned p1 = (unsigned)readByte(stream);
- unsigned p2 = (unsigned)readByte(stream);
- unsigned p3 = (unsigned)readByte(stream);
- return (unsigned)(p0|(p1<<8)|(p2<<16)|(p3<<24));
+ if (!stream || stream->stell() == -1)
+ throw IOException(-1);
+ unsigned tmpBuf;
+ unsigned long numBytesRead = stream->sread(
+ reinterpret_cast<unsigned char *>( &tmpBuf ), 4);
+ if (numBytesRead != 4)
+ throw IOException(-1);
+ return tmpBuf;
+}
+
+static std::string readString(StreamInterface *stream, unsigned long size)
+{
+ if (!stream || stream->stell() == -1)
+ throw IOException(-1);
+ unsigned char *tmp = new unsigned char[size];
+ if (!tmp)
+ throw IOException(-1);
+ unsigned long numBytesRead = stream->sread(tmp, size);
+ if (numBytesRead != size)
+ throw IOException(-1);
+
+ std::string aStr((char *)tmp, size);
+ delete [] tmp;
+ return aStr;
}
static bool readCentralDirectoryEnd(StreamInterface *stream, CentralDirectoryEnd &end)
@@ -156,9 +180,7 @@ static bool readCentralDirectoryEnd(StreamInterface *stream, CentralDirectoryEnd
end.cdir_size = readInt(stream);
end.cdir_offset = readInt(stream);
end.comment_size = readShort(stream);
- end.comment.clear();
- for (unsigned short i = 0; i < end.comment_size; i++)
- end.comment.append(1,(char)readByte(stream));
+ end.comment.assign(readString(stream, end.comment_size));
}
catch (...)
{
@@ -192,15 +214,9 @@ static bool readCentralDirectoryEntry(StreamInterface *stream, CentralDirectoryE
entry.external_attr = readInt(stream);
entry.offset = readInt(stream);
unsigned short i = 0;
- entry.filename.clear();
- for (i=0; i < entry.filename_size; i++)
- entry.filename.append(1,(char)readByte(stream));
- entry.extra_field.clear();
- for (i=0; i < entry.extra_field_size; i++)
- entry.extra_field.append(1,(char)readByte(stream));
- entry.file_comment.clear();
- for (i=0; i < entry.file_comment_size; i++)
- entry.file_comment.append(1,(char)readByte(stream));
+ entry.filename.assign(readString(stream, entry.filename_size));
+ entry.extra_field.assign(readString(stream, entry.extra_field_size));
+ entry.file_comment.assign(readString(stream, entry.file_comment_size));
}
catch (...)
{
@@ -228,12 +244,8 @@ static bool readLocalFileHeader(StreamInterface *stream, LocalFileHeader &header
header.filename_size = readShort(stream);
header.extra_field_size = readShort(stream);
unsigned short i = 0;
- header.filename.clear();
- for (i=0; i < header.filename_size; i++)
- header.filename.append(1,(char)readByte(stream));
- header.extra_field.clear();
- for (i=0; i < header.extra_field_size; i++)
- header.extra_field.append(1,(char)readByte(stream));
+ header.filename.assign(readString(stream, header.filename_size));
+ header.extra_field.assign(readString(stream, header.extra_field_size));
}
catch (...)
{
commit 195deb83e0752fd2835866384079a2ac27a84ad6
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Fri Oct 11 17:43:19 2013 +0100
fdo#56007 - fast zip directory find to accelerate Windows Explorer thumbnail.
Change-Id: Id9436def56f40d2bb54dea35bea916bd99964653
diff --git a/shell/source/win32/zipfile/zipfile.cxx b/shell/source/win32/zipfile/zipfile.cxx
index 70a20f7..2188579 100644
--- a/shell/source/win32/zipfile/zipfile.cxx
+++ b/shell/source/win32/zipfile/zipfile.cxx
@@ -111,6 +111,9 @@ struct CentralDirectoryEnd
#define LOC_FILE_HEADER_SIG 0x04034b50
#define CDIR_END_SIG 0x06054b50
+// This little lot performs in a truly appalling way without
+// buffering eg. on an IStream.
+
static unsigned char readByte(StreamInterface *stream)
{
if (!stream || stream->stell() == -1)
@@ -259,31 +262,57 @@ static bool areHeadersConsistent(const LocalFileHeader &header, const CentralDir
return true;
}
+#define BLOCK_SIZE 0x800
+
+static bool findSignatureAtOffset(StreamInterface *stream, unsigned long nOffset)
+{
+ // read in reasonably sized chunk, and read more, to get overlapping sigs
+ unsigned char aBuffer[ BLOCK_SIZE + 4 ];
+
+ stream->sseek(nOffset, SEEK_SET);
+
+ unsigned long nBytesRead = stream->sread(aBuffer, sizeof(aBuffer));
+ if (nBytesRead < 0)
+ return false;
+
+ for (long n = nBytesRead - 4; n >= 0; n--)
+ {
+ if (aBuffer[n ] == 0x50 && aBuffer[n+1] == 0x4b &&
+ aBuffer[n+2] == 0x05 && aBuffer[n+3] == 0x06)
+ { // a palpable hit ...
+ stream->sseek(nOffset + n, SEEK_SET);
+ return true;
+ }
+ }
+
+ return false;
+}
+
static bool findCentralDirectoryEnd(StreamInterface *stream)
{
if (!stream)
return false;
- stream->sseek(0, SEEK_SET);
- if (stream->sseek(-1024, SEEK_END)) stream->sseek(0, SEEK_SET);
+
+ stream->sseek(0,SEEK_END);
+
+ long nLength = stream->stell();
+ if (nLength == -1)
+ return false;
+
try
{
- while (stream->stell() != -1)
+ for (long nOffset = nLength - BLOCK_SIZE;
+ nOffset > 0; nOffset -= BLOCK_SIZE)
{
- unsigned signature = readInt(stream);
- if (signature == CDIR_END_SIG)
- {
- stream->sseek(-4, SEEK_CUR);
+ if (findSignatureAtOffset(stream, nOffset))
return true;
- }
- else
- stream->sseek(-3, SEEK_CUR);
}
+ return findSignatureAtOffset(stream, 0);
}
catch (...)
{
return false;
}
- return false;
}
static bool isZipStream(StreamInterface *stream)
More information about the Libreoffice-commits
mailing list