From 69087abc56237d4fdf6557a47602583b7fe733ac Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 21 Sep 2019 16:36:22 +0200 Subject: [PATCH] Ensure that the aiString lenght is 4 bytes independent which platform and add mingw back to appveyor. --- appveyor.yml | 4 ++++ code/Material/MaterialSystem.cpp | 18 +----------------- code/glTF/glTFImporter.cpp | 2 +- code/glTF2/glTF2Importer.cpp | 2 +- include/assimp/types.h | 7 ++++++- 5 files changed, 13 insertions(+), 20 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 3729ea028..849b05a1d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -16,6 +16,7 @@ matrix: image: - Visual Studio 2015 - Visual Studio 2017 + - MinGW platform: - Win32 @@ -26,10 +27,13 @@ configuration: Release install: - set PATH=C:\Ruby24-x64\bin;%PATH% - set CMAKE_DEFINES -DASSIMP_WERROR=ON + - if [%COMPILER%]==[MinGW] set PATH=C:\MinGW\bin;%PATH% - if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" set CMAKE_GENERATOR_NAME=Visual Studio 14 2015 - if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2017" set CMAKE_GENERATOR_NAME=Visual Studio 15 2017 - if "%platform%"=="x64" set CMAKE_GENERATOR_NAME=%CMAKE_GENERATOR_NAME% Win64 - cmake %CMAKE_DEFINES% -G "%CMAKE_GENERATOR_NAME%" . + # Rename sh.exe as sh.exe in PATH interferes with MinGW + - rename "C:\Program Files\Git\usr\bin\sh.exe" "sh2.exe" - set PATH=%PATH%;"C:\\Program Files (x86)\\Inno Setup 5" - ps: Invoke-WebRequest -Uri https://download.microsoft.com/download/5/7/b/57b2947c-7221-4f33-b35e-2fc78cb10df4/vc_redist.x64.exe -OutFile .\packaging\windows-innosetup\vc_redist.x64.exe - ps: Invoke-WebRequest -Uri https://download.microsoft.com/download/1/d/8/1d8137db-b5bb-4925-8c5d-927424a2e4de/vc_redist.x86.exe -OutFile .\packaging\windows-innosetup\vc_redist.x86.exe diff --git a/code/Material/MaterialSystem.cpp b/code/Material/MaterialSystem.cpp index d0b39093b..ecdf9942c 100644 --- a/code/Material/MaterialSystem.cpp +++ b/code/Material/MaterialSystem.cpp @@ -545,23 +545,7 @@ aiReturn aiMaterial::AddProperty (const aiString* pInput, unsigned int type, unsigned int index) { - // We don't want to add the whole buffer .. write a 32 bit length - // prefix followed by the zero-terminated UTF8 string. - // (HACK) I don't want to break the ABI now, but we definitely - // ought to change aiString::mLength to uint32_t one day. - if (sizeof(size_t) == 8) { - aiString copy = *pInput; - uint32_t* s = reinterpret_cast(©.length); - s[1] = static_cast(pInput->length); - - return AddBinaryProperty(s+1, - static_cast(pInput->length+1+4), - pKey, - type, - index, - aiPTI_String); - } - ai_assert(sizeof(size_t)==4); + ai_assert(sizeof(ai_uint32)==4); return AddBinaryProperty(pInput, static_cast(pInput->length+1+4), pKey, diff --git a/code/glTF/glTFImporter.cpp b/code/glTF/glTFImporter.cpp index e470050b9..9ecd742f6 100644 --- a/code/glTF/glTFImporter.cpp +++ b/code/glTF/glTFImporter.cpp @@ -266,7 +266,7 @@ void glTFImporter::ImportMeshes(glTF::Asset& r) aim->mName = mesh.id; if (mesh.primitives.size() > 1) { - size_t& len = aim->mName.length; + ai_uint32& len = aim->mName.length; aim->mName.data[len] = '-'; len += 1 + ASSIMP_itoa10(aim->mName.data + len + 1, unsigned(MAXLEN - len - 1), p); } diff --git a/code/glTF2/glTF2Importer.cpp b/code/glTF2/glTF2Importer.cpp index d1871ce0e..9197f3b94 100644 --- a/code/glTF2/glTF2Importer.cpp +++ b/code/glTF2/glTF2Importer.cpp @@ -385,7 +385,7 @@ void glTF2Importer::ImportMeshes(glTF2::Asset& r) aim->mName = mesh.name.empty() ? mesh.id : mesh.name; if (mesh.primitives.size() > 1) { - size_t& len = aim->mName.length; + ai_uint32& len = aim->mName.length; aim->mName.data[len] = '-'; len += 1 + ASSIMP_itoa10(aim->mName.data + len + 1, unsigned(MAXLEN - len - 1), p); } diff --git a/include/assimp/types.h b/include/assimp/types.h index 331b8cd03..e0a004c92 100644 --- a/include/assimp/types.h +++ b/include/assimp/types.h @@ -53,6 +53,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include // Our compile configuration #include "defs.h" @@ -65,11 +66,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "matrix4x4.h" #include "quaternion.h" +typedef int32_t ai_int32; +typedef uint32_t ai_uint32 ; + #ifdef __cplusplus #include #include // for std::nothrow_t #include // for aiString::Set(const std::string&) + namespace Assimp { //! @cond never namespace Intern { @@ -379,7 +384,7 @@ struct aiString /** Binary length of the string excluding the terminal 0. This is NOT the * logical length of strings containing UTF-8 multi-byte sequences! It's * the number of bytes from the beginning of the string to its end.*/ - size_t length; + ai_uint32 length; /** String buffer. Size limit is MAXLEN */ char data[MAXLEN];