Merge to XFA: Remove more cruft from fx_system.h
[pdfium.git] / core / include / fxcrt / fx_system.h
index f72be0f..f0ebcf9 100644 (file)
-// Copyright 2014 PDFium Authors. All rights reserved.\r
-// Use of this source code is governed by a BSD-style license that can be\r
-// found in the LICENSE file.\r
\r
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
-\r
-#ifndef _FX_SYSTEM_H_\r
-#define _FX_SYSTEM_H_\r
-#define _FX_WIN32_DESKTOP_             1\r
-#define _FX_LINUX_DESKTOP_             4\r
-#define _FX_MACOSX_                            7\r
-#define _FX_ANDROID_                   12\r
-#define _FXM_PLATFORM_WINDOWS_         1\r
-#define _FXM_PLATFORM_LINUX_           2\r
-#define _FXM_PLATFORM_APPLE_           3\r
-#define _FXM_PLATFORM_ANDROID_         4\r
-#ifndef _FX_OS_\r
-#if defined(__ANDROID__)\r
-#define _FX_OS_ _FX_ANDROID_\r
-#define _FXM_PLATFORM_ _FXM_PLATFORM_ANDROID_\r
-#elif defined(_WIN32) || defined(_WIN64)\r
-#define _FX_OS_ _FX_WIN32_DESKTOP_\r
-#define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_\r
-#elif defined(__linux__)\r
-#define _FX_OS_ _FX_LINUX_DESKTOP_\r
-#define _FXM_PLATFORM_ _FXM_PLATFORM_LINUX_\r
-#elif defined(__APPLE__)\r
-#define _FX_OS_ _FX_MACOSX_\r
-#define _FXM_PLATFORM_ _FXM_PLATFORM_APPLE_\r
-#endif\r
-#endif\r
-#if !defined(_FX_OS_) || _FX_OS_ == 0\r
-#error Sorry, can not figure out what OS you are targeting to. Please specify _FX_OS_ macro.\r
-#endif\r
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_\r
-#define _CRT_SECURE_NO_WARNINGS\r
-#include <windows.h>\r
-#endif\r
-#define _FX_W32_               1\r
-#define _FX_W64_               2\r
-#ifndef _FX_WORDSIZE_\r
-#if defined(_WIN64) || defined(__arm64) || defined(__arm64__) || defined(_M_AMD64) || defined(_M_X64) || defined(_M_IA64) || defined(__powerpc64__) || defined(__x86_64__) || __WORDSIZE == 64\r
-#define _FX_WORDSIZE_  _FX_W64_\r
-#else\r
-#define _FX_WORDSIZE_  _FX_W32_\r
-#endif\r
-#endif\r
-#include <stddef.h>\r
-#include <stdarg.h>\r
-#include <setjmp.h>\r
-#include <stdlib.h>\r
-#include <stdio.h>\r
-#include <string.h>\r
-#include <assert.h>\r
-#include <wchar.h>\r
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_\r
-#include <libkern/OSAtomic.h>\r
-#if _FX_OS_ == _FX_MACOSX_\r
-#include <Carbon/Carbon.h>\r
-#elif _FX_OS_ == _FX_IOS_\r
-#include <CoreText/CoreText.h>\r
-#include <CoreGraphics/CoreGraphics.h>\r
-#endif\r
-#endif\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-typedef void*                                  FX_LPVOID;\r
-typedef void const*                            FX_LPCVOID;\r
-typedef void*                                  FX_POSITION;\r
-typedef signed char                            FX_INT8;\r
-typedef unsigned char                  FX_UINT8;\r
-typedef unsigned char                  FX_BYTE;\r
-typedef unsigned char*                 FX_LPBYTE;\r
-typedef unsigned char const*   FX_LPCBYTE;\r
-typedef short                                  FX_INT16;\r
-typedef unsigned short                 FX_UINT16;\r
-typedef short                                  FX_SHORT;\r
-typedef unsigned short                 FX_WORD;\r
-typedef unsigned short*                        FX_LPWORD;\r
-typedef unsigned short const*  FX_LPCWORD;\r
-typedef int                                            FX_INT32;\r
-typedef float                                  FX_FLOAT;\r
-typedef int                                            FX_BOOL;\r
-typedef int                                            FX_ERR;\r
-#define FX_SUCCEEDED(Status)   ((FX_ERR)(Status) >= 0)\r
-#define FX_FAILED(Status)              ((FX_ERR)(Status) < 0)\r
-typedef char                                   FX_CHAR;\r
-typedef char*                                  FX_LPSTR;\r
-typedef char const*                            FX_LPCSTR;\r
-typedef unsigned int           FX_DWORD;\r
-typedef unsigned int*          FX_LPDWORD;\r
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_\r
-typedef __int64                                FX_INT64;\r
-typedef unsigned __int64       FX_UINT64;\r
-#else\r
-typedef long long int          FX_INT64;\r
-typedef unsigned long long     FX_UINT64;\r
-#endif\r
-#if _FX_WORDSIZE_ == _FX_W64_\r
-typedef FX_INT64                       FX_INTPTR;\r
-typedef FX_UINT64                      FX_UINTPTR;\r
-#else\r
-typedef int                                    FX_INTPTR;\r
-typedef unsigned int           FX_UINTPTR;\r
-#endif\r
-typedef wchar_t                                        FX_WCHAR;\r
-typedef wchar_t*                               FX_LPWSTR;\r
-typedef wchar_t const*                 FX_LPCWSTR;\r
-typedef FX_DWORD                               FX_UINT32;\r
-typedef FX_UINT64                              FX_QWORD;\r
-#define FX_DEFINEHANDLE(name)  typedef struct _##name {FX_LPVOID pData;} * name;\r
-#if defined(DEBUG) && !defined(_DEBUG)\r
-#define _DEBUG\r
-#endif\r
-#ifndef TRUE\r
-\r
-#define TRUE   1\r
-#endif\r
-#ifndef FALSE\r
-\r
-#define FALSE  0\r
-#endif\r
-#ifndef NULL\r
-\r
-#define NULL   0\r
-#endif\r
-#define FXSYS_assert assert\r
-#ifndef ASSERT\r
-#ifdef _DEBUG\r
-#define ASSERT FXSYS_assert\r
-#else\r
-\r
-#define ASSERT(a)\r
-#endif\r
-#endif\r
-#define FX_MAX(a, b) (((a) > (b)) ? (a) : (b))\r
-#define FX_MIN(a, b) (((a) < (b)) ? (a) : (b))\r
-#define FX_PI  3.1415926535897932384626433832795f\r
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_\r
-#define FXSYS_snprintf _snprintf\r
-#else\r
-#define FXSYS_snprintf snprintf\r
-#endif\r
-#define FXSYS_sprintf  sprintf\r
-#define FXSYS_vsprintf vsprintf\r
-#define FXSYS_strchr   strchr\r
-#define FXSYS_strlen   strlen\r
-#define FXSYS_strncmp  strncmp\r
-#define FXSYS_strcmp   strcmp\r
-#define FXSYS_strcpy   strcpy\r
-#define FXSYS_strncpy  strncpy\r
-#define FXSYS_strstr   strstr\r
-#define FXSYS_FILE             FILE\r
-#define FXSYS_fopen            fopen\r
-#define FXSYS_fclose   fclose\r
-#define FXSYS_SEEK_END SEEK_END\r
-#define FXSYS_SEEK_SET SEEK_SET\r
-#define FXSYS_fseek            fseek\r
-#define FXSYS_ftell            ftell\r
-#define FXSYS_fread            fread\r
-#define FXSYS_fwrite   fwrite\r
-#define FXSYS_fprintf  fprintf\r
-#define FXSYS_fflush   fflush\r
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_\r
-#ifdef _NATIVE_WCHAR_T_DEFINED\r
-#define FXSYS_wfopen(f, m) _wfopen((const wchar_t*)(f), (const wchar_t*)(m))\r
-#else\r
-#define FXSYS_wfopen _wfopen\r
-#endif\r
-#else\r
-FXSYS_FILE* FXSYS_wfopen(FX_LPCWSTR filename, FX_LPCWSTR mode);\r
-#endif\r
-\r
-#define FXSYS_wcslen   wcslen\r
-#define FXSYS_wcscmp   wcscmp\r
-#define FXSYS_wcschr   wcschr\r
-#define FXSYS_wcsstr   wcsstr\r
-#define FXSYS_wcsncmp  wcsncmp\r
-#define FXSYS_vswprintf        vswprintf\r
-#define FXSYS_mbstowcs mbstowcs\r
-#define FXSYS_wcstombs wcstombs\r
-#define FXSYS_memcmp   memcmp\r
-#define FXSYS_memcpy   memcpy\r
-#define FXSYS_memmove  memmove\r
-#define FXSYS_memset   memset\r
-#define FXSYS_memchr   memchr\r
-#define FXSYS_qsort            qsort\r
-#define FXSYS_bsearch  bsearch\r
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_\r
-#define FXSYS_GetACP GetACP\r
-#define FXSYS_itoa _itoa\r
-#define FXSYS_strlwr _strlwr\r
-#define FXSYS_strupr _strupr\r
-#define FXSYS_stricmp _stricmp\r
-#ifdef _NATIVE_WCHAR_T_DEFINED\r
-#define FXSYS_wcsicmp(str1, str2) _wcsicmp((wchar_t*)(str1), (wchar_t*)(str2))\r
-#define FXSYS_WideCharToMultiByte(p1, p2, p3, p4, p5, p6, p7, p8) WideCharToMultiByte(p1, p2, (const wchar_t*)(p3), p4, p5, p6, p7, p8)\r
-#define FXSYS_MultiByteToWideChar(p1, p2, p3, p4, p5, p6) MultiByteToWideChar(p1, p2, p3, p4, (wchar_t*)(p5), p6)\r
-#define FXSYS_wcslwr(str) _wcslwr((wchar_t*)(str))\r
-#define FXSYS_wcsupr(str) _wcsupr((wchar_t*)(str))\r
-#else\r
-#define FXSYS_wcsicmp _wcsicmp\r
-#define FXSYS_WideCharToMultiByte WideCharToMultiByte\r
-#define FXSYS_MultiByteToWideChar MultiByteToWideChar\r
-#define FXSYS_wcslwr _wcslwr\r
-#define FXSYS_wcsupr _wcsupr\r
-#endif\r
-#define FXSYS_GetFullPathName GetFullPathName\r
-#define FXSYS_GetModuleFileName GetModuleFileName\r
-#else\r
-int                    FXSYS_GetACP(void);\r
-char*          FXSYS_itoa(int value, char* string, int radix);\r
-int                    FXSYS_WideCharToMultiByte(FX_DWORD codepage, FX_DWORD dwFlags, const wchar_t* wstr, int wlen,\r
-                                      char* buf, int buflen, const char* default_str, int* pUseDefault);\r
-int                    FXSYS_MultiByteToWideChar(FX_DWORD codepage, FX_DWORD dwFlags, const char* bstr, int blen,\r
-                                      wchar_t* buf, int buflen);\r
-FX_DWORD       FXSYS_GetFullPathName(const char* filename, FX_DWORD buflen, char* buf, char** filepart);\r
-FX_DWORD       FXSYS_GetModuleFileName(void* hModule, char* buf, FX_DWORD bufsize);\r
-char*          FXSYS_strlwr(char* str);\r
-char*          FXSYS_strupr(char* str);\r
-int                    FXSYS_stricmp(const char*, const char*);\r
-int                    FXSYS_wcsicmp(const wchar_t *string1, const wchar_t *string2);\r
-wchar_t*       FXSYS_wcslwr(wchar_t* str);\r
-wchar_t*       FXSYS_wcsupr(wchar_t* str);\r
-#endif\r
-#define FXSYS_memcpy32         FXSYS_memcpy\r
-#define FXSYS_memcmp32         FXSYS_memcmp\r
-#define FXSYS_memset32         FXSYS_memset\r
-#define FXSYS_memset8          FXSYS_memset\r
-#define FXSYS_memmove32                FXSYS_memmove\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-#include <math.h>\r
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_\r
-#define FXSYS_pow(a, b)                (FX_FLOAT)powf(a, b)\r
-#else\r
-#define FXSYS_pow(a, b)                (FX_FLOAT)pow(a, b)\r
-#endif\r
-#define FXSYS_sqrt(a)          (FX_FLOAT)sqrt(a)\r
-#define FXSYS_fabs(a)          (FX_FLOAT)fabs(a)\r
-#define FXSYS_atan2(a, b)      (FX_FLOAT)atan2(a, b)\r
-#define FXSYS_ceil(a)          (FX_FLOAT)ceil(a)\r
-#define FXSYS_floor(a)         (FX_FLOAT)floor(a)\r
-#define FXSYS_cos(a)           (FX_FLOAT)cos(a)\r
-#define FXSYS_acos(a)          (FX_FLOAT)acos(a)\r
-#define FXSYS_sin(a)           (FX_FLOAT)sin(a)\r
-#define FXSYS_log(a)           (FX_FLOAT)log(a)\r
-#define FXSYS_log10(a)         (FX_FLOAT)log10(a)\r
-#define FXSYS_fmod(a, b)       (FX_FLOAT)fmod(a, b)\r
-#define FXSYS_abs                      abs\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif\r
-#define _FX_LSB_FIRST_\r
-#define FXDWORD_FROM_LSBFIRST(i)       (i)\r
-#define FXDWORD_FROM_MSBFIRST(i)       (((FX_BYTE)(i) << 24) | ((FX_BYTE)((i) >> 8) << 16) | ((FX_BYTE)((i) >> 16) << 8) | (FX_BYTE)((i) >> 24))\r
-#define FXDWORD_GET_LSBFIRST(p)                ((((FX_LPBYTE)(p))[3] << 24) | (((FX_LPBYTE)(p))[2] << 16) | (((FX_LPBYTE)(p))[1] << 8) | (((FX_LPBYTE)(p))[0]))\r
-#define FXDWORD_GET_MSBFIRST(p) ((((FX_LPBYTE)(p))[0] << 24) | (((FX_LPBYTE)(p))[1] << 16) | (((FX_LPBYTE)(p))[2] << 8) | (((FX_LPBYTE)(p))[3]))\r
-#define FXSYS_HIBYTE(word)     ((FX_BYTE)((word) >> 8))\r
-#define FXSYS_LOBYTE(word)     ((FX_BYTE)(word))\r
-#define FXSYS_HIWORD(dword)    ((FX_WORD)((dword) >> 16))\r
-#define FXSYS_LOWORD(dword)    ((FX_WORD)(dword))\r
-FX_INT32       FXSYS_atoi(FX_LPCSTR str);\r
-FX_INT32       FXSYS_wtoi(FX_LPCWSTR str);\r
-FX_INT64       FXSYS_atoi64(FX_LPCSTR str);\r
-FX_INT64       FXSYS_wtoi64(FX_LPCWSTR str);\r
-FX_LPCSTR      FXSYS_i64toa(FX_INT64 value, FX_LPSTR str, int radix);\r
-FX_LPCWSTR     FXSYS_i64tow(FX_INT64 value, FX_LPWSTR str, int radix);\r
-int                    FXSYS_round(FX_FLOAT f);\r
-#define                FXSYS_Mul(a, b) ((a) * (b))\r
-#define                FXSYS_Div(a, b) ((a) / (b))\r
-#define                FXSYS_MulDiv(a, b, c) ((a) * (b) / (c))\r
-#define                FXSYS_sqrt2(a, b) (FX_FLOAT)FXSYS_sqrt((a)*(a) + (b)*(b))\r
-#ifdef __cplusplus\r
-};\r
-#endif\r
-#endif\r
+// Copyright 2014 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef CORE_INCLUDE_FXCRT_FX_SYSTEM_H_
+#define CORE_INCLUDE_FXCRT_FX_SYSTEM_H_
+
+#include <assert.h>
+#include <math.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+// _FX_OS_ values:
+#define _FX_WIN32_DESKTOP_      1
+#define _FX_WIN64_DESKTOP_      2
+#define _FX_LINUX_DESKTOP_      4
+#define _FX_MACOSX_             7
+#define _FX_ANDROID_           12
+
+// _FXM_PLATFORM_ values;
+#define _FXM_PLATFORM_WINDOWS_  1  // _FX_WIN32_DESKTOP_ or _FX_WIN64_DESKTOP_.
+#define _FXM_PLATFORM_LINUX_    2  // _FX_LINUX_DESKTOP_ always.
+#define _FXM_PLATFORM_APPLE_    3  // _FX_MACOSX_ always.
+#define _FXM_PLATFORM_ANDROID_  4  // _FX_ANDROID_ always.
+
+#ifndef _FX_OS_
+#if defined(__ANDROID__)
+#define _FX_OS_ _FX_ANDROID_
+#define _FXM_PLATFORM_ _FXM_PLATFORM_ANDROID_
+#elif defined(_WIN32)
+#define _FX_OS_ _FX_WIN32_DESKTOP_
+#define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_
+#elif defined(_WIN64)
+#define _FX_OS_ _FX_WIN64_DESKTOP_
+#define _FXM_PLATFORM_ _FXM_PLATFORM_WINDOWS_
+#elif defined(__linux__)
+#define _FX_OS_ _FX_LINUX_DESKTOP_
+#define _FXM_PLATFORM_ _FXM_PLATFORM_LINUX_
+#elif defined(__APPLE__)
+#define _FX_OS_ _FX_MACOSX_
+#define _FXM_PLATFORM_ _FXM_PLATFORM_APPLE_
+#endif
+#endif  // _FX_OS_
+
+#if !defined(_FX_OS_) || _FX_OS_ == 0
+#error Sorry, can not figure out target OS. Please specify _FX_OS_ macro.
+#endif
+
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+#define _CRT_SECURE_NO_WARNINGS
+#include <sal.h>
+#include <windows.h>
+#endif
+
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
+#include <libkern/OSAtomic.h>
+#include <Carbon/Carbon.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+typedef void*                   FX_LPVOID;   // Deprecate, use with void*.
+typedef void const*             FX_LPCVOID;  // Deprecate, use with const void*.
+typedef void*                   FX_POSITION; // Keep until fxcrt containers gone
+typedef signed char             FX_INT8;     // Deprecate, use int8_t.
+typedef unsigned char           FX_UINT8;    // Deprecate, use uint8_t.
+typedef unsigned char           FX_BYTE;     // Deprecate, use uint8_t.
+typedef unsigned char*          FX_LPBYTE;   // Deprecate, use uint8_t*.
+typedef unsigned char const*    FX_LPCBYTE;  // Deprecate, use const uint8_t*.
+typedef short                   FX_INT16;    // Deprecate, use int16_t.
+typedef unsigned short          FX_UINT16;   // Deprecate, use uint16_t.
+typedef short                   FX_SHORT;    // Deprecate, use int16_t.
+typedef unsigned short          FX_WORD;     // Keep - "an efficient small type"
+typedef unsigned short*         FX_LPWORD;   // Deprecate, use FX_WORD*.
+typedef unsigned short const*   FX_LPCWORD;  // Deprecate, use const FX_WORD*.
+typedef int                     FX_INT32;    // Deprecate, use int32_t.
+typedef unsigned int            FX_UINT32;   // Deprecate, use uint32_t.
+typedef unsigned int            FX_DWORD;    // Keep - "an efficient type"
+typedef unsigned int*           FX_LPDWORD;  // Deprecate, use FX_DWORD*.
+typedef int64_t                 FX_INT64;    // Deprecate, use int64_t.
+typedef uint64_t                FX_UINT64;   // Deprecate, use uint64_t.
+typedef intptr_t                FX_INTPTR;   // Deprecate, use intptr_t.
+typedef uintptr_t               FX_UINTPTR;  // Deprecate, use uintptr_t.
+typedef float                   FX_FLOAT;    // Keep, allow upgrade to doubles.
+typedef int                     FX_BOOL;     // Sadly not always 0 or 1.
+typedef char                    FX_CHAR;     // Keep, questionable signedness.
+typedef char*                   FX_LPSTR;    // Deprecate, use FX_CHAR*.
+typedef char const*             FX_LPCSTR;   // Deprecate, use const FX_CHAR*.
+typedef wchar_t                 FX_WCHAR;    // Keep, maybe bad platform wchars.
+typedef wchar_t*                FX_LPWSTR;   // Deprecate, use FX_WCHAR*.
+typedef wchar_t const*          FX_LPCWSTR;  // Deprecate, use const FX_WCHAR*.
+
+// PDFium string sizes are limited to 2^31-1, and the value is signed to
+// allow -1 as a placeholder for "unknown".
+// TODO(palmer): it should be a |size_t|, or at least unsigned.
+typedef int FX_STRSIZE;
+
+#if defined(DEBUG) && !defined(_DEBUG)
+#define _DEBUG
+#endif
+
+#ifndef TRUE
+#define TRUE   1
+#endif
+
+#ifndef FALSE
+#define FALSE  0
+#endif
+
+#ifndef NULL
+#define NULL   0
+#endif
+
+#define FXSYS_assert assert
+#ifndef ASSERT
+#ifdef _DEBUG
+#define ASSERT FXSYS_assert
+#else
+#define ASSERT(a)
+#endif
+#endif
+
+#define FX_MAX(a, b) (((a) > (b)) ? (a) : (b))
+#define FX_MIN(a, b) (((a) < (b)) ? (a) : (b))
+#define FX_PI  3.1415926535897932384626433832795f
+
+// NOTE: prevent use of the return value from snprintf() since some platforms
+// have different return values (e.g. windows _vsnprintf()), and provide
+// versions that always NUL-terminate.
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ && _MSC_VER < 1900
+void FXSYS_snprintf(char *str, size_t size, _Printf_format_string_ const char* fmt, ...);
+void FXSYS_vsnprintf(char *str, size_t size, const char* fmt, va_list ap);
+#else
+#define FXSYS_snprintf (void) snprintf
+#define FXSYS_vsnprintf        (void) vsnprintf
+#endif
+
+#define FXSYS_sprintf  DO_NOT_USE_SPRINTF_DIE_DIE_DIE
+#define FXSYS_vsprintf DO_NOT_USE_VSPRINTF_DIE_DIE_DIE
+#define FXSYS_strchr   strchr
+#define FXSYS_strncmp  strncmp
+#define FXSYS_strcmp   strcmp
+#define FXSYS_strcpy   strcpy
+#define FXSYS_strncpy  strncpy
+#define FXSYS_strstr   strstr
+#define FXSYS_FILE             FILE
+#define FXSYS_fopen            fopen
+#define FXSYS_fclose   fclose
+#define FXSYS_SEEK_END SEEK_END
+#define FXSYS_SEEK_SET SEEK_SET
+#define FXSYS_fseek            fseek
+#define FXSYS_ftell            ftell
+#define FXSYS_fread            fread
+#define FXSYS_fwrite   fwrite
+#define FXSYS_fprintf  fprintf
+#define FXSYS_fflush   fflush
+
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+#ifdef _NATIVE_WCHAR_T_DEFINED
+#define FXSYS_wfopen(f, m) _wfopen((const wchar_t*)(f), (const wchar_t*)(m))
+#else
+#define FXSYS_wfopen _wfopen
+#endif
+#else
+FXSYS_FILE* FXSYS_wfopen(FX_LPCWSTR filename, FX_LPCWSTR mode);
+#endif  // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+
+#ifdef __cplusplus
+} // extern "C"
+#include "../../../third_party/base/numerics/safe_conversions.h"
+#define FXSYS_strlen(ptr) pdfium::base::checked_cast<FX_STRSIZE>(strlen(ptr))
+#define FXSYS_wcslen(ptr) pdfium::base::checked_cast<FX_STRSIZE>(wcslen(ptr))
+extern "C" {
+#else
+#define FXSYS_strlen(ptr) ((FX_STRSIZE)strlen(ptr))
+#define FXSYS_wcslen(ptr) ((FX_STRSIZE)wcslen(ptr))
+#endif
+
+#define FXSYS_wcscmp   wcscmp
+#define FXSYS_wcschr   wcschr
+#define FXSYS_wcsstr   wcsstr
+#define FXSYS_wcsncmp  wcsncmp
+#define FXSYS_vswprintf        vswprintf
+#define FXSYS_mbstowcs mbstowcs
+#define FXSYS_wcstombs wcstombs
+#define FXSYS_memcmp   memcmp
+#define FXSYS_memcpy   memcpy
+#define FXSYS_memmove  memmove
+#define FXSYS_memset   memset
+#define FXSYS_memchr   memchr
+#define FXSYS_qsort            qsort
+#define FXSYS_bsearch  bsearch
+
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+#define FXSYS_GetACP GetACP
+#define FXSYS_itoa _itoa
+#define FXSYS_strlwr _strlwr
+#define FXSYS_strupr _strupr
+#define FXSYS_stricmp _stricmp
+#ifdef _NATIVE_WCHAR_T_DEFINED
+#define FXSYS_wcsicmp(str1, str2) _wcsicmp((wchar_t*)(str1), (wchar_t*)(str2))
+#define FXSYS_WideCharToMultiByte(p1, p2, p3, p4, p5, p6, p7, p8) WideCharToMultiByte(p1, p2, (const wchar_t*)(p3), p4, p5, p6, p7, p8)
+#define FXSYS_MultiByteToWideChar(p1, p2, p3, p4, p5, p6) MultiByteToWideChar(p1, p2, p3, p4, (wchar_t*)(p5), p6)
+#define FXSYS_wcslwr(str) _wcslwr((wchar_t*)(str))
+#define FXSYS_wcsupr(str) _wcsupr((wchar_t*)(str))
+#else
+#define FXSYS_wcsicmp _wcsicmp
+#define FXSYS_WideCharToMultiByte WideCharToMultiByte
+#define FXSYS_MultiByteToWideChar MultiByteToWideChar
+#define FXSYS_wcslwr _wcslwr
+#define FXSYS_wcsupr _wcsupr
+#endif
+#define FXSYS_GetFullPathName GetFullPathName
+#define FXSYS_GetModuleFileName GetModuleFileName
+#else
+int                    FXSYS_GetACP(void);
+char*          FXSYS_itoa(int value, char* string, int radix);
+int                    FXSYS_WideCharToMultiByte(FX_DWORD codepage, FX_DWORD dwFlags, const wchar_t* wstr, int wlen,
+                                      char* buf, int buflen, const char* default_str, int* pUseDefault);
+int                    FXSYS_MultiByteToWideChar(FX_DWORD codepage, FX_DWORD dwFlags, const char* bstr, int blen,
+                                      wchar_t* buf, int buflen);
+FX_DWORD       FXSYS_GetFullPathName(const char* filename, FX_DWORD buflen, char* buf, char** filepart);
+FX_DWORD       FXSYS_GetModuleFileName(void* hModule, char* buf, FX_DWORD bufsize);
+char*          FXSYS_strlwr(char* str);
+char*          FXSYS_strupr(char* str);
+int                    FXSYS_stricmp(const char*, const char*);
+int                    FXSYS_wcsicmp(const wchar_t *string1, const wchar_t *string2);
+wchar_t*       FXSYS_wcslwr(wchar_t* str);
+wchar_t*       FXSYS_wcsupr(wchar_t* str);
+#endif  // _FXM_PLATFORM == _FXM_PLATFORM_WINDOWS_
+
+#define FXSYS_memcpy32         FXSYS_memcpy
+#define FXSYS_memcmp32         FXSYS_memcmp
+#define FXSYS_memset32         FXSYS_memset
+#define FXSYS_memset8          FXSYS_memset
+#define FXSYS_memmove32                FXSYS_memmove
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+#define FXSYS_pow(a, b)                (FX_FLOAT)powf(a, b)
+#else
+#define FXSYS_pow(a, b)                (FX_FLOAT)pow(a, b)
+#endif
+#define FXSYS_sqrt(a)          (FX_FLOAT)sqrt(a)
+#define FXSYS_fabs(a)          (FX_FLOAT)fabs(a)
+#define FXSYS_atan2(a, b)      (FX_FLOAT)atan2(a, b)
+#define FXSYS_ceil(a)          (FX_FLOAT)ceil(a)
+#define FXSYS_floor(a)         (FX_FLOAT)floor(a)
+#define FXSYS_cos(a)           (FX_FLOAT)cos(a)
+#define FXSYS_acos(a)          (FX_FLOAT)acos(a)
+#define FXSYS_sin(a)           (FX_FLOAT)sin(a)
+#define FXSYS_log(a)           (FX_FLOAT)log(a)
+#define FXSYS_log10(a)         (FX_FLOAT)log10(a)
+#define FXSYS_fmod(a, b)       (FX_FLOAT)fmod(a, b)
+#define FXSYS_abs                      abs
+#define FXDWORD_FROM_LSBFIRST(i)       (i)
+#define FXDWORD_FROM_MSBFIRST(i)       (((FX_BYTE)(i) << 24) | ((FX_BYTE)((i) >> 8) << 16) | ((FX_BYTE)((i) >> 16) << 8) | (FX_BYTE)((i) >> 24))
+#define FXDWORD_GET_LSBFIRST(p)                ((((FX_LPBYTE)(p))[3] << 24) | (((FX_LPBYTE)(p))[2] << 16) | (((FX_LPBYTE)(p))[1] << 8) | (((FX_LPBYTE)(p))[0]))
+#define FXDWORD_GET_MSBFIRST(p) ((((FX_LPBYTE)(p))[0] << 24) | (((FX_LPBYTE)(p))[1] << 16) | (((FX_LPBYTE)(p))[2] << 8) | (((FX_LPBYTE)(p))[3]))
+#define FXSYS_HIBYTE(word)     ((FX_BYTE)((word) >> 8))
+#define FXSYS_LOBYTE(word)     ((FX_BYTE)(word))
+#define FXSYS_HIWORD(dword)    ((FX_WORD)((dword) >> 16))
+#define FXSYS_LOWORD(dword)    ((FX_WORD)(dword))
+FX_INT32       FXSYS_atoi(FX_LPCSTR str);
+FX_INT32       FXSYS_wtoi(FX_LPCWSTR str);
+FX_INT64       FXSYS_atoi64(FX_LPCSTR str);
+FX_INT64       FXSYS_wtoi64(FX_LPCWSTR str);
+FX_LPCSTR      FXSYS_i64toa(FX_INT64 value, FX_LPSTR str, int radix);
+FX_LPCWSTR     FXSYS_i64tow(FX_INT64 value, FX_LPWSTR str, int radix);
+int                    FXSYS_round(FX_FLOAT f);
+#define                FXSYS_Mul(a, b) ((a) * (b))
+#define                FXSYS_Div(a, b) ((a) / (b))
+#define                FXSYS_MulDiv(a, b, c) ((a) * (b) / (c))
+#define                FXSYS_sqrt2(a, b) (FX_FLOAT)FXSYS_sqrt((a)*(a) + (b)*(b))
+#ifdef __cplusplus
+};
+#endif
+
+// To print a size_t value in a portable way:
+//   size_t size;
+//   printf("xyz: %" PRIuS, size);
+// The "u" in the macro corresponds to %u, and S is for "size".
+
+#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
+
+#if (defined(_INTTYPES_H) || defined(_INTTYPES_H_)) && !defined(PRId64)
+#error "inttypes.h has already been included before this header file, but "
+#error "without __STDC_FORMAT_MACROS defined."
+#endif
+
+#if !defined(__STDC_FORMAT_MACROS)
+#define __STDC_FORMAT_MACROS
+#endif
+
+#include <inttypes.h>
+
+#if !defined(PRIuS)
+#define PRIuS "zu"
+#endif
+
+#else  // _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
+
+#if !defined(PRIuS)
+#define PRIuS "Iu"
+#endif
+
+#endif  // _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
+
+// Prevent a function from ever being inlined, typically because we'd
+// like it to appear in stack traces.
+#if  _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+#define NEVER_INLINE __declspec(noinline)
+#else  // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+#define NEVER_INLINE __attribute__((__noinline__))
+#endif  // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+
+#endif  // CORE_INCLUDE_FXCRT_FX_SYSTEM_H_