From f94143a9040fe81170cead64dfea8c53da7bd2f3 Mon Sep 17 00:00:00 2001 From: victory Date: Mon, 13 Feb 2023 19:31:34 +0800 Subject: [PATCH] fix: Fix compile error on windows platform --- build-windows/build_headers.list | 2 + .../mailcore2/mailcore2/mailcore2.vcxproj | 922 +++++++++--------- src/async/imap/MCIMAPOperation.cpp | 2 +- src/async/imap/MCIMAPOperation.h | 2 +- src/core/basetypes/MCData.cpp | 7 + src/core/basetypes/MCDataDecoderUtils.cpp | 2 + src/core/basetypes/MCString.cpp | 2 +- src/core/basetypes/MCUtils.h | 7 +- src/core/basetypes/MmanWin32.c | 180 ++++ src/core/basetypes/MmanWin32.h | 55 ++ 10 files changed, 717 insertions(+), 464 deletions(-) create mode 100644 src/core/basetypes/MmanWin32.c create mode 100644 src/core/basetypes/MmanWin32.h diff --git a/build-windows/build_headers.list b/build-windows/build_headers.list index 4662e54c7..50e21e5d5 100644 --- a/build-windows/build_headers.list +++ b/build-windows/build_headers.list @@ -86,7 +86,9 @@ src\async\imap\MCIMAPAsyncSession.h src\async\imap\MCIMAPOperation.h src\async\imap\MCIMAPFetchFoldersOperation.h src\async\imap\MCIMAPAppendMessageOperation.h +src\async\imap\MCIMAPCheckAccountOperation.h src\async\imap\MCIMAPCopyMessagesOperation.h +src\async\imap\MCIMAPCustomCommandOperation.h src\async\imap\MCIMAPMoveMessagesOperation.h src\async\imap\MCIMAPFetchMessagesOperation.h src\async\imap\MCIMAPFetchContentOperation.h diff --git a/build-windows/mailcore2/mailcore2/mailcore2.vcxproj b/build-windows/mailcore2/mailcore2/mailcore2.vcxproj index 040d7fe4e..97bba87b7 100644 --- a/build-windows/mailcore2/mailcore2/mailcore2.vcxproj +++ b/build-windows/mailcore2/mailcore2/mailcore2.vcxproj @@ -1,461 +1,463 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {AAD35E01-77E4-43CB-BBB4-F7F6692EA829} - Win32Proj - mailcore2 - - - - DynamicLibrary - true - v120 - Unicode - - - DynamicLibrary - true - v120 - Unicode - - - DynamicLibrary - false - v120 - true - Unicode - - - DynamicLibrary - false - v120 - true - Unicode - - - - - - - - - - - - - - - - - - - true - - - true - - - false - - - false - - - - NotUsing - Level3 - Disabled - MAILCORE_DLL;ZLIB_DLL;_WINDLL;%(PreprocessorDefinitions) - true - %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory);..\..\include;..\..\..\Externals\include;..\..\..\src\core\basetypes;..\..\..\src\core\zip;..\..\..\src\core\zip\minizip;..\..\..\src\core\renderer;..\..\..\src\core/rfc822;..\..\..\src\core/imap;..\..\..\src\core\abstract;..\..\..\src\core\security;..\..\..\src\core\imap;..\..\..\src\core\pop;..\..\..\src\core\nntp;..\..\..\src\core\smtp - - - Windows - true - Crypt32.lib;libtidy.lib;libxml2.lib;ssleay32MD.lib;libeay32MD.lib;zlib.lib;User32.lib;Ws2_32.lib;libctemplate.lib;kernel32.lib;libetpan.lib;pthreadVC2.lib;icudt.lib;icuin.lib;icuio.lib;icule.lib;iculx.lib;icuuc.lib;%(AdditionalDependencies) - ..\..\..\Externals\lib;..\..\..\Externals\lib\x86 - - - - - NotUsing - Level3 - Disabled - MAILCORE_DLL;ZLIB_DLL;_WINDLL;%(PreprocessorDefinitions) - true - %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory);..\..\include;..\..\..\Externals\include;..\..\..\src\core\basetypes;..\..\..\src\core\zip;..\..\..\src\core\zip\minizip;..\..\..\src\core\renderer;..\..\..\src\core/rfc822;..\..\..\src\core/imap;..\..\..\src\core\abstract;..\..\..\src\core\security;..\..\..\src\core\imap;..\..\..\src\core\pop;..\..\..\src\core\nntp;..\..\..\src\core\smtp - - - Windows - true - Crypt32.lib;libtidy.lib;libxml2.lib;ssleay32MD.lib;libeay32MD.lib;zlib.lib;User32.lib;Ws2_32.lib;libctemplate.lib;kernel32.lib;libetpan.lib;pthreadVC2.lib;icudt.lib;icuin.lib;icuio.lib;icule.lib;iculx.lib;icuuc.lib;%(AdditionalDependencies) - ..\..\..\Externals\lib64;..\..\..\Externals\lib\x64 - - - - - Level3 - NotUsing - MaxSpeed - true - true - MAILCORE_DLL;ZLIB_DLL;_WINDLL;%(PreprocessorDefinitions) - true - %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory);..\..\include;..\..\..\Externals\include;..\..\..\src\core\basetypes;..\..\..\src\core\zip;..\..\..\src\core\zip\minizip;..\..\..\src\core\renderer;..\..\..\src\core/rfc822;..\..\..\src\core/imap;..\..\..\src\core\abstract;..\..\..\src\core\security;..\..\..\src\core\imap;..\..\..\src\core\pop;..\..\..\src\core\nntp;..\..\..\src\core\smtp - - - Windows - true - true - true - Crypt32.lib;libtidy.lib;libxml2.lib;ssleay32MD.lib;libeay32MD.lib;zlib.lib;User32.lib;Ws2_32.lib;libctemplate.lib;kernel32.lib;libetpan.lib;pthreadVC2.lib;icudt.lib;icuin.lib;icuio.lib;icule.lib;iculx.lib;icuuc.lib;%(AdditionalDependencies) - ..\..\..\Externals\lib;..\..\..\Externals\lib\x86 - - - - - Level3 - NotUsing - MaxSpeed - true - true - MAILCORE_DLL;ZLIB_DLL;_WINDLL;%(PreprocessorDefinitions) - true - %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory);..\..\include;..\..\..\Externals\include;..\..\..\src\core\basetypes;..\..\..\src\core\zip;..\..\..\src\core\zip\minizip;..\..\..\src\core\renderer;..\..\..\src\core/rfc822;..\..\..\src\core/imap;..\..\..\src\core\abstract;..\..\..\src\core\security;..\..\..\src\core\imap;..\..\..\src\core\pop;..\..\..\src\core\nntp;..\..\..\src\core\smtp - - - Windows - true - true - true - Crypt32.lib;libtidy.lib;libxml2.lib;ssleay32MD.lib;libeay32MD.lib;zlib.lib;User32.lib;Ws2_32.lib;libctemplate.lib;kernel32.lib;libetpan.lib;pthreadVC2.lib;icudt.lib;icuin.lib;icuio.lib;icule.lib;iculx.lib;icuuc.lib;%(AdditionalDependencies) - ..\..\..\Externals\lib64;..\..\..\Externals\lib\x64 - - - - - + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {AAD35E01-77E4-43CB-BBB4-F7F6692EA829} + Win32Proj + mailcore2 + + + + DynamicLibrary + true + v120 + Unicode + + + DynamicLibrary + true + v120 + Unicode + + + DynamicLibrary + false + v120 + true + Unicode + + + DynamicLibrary + false + v120 + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + NotUsing + Level3 + Disabled + MAILCORE_DLL;ZLIB_DLL;_WINDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory);..\..\include;..\..\..\Externals\include;..\..\..\src\core\basetypes;..\..\..\src\core\zip;..\..\..\src\core\zip\minizip;..\..\..\src\core\renderer;..\..\..\src\core/rfc822;..\..\..\src\core/imap;..\..\..\src\core\abstract;..\..\..\src\core\security;..\..\..\src\core\imap;..\..\..\src\core\pop;..\..\..\src\core\nntp;..\..\..\src\core\smtp + + + Windows + true + Crypt32.lib;libtidy.lib;libxml2.lib;ssleay32MD.lib;libeay32MD.lib;zlib.lib;User32.lib;Ws2_32.lib;libctemplate.lib;kernel32.lib;libetpan.lib;pthreadVC2.lib;icudt.lib;icuin.lib;icuio.lib;icule.lib;iculx.lib;icuuc.lib;%(AdditionalDependencies) + ..\..\..\Externals\lib;..\..\..\Externals\lib\x86 + + + + + NotUsing + Level3 + Disabled + MAILCORE_DLL;ZLIB_DLL;_WINDLL;%(PreprocessorDefinitions) + true + %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory);..\..\include;..\..\..\Externals\include;..\..\..\src\core\basetypes;..\..\..\src\core\zip;..\..\..\src\core\zip\minizip;..\..\..\src\core\renderer;..\..\..\src\core/rfc822;..\..\..\src\core/imap;..\..\..\src\core\abstract;..\..\..\src\core\security;..\..\..\src\core\imap;..\..\..\src\core\pop;..\..\..\src\core\nntp;..\..\..\src\core\smtp + + + Windows + true + Crypt32.lib;libtidy.lib;libxml2.lib;ssleay32MD.lib;libeay32MD.lib;zlib.lib;User32.lib;Ws2_32.lib;libctemplate.lib;kernel32.lib;libetpan.lib;pthreadVC2.lib;icudt.lib;icuin.lib;icuio.lib;icule.lib;iculx.lib;icuuc.lib;%(AdditionalDependencies) + ..\..\..\Externals\lib64;..\..\..\Externals\lib\x64 + + + + + Level3 + NotUsing + MaxSpeed + true + true + MAILCORE_DLL;ZLIB_DLL;_WINDLL;%(PreprocessorDefinitions) + true + %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory);..\..\include;..\..\..\Externals\include;..\..\..\src\core\basetypes;..\..\..\src\core\zip;..\..\..\src\core\zip\minizip;..\..\..\src\core\renderer;..\..\..\src\core/rfc822;..\..\..\src\core/imap;..\..\..\src\core\abstract;..\..\..\src\core\security;..\..\..\src\core\imap;..\..\..\src\core\pop;..\..\..\src\core\nntp;..\..\..\src\core\smtp + + + Windows + true + true + true + Crypt32.lib;libtidy.lib;libxml2.lib;ssleay32MD.lib;libeay32MD.lib;zlib.lib;User32.lib;Ws2_32.lib;libctemplate.lib;kernel32.lib;libetpan.lib;pthreadVC2.lib;icudt.lib;icuin.lib;icuio.lib;icule.lib;iculx.lib;icuuc.lib;%(AdditionalDependencies) + ..\..\..\Externals\lib;..\..\..\Externals\lib\x86 + + + + + Level3 + NotUsing + MaxSpeed + true + true + MAILCORE_DLL;ZLIB_DLL;_WINDLL;%(PreprocessorDefinitions) + true + %(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory);..\..\include;..\..\..\Externals\include;..\..\..\src\core\basetypes;..\..\..\src\core\zip;..\..\..\src\core\zip\minizip;..\..\..\src\core\renderer;..\..\..\src\core/rfc822;..\..\..\src\core/imap;..\..\..\src\core\abstract;..\..\..\src\core\security;..\..\..\src\core\imap;..\..\..\src\core\pop;..\..\..\src\core\nntp;..\..\..\src\core\smtp + + + Windows + true + true + true + Crypt32.lib;libtidy.lib;libxml2.lib;ssleay32MD.lib;libeay32MD.lib;zlib.lib;User32.lib;Ws2_32.lib;libctemplate.lib;kernel32.lib;libetpan.lib;pthreadVC2.lib;icudt.lib;icuin.lib;icuio.lib;icule.lib;iculx.lib;icuuc.lib;%(AdditionalDependencies) + ..\..\..\Externals\lib64;..\..\..\Externals\lib\x64 + + + + + \ No newline at end of file diff --git a/src/async/imap/MCIMAPOperation.cpp b/src/async/imap/MCIMAPOperation.cpp index e0dae1730..336eb2f43 100644 --- a/src/async/imap/MCIMAPOperation.cpp +++ b/src/async/imap/MCIMAPOperation.cpp @@ -182,7 +182,7 @@ void IMAPOperation::afterMain() performMethodOnMainThread((Object::Method) &IMAPOperation::afterMainOnMainThread, NULL); } -void IMAPOperation::afterMainOnMainThread() +void IMAPOperation::afterMainOnMainThread(void *) { if (mSession->session()->isAutomaticConfigurationDone()) { mSession->owner()->automaticConfigurationDone(mSession->session()); diff --git a/src/async/imap/MCIMAPOperation.h b/src/async/imap/MCIMAPOperation.h index a1dbbbb26..f185935d3 100644 --- a/src/async/imap/MCIMAPOperation.h +++ b/src/async/imap/MCIMAPOperation.h @@ -43,7 +43,7 @@ namespace mailcore { virtual void beforeMain(); virtual void afterMain(); - virtual void afterMainOnMainThread(); + virtual void afterMainOnMainThread(void *); virtual void start(); diff --git a/src/core/basetypes/MCData.cpp b/src/core/basetypes/MCData.cpp index 1fee18aae..057a53957 100644 --- a/src/core/basetypes/MCData.cpp +++ b/src/core/basetypes/MCData.cpp @@ -7,7 +7,14 @@ #include #include #include + +#if defined(_MSC_VER) +#include "MmanWin32.h" +#include "MmanWin32.c" +#else #include +#endif + #include #if USE_UCHARDET #include diff --git a/src/core/basetypes/MCDataDecoderUtils.cpp b/src/core/basetypes/MCDataDecoderUtils.cpp index 4ea739ce8..c68542761 100644 --- a/src/core/basetypes/MCDataDecoderUtils.cpp +++ b/src/core/basetypes/MCDataDecoderUtils.cpp @@ -3,7 +3,9 @@ #include #include +#if !defined(_WIN32) #include +#endif namespace mailcore { diff --git a/src/core/basetypes/MCString.cpp b/src/core/basetypes/MCString.cpp index 9ae279fac..d2f9a6543 100644 --- a/src/core/basetypes/MCString.cpp +++ b/src/core/basetypes/MCString.cpp @@ -575,7 +575,7 @@ static inline int skip_subj_refwd(char * subj, size_t * begin, if (!has_suffix) { if (length - cur_token >= 3) { - if (strncasecmp(subj + cur_token, ":", 3) == 0) { + if (strncasecmp(subj + cur_token, ":", 3) == 0) { cur_token += 3; has_suffix = 1; } diff --git a/src/core/basetypes/MCUtils.h b/src/core/basetypes/MCUtils.h index ef8f3cd37..c741d10b2 100644 --- a/src/core/basetypes/MCUtils.h +++ b/src/core/basetypes/MCUtils.h @@ -79,7 +79,12 @@ extern unsigned long long wcstoull(const wchar_t*, wchar_t**, int); #endif -#ifndef DEPRECATED_ATTRIBUTE +#ifdef _MSC_VER +// for now we just omit it. Modify usages to put macro at start of +// declaration, compatible with both gcc and msvc. +// #define DEPRECATED_ATTRIBUTE __declspec(deprecated) +#define DEPRECATED_ATTRIBUTE +#else #define DEPRECATED_ATTRIBUTE __attribute__((deprecated)) #endif diff --git a/src/core/basetypes/MmanWin32.c b/src/core/basetypes/MmanWin32.c new file mode 100644 index 000000000..094a97f99 --- /dev/null +++ b/src/core/basetypes/MmanWin32.c @@ -0,0 +1,180 @@ + +#include +#include +#include + +#include "MmanWin32.h" + +#ifndef FILE_MAP_EXECUTE +#define FILE_MAP_EXECUTE 0x0020 +#endif /* FILE_MAP_EXECUTE */ + +static int __map_mman_error(const DWORD err, const int deferr) +{ + if (err == 0) + return 0; + //TODO: implement + return err; +} + +static DWORD __map_mmap_prot_page(const int prot) +{ + DWORD protect = 0; + + if (prot == PROT_NONE) + return protect; + + if ((prot & PROT_EXEC) != 0) + { + protect = ((prot & PROT_WRITE) != 0) ? + PAGE_EXECUTE_READWRITE : PAGE_EXECUTE_READ; + } + else + { + protect = ((prot & PROT_WRITE) != 0) ? + PAGE_READWRITE : PAGE_READONLY; + } + + return protect; +} + +static DWORD __map_mmap_prot_file(const int prot) +{ + DWORD desiredAccess = 0; + + if (prot == PROT_NONE) + return desiredAccess; + + if ((prot & PROT_READ) != 0) + desiredAccess |= FILE_MAP_READ; + if ((prot & PROT_WRITE) != 0) + desiredAccess |= FILE_MAP_WRITE; + if ((prot & PROT_EXEC) != 0) + desiredAccess |= FILE_MAP_EXECUTE; + + return desiredAccess; +} + +void* mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off) +{ + HANDLE fm, h; + + void * map = MAP_FAILED; + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4293) +#endif + + const DWORD dwFileOffsetLow = (sizeof(off_t) <= sizeof(DWORD)) ? + (DWORD)off : (DWORD)(off & 0xFFFFFFFFL); + const DWORD dwFileOffsetHigh = (sizeof(off_t) <= sizeof(DWORD)) ? + (DWORD)0 : (DWORD)((off >> 32) & 0xFFFFFFFFL); + const DWORD protect = __map_mmap_prot_page(prot); + const DWORD desiredAccess = __map_mmap_prot_file(prot); + + const off_t maxSize = off + (off_t)len; + + const DWORD dwMaxSizeLow = (sizeof(off_t) <= sizeof(DWORD)) ? + (DWORD)maxSize : (DWORD)(maxSize & 0xFFFFFFFFL); + const DWORD dwMaxSizeHigh = (sizeof(off_t) <= sizeof(DWORD)) ? + (DWORD)0 : (DWORD)((maxSize >> 32) & 0xFFFFFFFFL); + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + + errno = 0; + + if (len == 0 + /* Unsupported flag combinations */ + || (flags & MAP_FIXED) != 0 + /* Usupported protection combinations */ + || prot == PROT_EXEC) + { + errno = EINVAL; + return MAP_FAILED; + } + + h = ((flags & MAP_ANONYMOUS) == 0) ? + (HANDLE)_get_osfhandle(fildes) : INVALID_HANDLE_VALUE; + + if ((flags & MAP_ANONYMOUS) == 0 && h == INVALID_HANDLE_VALUE) + { + errno = EBADF; + return MAP_FAILED; + } + + fm = CreateFileMapping(h, NULL, protect, dwMaxSizeHigh, dwMaxSizeLow, NULL); + + if (fm == NULL) + { + errno = __map_mman_error(GetLastError(), EPERM); + return MAP_FAILED; + } + + map = MapViewOfFile(fm, desiredAccess, dwFileOffsetHigh, dwFileOffsetLow, len); + + CloseHandle(fm); + + if (map == NULL) + { + errno = __map_mman_error(GetLastError(), EPERM); + return MAP_FAILED; + } + + return map; +} + +int munmap(void *addr, size_t len) +{ + if (UnmapViewOfFile(addr)) + return 0; + + errno = __map_mman_error(GetLastError(), EPERM); + + return -1; +} + +int mprotect(void *addr, size_t len, int prot) +{ + DWORD newProtect = __map_mmap_prot_page(prot); + DWORD oldProtect = 0; + + if (VirtualProtect(addr, len, newProtect, &oldProtect)) + return 0; + + errno = __map_mman_error(GetLastError(), EPERM); + + return -1; +} + +int msync(void *addr, size_t len, int flags) +{ + if (FlushViewOfFile(addr, len)) + return 0; + + errno = __map_mman_error(GetLastError(), EPERM); + + return -1; +} + +int mlock(const void *addr, size_t len) +{ + if (VirtualLock((LPVOID)addr, len)) + return 0; + + errno = __map_mman_error(GetLastError(), EPERM); + + return -1; +} + +int munlock(const void *addr, size_t len) +{ + if (VirtualUnlock((LPVOID)addr, len)) + return 0; + + errno = __map_mman_error(GetLastError(), EPERM); + + return -1; +} diff --git a/src/core/basetypes/MmanWin32.h b/src/core/basetypes/MmanWin32.h new file mode 100644 index 000000000..96f68b29b --- /dev/null +++ b/src/core/basetypes/MmanWin32.h @@ -0,0 +1,55 @@ +/* + * sys/mman.h + * mman-win32 + */ + +#ifndef _SYS_MMAN_H_ +#define _SYS_MMAN_H_ + +#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. +#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows. +#endif + +/* All the headers include this file. */ +#ifndef _MSC_VER +#include <_mingw.h> +#endif + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define PROT_NONE 0 +#define PROT_READ 1 +#define PROT_WRITE 2 +#define PROT_EXEC 4 + +#define MAP_FILE 0 +#define MAP_SHARED 1 +#define MAP_PRIVATE 2 +#define MAP_TYPE 0xf +#define MAP_FIXED 0x10 +#define MAP_ANONYMOUS 0x20 +#define MAP_ANON MAP_ANONYMOUS + +#define MAP_FAILED ((void *)-1) + +/* Flags for msync. */ +#define MS_ASYNC 1 +#define MS_SYNC 2 +#define MS_INVALIDATE 4 + +void* mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off); +int munmap(void *addr, size_t len); +int mprotect(void *addr, size_t len, int prot); +int msync(void *addr, size_t len, int flags); +int mlock(const void *addr, size_t len); +int munlock(const void *addr, size_t len); + +#ifdef __cplusplus +}; +#endif + +#endif /* _SYS_MMAN_H_ */