From 358c1613ad962e5b50d6adb82d9fe72d89678696 Mon Sep 17 00:00:00 2001 From: "Alexey.Musinov" Date: Thu, 20 Jul 2017 16:38:30 +0300 Subject: [PATCH] fix bug #35395 --- .../RtfFormatLib.xcodeproj/project.pbxproj | 2 + .../DocxFormatLib.xcodeproj/project.pbxproj | 6 ++ DesktopEditor/common/File.cpp | 92 +++++++++++++++++++ DesktopEditor/common/File.h | 11 +++ .../PdfWriter.xcodeproj/project.pbxproj | 2 + .../xml/mac/libxml2.xcodeproj/project.pbxproj | 24 +++++ .../HtmlFile.xcodeproj/project.pbxproj | 2 + .../OfficeUtils.xcodeproj/project.pbxproj | 4 +- OfficeUtils/src/ZipUtilsCP.cpp | 18 ++++ .../project.pbxproj | 2 + 10 files changed, 162 insertions(+), 1 deletion(-) create mode 100644 DesktopEditor/common/File.cpp diff --git a/ASCOfficeRtfFile/RtfFormatLib/Mac/RtfFormatLib.xcodeproj/project.pbxproj b/ASCOfficeRtfFile/RtfFormatLib/Mac/RtfFormatLib.xcodeproj/project.pbxproj index d8aa137664..44154091fa 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/Mac/RtfFormatLib.xcodeproj/project.pbxproj +++ b/ASCOfficeRtfFile/RtfFormatLib/Mac/RtfFormatLib.xcodeproj/project.pbxproj @@ -562,6 +562,7 @@ _IOS, DONT_WRITE_EMBEDDED_FONTS, AVS_USE_CONVERT_PPTX_TOCUSTOM_VML, + _XCODE, ); HEADER_SEARCH_PATHS = ( "$(inherited)", @@ -595,6 +596,7 @@ _IOS, DONT_WRITE_EMBEDDED_FONTS, AVS_USE_CONVERT_PPTX_TOCUSTOM_VML, + _XCODE, ); HEADER_SEARCH_PATHS = ( "$(inherited)", diff --git a/Common/DocxFormat/Mac/DocxFormatLib.xcodeproj/project.pbxproj b/Common/DocxFormat/Mac/DocxFormatLib.xcodeproj/project.pbxproj index d2e9e13433..5f8085f135 100644 --- a/Common/DocxFormat/Mac/DocxFormatLib.xcodeproj/project.pbxproj +++ b/Common/DocxFormat/Mac/DocxFormatLib.xcodeproj/project.pbxproj @@ -213,6 +213,7 @@ 690FE07F1E9BBA15004B26D0 /* DrawingExt.h in Headers */ = {isa = PBXBuildFile; fileRef = 690FE07B1E9BBA15004B26D0 /* DrawingExt.h */; }; 690FE0821E9BBA23004B26D0 /* DiagramData.h in Headers */ = {isa = PBXBuildFile; fileRef = 690FE0801E9BBA23004B26D0 /* DiagramData.h */; }; 690FE0831E9BBA23004B26D0 /* DiagramDrawing.h in Headers */ = {isa = PBXBuildFile; fileRef = 690FE0811E9BBA23004B26D0 /* DiagramDrawing.h */; }; + 691C3E131F20C3D500F1775E /* File.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 691C3E121F20C3D500F1775E /* File.cpp */; }; 69F181EC1C7734A700B2952B /* strings_hack_printf.h in Headers */ = {isa = PBXBuildFile; fileRef = 69F181EA1C7734A700B2952B /* strings_hack_printf.h */; }; /* End PBXBuildFile section */ @@ -431,6 +432,7 @@ 690FE07B1E9BBA15004B26D0 /* DrawingExt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DrawingExt.h; sourceTree = ""; }; 690FE0801E9BBA23004B26D0 /* DiagramData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DiagramData.h; sourceTree = ""; }; 690FE0811E9BBA23004B26D0 /* DiagramDrawing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DiagramDrawing.h; sourceTree = ""; }; + 691C3E121F20C3D500F1775E /* File.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp.preprocessed; fileEncoding = 4; path = File.cpp; sourceTree = ""; }; 69F181EA1C7734A700B2952B /* strings_hack_printf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = strings_hack_printf.h; path = ../../Common/DocxFormat/Source/Base/strings_hack_printf.h; sourceTree = ""; }; /* End PBXFileReference section */ @@ -901,6 +903,7 @@ 17E6B3BD1AC4298500F28F8B /* Base64.h */, 17E6B3BE1AC4298500F28F8B /* Directory.h */, 17E6B3BF1AC4298500F28F8B /* File.h */, + 691C3E121F20C3D500F1775E /* File.cpp */, 17E6B3C01AC4298500F28F8B /* Path.h */, 17E6B3C11AC4298500F28F8B /* Types.h */, 69F181EA1C7734A700B2952B /* strings_hack_printf.h */, @@ -1163,6 +1166,7 @@ 17C1FBAE1ACC4250006B99B3 /* oMath.cpp in Sources */, 17C1FBAF1ACC4250006B99B3 /* ChartSerialize.cpp in Sources */, 17C1FBB11ACC4250006B99B3 /* Position.cpp in Sources */, + 691C3E131F20C3D500F1775E /* File.cpp in Sources */, 17C1FBB21ACC4250006B99B3 /* Vml.cpp in Sources */, 17C1FBB31ACC4250006B99B3 /* unicode_util.cpp in Sources */, 17C1FBB41ACC4250006B99B3 /* FldSimple.cpp in Sources */, @@ -1202,6 +1206,7 @@ unix, _IOS, DONT_WRITE_EMBEDDED_FONTS, + _XCODE, ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; HEADER_SEARCH_PATHS = ( @@ -1242,6 +1247,7 @@ unix, _IOS, DONT_WRITE_EMBEDDED_FONTS, + _XCODE, ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; HEADER_SEARCH_PATHS = ( diff --git a/DesktopEditor/common/File.cpp b/DesktopEditor/common/File.cpp new file mode 100644 index 0000000000..24fb246b27 --- /dev/null +++ b/DesktopEditor/common/File.cpp @@ -0,0 +1,92 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2017 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, + * EU, LV-1021. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "File.h" + +#ifdef _IOS + +#import + +static const char* fileSystemRepresentation(const std::wstring& sFileName) +{ + NSString *path = [[NSString alloc] initWithBytes:(char*)sFileName.data() + length:sFileName.size()* sizeof(wchar_t) + encoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF32LE)]; + + return (const char*)[path fileSystemRepresentation]; +} + +namespace NSFile +{ + bool CFileBinary::OpenFile(const std::wstring& sFileName, bool bRewrite) + { + m_pFile = fopen(fileSystemRepresentation(sFileName), bRewrite ? "rb+" : "rb"); + + if (NULL == m_pFile) + return false; + + fseek(m_pFile, 0, SEEK_END); + m_lFileSize = ftell(m_pFile); + fseek(m_pFile, 0, SEEK_SET); + + m_lFilePosition = 0; + + if (0 < sFileName.length()) + { + if (((wchar_t)'/') == sFileName.c_str()[sFileName.length() - 1]) + m_lFileSize = 0x7FFFFFFF; + } + + unsigned int err = 0x7FFFFFFF; + unsigned int cur = (unsigned int)m_lFileSize; + if (err == cur) + { + CloseFile(); + return false; + } + + return true; + } + + bool CFileBinary::CreateFileW(const std::wstring& sFileName) + { + m_pFile = fopen(fileSystemRepresentation(sFileName), "wb"); + + if (NULL == m_pFile) + return false; + + m_lFilePosition = 0; + return true; + } +} + +#endif diff --git a/DesktopEditor/common/File.h b/DesktopEditor/common/File.h index 01f721c355..ffffca4333 100644 --- a/DesktopEditor/common/File.h +++ b/DesktopEditor/common/File.h @@ -618,6 +618,14 @@ namespace NSFile { return m_lFilePosition; } + + #ifdef _IOS + + bool OpenFile(const std::wstring& sFileName, bool bRewrite = false); + bool CreateFileW(const std::wstring& sFileName); + + #else + bool OpenFile(const std::wstring& sFileName, bool bRewrite = false) { #if defined(_WIN32) || defined(_WIN32_WCE) || defined(_WIN64) @@ -675,6 +683,9 @@ namespace NSFile m_lFilePosition = 0; return true; } + + #endif + bool CreateTempFile() { #if defined(_WIN32) || defined(_WIN32_WCE) || defined(_WIN64) diff --git a/DesktopEditor/ios_projects/PdfWriter/PdfWriter.xcodeproj/project.pbxproj b/DesktopEditor/ios_projects/PdfWriter/PdfWriter.xcodeproj/project.pbxproj index a7a496cbf9..4335a00aff 100644 --- a/DesktopEditor/ios_projects/PdfWriter/PdfWriter.xcodeproj/project.pbxproj +++ b/DesktopEditor/ios_projects/PdfWriter/PdfWriter.xcodeproj/project.pbxproj @@ -437,6 +437,7 @@ _IOS, FILTER_FLATE_DECODE_ENABLED, _ARM_ALIGN_, + _XCODE, ); HEADER_SEARCH_PATHS = ( "$(inherited)", @@ -476,6 +477,7 @@ _IOS, FILTER_FLATE_DECODE_ENABLED, _ARM_ALIGN_, + _XCODE, ); HEADER_SEARCH_PATHS = ( "$(inherited)", diff --git a/DesktopEditor/xml/mac/libxml2.xcodeproj/project.pbxproj b/DesktopEditor/xml/mac/libxml2.xcodeproj/project.pbxproj index 663f5f32d9..9bdf276b29 100644 --- a/DesktopEditor/xml/mac/libxml2.xcodeproj/project.pbxproj +++ b/DesktopEditor/xml/mac/libxml2.xcodeproj/project.pbxproj @@ -566,6 +566,18 @@ isa = XCBuildConfiguration; buildSettings = { DEVELOPMENT_TEAM = 2WH24U26GJ; + GCC_PREPROCESSOR_DEFINITIONS = ( + UNICODE, + _UNICODE, + USE_LITE_READER, + _USE_LIBXML2_READER_, + _USE_XMLLITE_READER_, + LINUX, + MAC, + _IOS, + LIBXML_READER_ENABLED, + _XCODE, + ); HEADER_SEARCH_PATHS = ( "$(inherited)", /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, @@ -582,6 +594,18 @@ isa = XCBuildConfiguration; buildSettings = { DEVELOPMENT_TEAM = 2WH24U26GJ; + GCC_PREPROCESSOR_DEFINITIONS = ( + UNICODE, + _UNICODE, + USE_LITE_READER, + _USE_LIBXML2_READER_, + _USE_XMLLITE_READER_, + LINUX, + MAC, + _IOS, + LIBXML_READER_ENABLED, + _XCODE, + ); HEADER_SEARCH_PATHS = ( "$(inherited)", /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, diff --git a/HtmlFile/Mac/HtmlFile/HtmlFile.xcodeproj/project.pbxproj b/HtmlFile/Mac/HtmlFile/HtmlFile.xcodeproj/project.pbxproj index bf37727cd1..bb3ac9fa0d 100644 --- a/HtmlFile/Mac/HtmlFile/HtmlFile.xcodeproj/project.pbxproj +++ b/HtmlFile/Mac/HtmlFile/HtmlFile.xcodeproj/project.pbxproj @@ -241,6 +241,7 @@ _IOS, NOMINMAX, LINUX, + _XCODE, ); HEADER_SEARCH_PATHS = ( "$(inherited)", @@ -271,6 +272,7 @@ _IOS, NOMINMAX, LINUX, + _XCODE, ); HEADER_SEARCH_PATHS = ( "$(inherited)", diff --git a/OfficeUtils/OfficeUtils.xcodeproj/project.pbxproj b/OfficeUtils/OfficeUtils.xcodeproj/project.pbxproj index e9b172305d..cf79e92a92 100644 --- a/OfficeUtils/OfficeUtils.xcodeproj/project.pbxproj +++ b/OfficeUtils/OfficeUtils.xcodeproj/project.pbxproj @@ -36,7 +36,7 @@ 69676CB81CA58BBD00D7A1D1 /* OfficeUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OfficeUtils.cpp; sourceTree = ""; }; 69676CB91CA58BBD00D7A1D1 /* OfficeUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OfficeUtils.h; sourceTree = ""; }; 69676CBA1CA58BBD00D7A1D1 /* OfficeUtilsCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OfficeUtilsCommon.h; sourceTree = ""; }; - 69676CBB1CA58BBD00D7A1D1 /* ZipUtilsCP.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ZipUtilsCP.cpp; sourceTree = ""; }; + 69676CBB1CA58BBD00D7A1D1 /* ZipUtilsCP.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp.preprocessed; fileEncoding = 4; path = ZipUtilsCP.cpp; sourceTree = ""; }; 69676CBC1CA58BBD00D7A1D1 /* ZipUtilsCP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZipUtilsCP.h; sourceTree = ""; }; 69676D291CA58BBD00D7A1D1 /* crypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypt.h; sourceTree = ""; }; 69676D2A1CA58BBD00D7A1D1 /* ioapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ioapi.c; sourceTree = ""; }; @@ -292,6 +292,7 @@ MAC, unix, _IOS, + _XCODE, ); IPHONEOS_DEPLOYMENT_TARGET = 8.2; OTHER_LDFLAGS = "-ObjC"; @@ -309,6 +310,7 @@ MAC, unix, _IOS, + _XCODE, ); IPHONEOS_DEPLOYMENT_TARGET = 8.2; OTHER_LDFLAGS = "-ObjC"; diff --git a/OfficeUtils/src/ZipUtilsCP.cpp b/OfficeUtils/src/ZipUtilsCP.cpp index 197d94ae22..4a1235a39d 100644 --- a/OfficeUtils/src/ZipUtilsCP.cpp +++ b/OfficeUtils/src/ZipUtilsCP.cpp @@ -36,6 +36,10 @@ #include "../../DesktopEditor/common/Directory.h" #include "../../DesktopEditor/common/Path.h" +#if _IOS + #import +#endif + #define WRITEBUFFERSIZE 8192 #define READBUFFERSIZE 8192 @@ -43,6 +47,13 @@ namespace ZLibZipUtils { static zipFile zipOpenHelp(const wchar_t* filename) { +#ifdef _IOS + NSString *path =[[NSString alloc] initWithBytes:filename + length:wcslen(filename)*sizeof(*filename) + encoding:NSUTF32LittleEndianStringEncoding]; + return zipOpen( (const char*)[path fileSystemRepresentation], APPEND_STATUS_CREATE ); +#endif + #if defined(_WIN32) || defined (_WIN64) zipFile zf = zipOpen( filename, APPEND_STATUS_CREATE ); #else @@ -56,6 +67,13 @@ namespace ZLibZipUtils } static unzFile unzOpenHelp(const wchar_t* filename) { +#ifdef _IOS + NSString *path =[[NSString alloc] initWithBytes:filename + length:wcslen(filename)*sizeof(*filename) + encoding:NSUTF32LittleEndianStringEncoding]; + return unzOpen ((const char*)[path fileSystemRepresentation]); +#endif + #if defined(_WIN32) || defined (_WIN64) unzFile uf = unzOpen (filename); #else diff --git a/UnicodeConverter/build/UnicodeConverter/UnicodeConverter.xcodeproj/project.pbxproj b/UnicodeConverter/build/UnicodeConverter/UnicodeConverter.xcodeproj/project.pbxproj index 41af107740..b51af60b5a 100644 --- a/UnicodeConverter/build/UnicodeConverter/UnicodeConverter.xcodeproj/project.pbxproj +++ b/UnicodeConverter/build/UnicodeConverter/UnicodeConverter.xcodeproj/project.pbxproj @@ -232,6 +232,7 @@ MAC, unix, _IOS, + _XCODE, ); HEADER_SEARCH_PATHS = ( "$(inherited)", @@ -260,6 +261,7 @@ MAC, unix, _IOS, + _XCODE, ); HEADER_SEARCH_PATHS = ( "$(inherited)",