build/win32/libcdr.vcproj | 4 ++-- build/win32/libcdr.vcxproj | 4 ++-- configure.ac | 27 ++++++++++++++++++--------- src/lib/CDRDocument.cpp | 2 +- src/lib/libcdr_utils.cpp | 33 ++++++++++++++++++--------------- 5 files changed, 41 insertions(+), 29 deletions(-)
New commits: commit 2b7062a1a9405a652a36acb72befa0d9d6d06595 Author: Fridrich Å trba <fridrich.st...@bluewin.ch> Date: Wed Jan 23 10:42:10 2013 +0100 Make ICU dependency optional (opt-out) diff --git a/build/win32/libcdr.vcproj b/build/win32/libcdr.vcproj index 7cf7334..8ee406e 100755 --- a/build/win32/libcdr.vcproj +++ b/build/win32/libcdr.vcproj @@ -42,7 +42,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="$(LIBWPD_INCLUDE_DIR),$(LIBWPG_INCLUDE_DIR),$(LCMS2_INCLUDE_DIR),$(ZLIB_INCLUDE_DIR),$(ICU_INCLUDE_DIR)" - PreprocessorDefinitions="_DEBUG;DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS" + PreprocessorDefinitions="_DEBUG;DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;ENABLE_LANGUAGE_GUESSING" BasicRuntimeChecks="3" RuntimeLibrary="3" TreatWChar_tAsBuiltInType="false" @@ -117,7 +117,7 @@ Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="$(LIBWPD_INCLUDE_DIR),$(LIBWPG_INCLUDE_DIR),$(LCMS2_INCLUDE_DIR),$(ZLIB_INCLUDE_DIR),$(ICU_INCLUDE_DIR)" - PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS" + PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;ENABLE_LANGUAGE_GUESSING" StringPooling="true" RuntimeLibrary="2" EnableFunctionLevelLinking="true" diff --git a/build/win32/libcdr.vcxproj b/build/win32/libcdr.vcxproj index 355ec43..46be0de 100755 --- a/build/win32/libcdr.vcxproj +++ b/build/win32/libcdr.vcxproj @@ -44,7 +44,7 @@ <ClCompile> <Optimization>Disabled</Optimization> <AdditionalIncludeDirectories>$(LIBWPD_INCLUDE_DIR);$(LIBWPG_INCLUDE_DIR);$(LCMS2_INCLUDE_DIR);$(ZLIB_INCLUDE_DIR);$(ICU_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_DEBUG;DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>_DEBUG;DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;ENABLE_LANGUAGE_GUESSING;%(PreprocessorDefinitions)</PreprocessorDefinitions> <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <RuntimeTypeInfo>true</RuntimeTypeInfo> @@ -75,7 +75,7 @@ <Optimization>MaxSpeed</Optimization> <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion> <AdditionalIncludeDirectories>$(LIBWPD_INCLUDE_DIR);$(LIBWPG_INCLUDE_DIR);$(LCMS2_INCLUDE_DIR);$(ZLIB_INCLUDE_DIR);$(ICU_INCLUDE_DIR);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;ENABLE_LANGUAGE_GUESSING;%(PreprocessorDefinitions)</PreprocessorDefinitions> <StringPooling>true</StringPooling> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> diff --git a/configure.ac b/configure.ac index f5ec74f..8807a1a 100644 --- a/configure.ac +++ b/configure.ac @@ -62,18 +62,27 @@ PKG_CHECK_MODULES([ZLIB],[zlib],[],[ AC_SUBST(ZLIB_CFLAGS) AC_SUBST(ZLIB_LIBS) +AC_ARG_ENABLE([language-guessing], + [AS_HELP_STRING([--disable-language-guessing], [Disable language guessing using ICU])], + [enable_language_guessing="$enableval"], + [enable_language_guessing=yes] +) + # ======== # Find icu # ======== -AC_PATH_PROG([ICU_CONFIG],[icu-config]) -AC_MSG_CHECKING([ICU installation]) -if ${ICU_CONFIG} --cflags >/dev/null 2>&1; then - ICU_CFLAGS=`${ICU_CONFIG} --cppflags-searchpath` - ICU_LIBS=`${ICU_CONFIG} --ldflags` - AC_MSG_RESULT([found]) -else - AC_MSG_ERROR([libicu config program icu-config not found]) -fi +AS_IF([test x$enable_language_guessing = xyes], [ + AC_PATH_PROG([ICU_CONFIG],[icu-config]) + AC_MSG_CHECKING([ICU installation]) + if ${ICU_CONFIG} --cflags >/dev/null 2>&1; then + ICU_CFLAGS=`${ICU_CONFIG} --cppflags-searchpath` + ICU_LIBS=`${ICU_CONFIG} --ldflags` + AC_MSG_RESULT([found]) + AC_DEFINE([ENABLE_LANGUAGE_GUESSING], [1], [Enable language guessing using ICU]) + else + AC_MSG_ERROR([libicu config program icu-config not found]) + fi], +) AC_SUBST(ICU_CFLAGS) AC_SUBST(ICU_LIBS) diff --git a/src/lib/libcdr_utils.cpp b/src/lib/libcdr_utils.cpp index 48cf6c5..76b7116 100644 --- a/src/lib/libcdr_utils.cpp +++ b/src/lib/libcdr_utils.cpp @@ -28,16 +28,20 @@ */ #include <string.h> -#include <unicode/ucsdet.h> + #include "libcdr_utils.h" +#ifdef ENABLE_LANGUAGE_GUESSING +#include <unicode/ucsdet.h> +#endif + #define CDR_NUM_ELEMENTS(array) sizeof(array)/sizeof(array[0]) #define SURROGATE_VALUE(h,l) (((h) - 0xd800) * 0x400 + (l) - 0xdc00 + 0x10000) namespace { - +#ifdef ENABLE_LANGUAGE_GUESSING static unsigned short getEncodingFromICUName(const char *name) { // ANSI @@ -113,6 +117,7 @@ static unsigned short getEncoding(const unsigned char *buffer, unsigned bufferLe return 0; } } +#endif static void _appendUCS4(WPXString &text, unsigned ucs4Character) { @@ -529,8 +534,10 @@ void libcdr::appendCharacters(WPXString &text, std::vector<unsigned char> charac 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x01B0, 0x20AB, 0x00FF }; +#ifdef ENABLE_LANGUAGE_GUESSING if (!charset && characters.size()) charset = getEncoding(&characters[0], characters.size()); +#endif for (std::vector<unsigned char>::const_iterator iter = characters.begin(); iter != characters.end(); ++iter) commit e7489f20cf800a61820fad3c94c370c2c35ea73c Author: Fridrich Å trba <fridrich.st...@bluewin.ch> Date: Wed Jan 23 10:40:41 2013 +0100 Avoid null pointer crashes inside ICU diff --git a/src/lib/libcdr_utils.cpp b/src/lib/libcdr_utils.cpp index 28162e3..48cf6c5 100644 --- a/src/lib/libcdr_utils.cpp +++ b/src/lib/libcdr_utils.cpp @@ -81,35 +81,31 @@ static unsigned short getEncodingFromICUName(const char *name) return 0; } - static unsigned short getEncoding(const unsigned char *buffer, unsigned bufferLength) { + if (!buffer || !bufferLength) + return 0; UErrorCode status = U_ZERO_ERROR; UCharsetDetector *csd = 0; const UCharsetMatch *csm = 0; try { csd = ucsdet_open(&status); - if (U_FAILURE(status)) - throw libcdr::EncodingException(); + if (U_FAILURE(status) || !csd) + return 0; + ucsdet_enableInputFilter(csd, TRUE); ucsdet_setText(csd, (const char *)buffer, bufferLength, &status); if (U_FAILURE(status)) throw libcdr::EncodingException(); - ucsdet_enableInputFilter(csd, TRUE); csm = ucsdet_detect(csd, &status); - if (U_FAILURE(status)) + if (U_FAILURE(status) || !csm) throw libcdr::EncodingException(); const char *name = ucsdet_getName(csm, &status); - if (U_FAILURE(status)) + if (U_FAILURE(status) || !name) throw libcdr::EncodingException(); - if (name) - { - unsigned short encoding = getEncodingFromICUName(name); - ucsdet_close(csd); - return encoding; - } + unsigned short encoding = getEncodingFromICUName(name); ucsdet_close(csd); - return 0; + return encoding; } catch (const libcdr::EncodingException &) { commit d2489548a97c3d1b200cf51fa26d20966076b47c Author: Fridrich Å trba <fridrich.st...@bluewin.ch> Date: Wed Jan 23 10:38:11 2013 +0100 astyle diff --git a/src/lib/CDRDocument.cpp b/src/lib/CDRDocument.cpp index 2633954..a1ae8d2 100644 --- a/src/lib/CDRDocument.cpp +++ b/src/lib/CDRDocument.cpp @@ -134,7 +134,7 @@ bool libcdr::CDRDocument::parse(::WPXInputStream *input, libwpg::WPGPaintInterfa { version = getCDRVersion(input); } - catch (libcdr::EndOfStreamException const&) + catch (libcdr::EndOfStreamException const &) { // This can only happen if isSupported() has not been called before return false;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits