X-Git-Url: http://downloads.foxitsoftware.com/web/?p=pdfium.git;a=blobdiff_plain;f=core%2Finclude%2Ffxcrt%2Ffx_system.h;h=f0ebcf90b1d18d90e44fd492035c85531a490407;hp=b31a60396b4c62a0d7429cb94636534b49544994;hb=b116136da234afcad018bb44a3ccb64b9ad2a554;hpb=53476d6956781ceb252e1ae5e01f83a48bcb4908 diff --git a/core/include/fxcrt/fx_system.h b/core/include/fxcrt/fx_system.h index b31a603..f0ebcf9 100644 --- a/core/include/fxcrt/fx_system.h +++ b/core/include/fxcrt/fx_system.h @@ -1,26 +1,45 @@ // 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 _FX_SYSTEM_H_ -#define _FX_SYSTEM_H_ -#define _FX_WIN32_DESKTOP_ 1 -#define _FX_LINUX_DESKTOP_ 4 -#define _FX_MACOSX_ 7 -#define _FX_ANDROID_ 12 -#define _FXM_PLATFORM_WINDOWS_ 1 -#define _FXM_PLATFORM_LINUX_ 2 -#define _FXM_PLATFORM_APPLE_ 3 -#define _FXM_PLATFORM_ANDROID_ 4 +#ifndef CORE_INCLUDE_FXCRT_FX_SYSTEM_H_ +#define CORE_INCLUDE_FXCRT_FX_SYSTEM_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// _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) || defined(_WIN64) +#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_ @@ -28,124 +47,105 @@ #define _FX_OS_ _FX_MACOSX_ #define _FXM_PLATFORM_ _FXM_PLATFORM_APPLE_ #endif -#endif +#endif // _FX_OS_ + #if !defined(_FX_OS_) || _FX_OS_ == 0 -#error Sorry, can not figure out what OS you are targeting to. Please specify _FX_OS_ macro. +#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 #include #endif -#define _FX_W32_ 1 -#define _FX_W64_ 2 -#ifndef _FX_WORDSIZE_ -#if defined(_WIN64) || defined(__arm64) || defined(__arm64__) || defined(_M_AMD64) || defined(_M_X64) || defined(_M_IA64) || defined(__powerpc64__) || defined(__x86_64__) || __WORDSIZE == 64 || defined(__LP64__) -#define _FX_WORDSIZE_ _FX_W64_ -#else -#define _FX_WORDSIZE_ _FX_W32_ -#endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include + #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ #include -#if _FX_OS_ == _FX_MACOSX_ #include -#elif _FX_OS_ == _FX_IOS_ -#include -#include -#endif #endif + #ifdef __cplusplus extern "C" { #endif -typedef void* FX_LPVOID; -typedef void const* FX_LPCVOID; -typedef void* FX_POSITION; -typedef signed char FX_INT8; -typedef unsigned char FX_UINT8; -typedef unsigned char FX_BYTE; -typedef unsigned char* FX_LPBYTE; -typedef unsigned char const* FX_LPCBYTE; -typedef short FX_INT16; -typedef unsigned short FX_UINT16; -typedef short FX_SHORT; -typedef unsigned short FX_WORD; -typedef unsigned short* FX_LPWORD; -typedef unsigned short const* FX_LPCWORD; -typedef int FX_INT32; -typedef float FX_FLOAT; -typedef int FX_BOOL; -typedef int FX_ERR; -#define FX_SUCCEEDED(Status) ((FX_ERR)(Status) >= 0) -#define FX_FAILED(Status) ((FX_ERR)(Status) < 0) -typedef char FX_CHAR; -typedef char* FX_LPSTR; -typedef char const* FX_LPCSTR; -typedef unsigned int FX_DWORD; -typedef unsigned int* FX_LPDWORD; -#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ -typedef __int64 FX_INT64; -typedef unsigned __int64 FX_UINT64; -#else -typedef long long int FX_INT64; -typedef unsigned long long FX_UINT64; -#endif -#if _FX_WORDSIZE_ == _FX_W64_ -typedef FX_INT64 FX_INTPTR; -typedef FX_UINT64 FX_UINTPTR; -#else -typedef int FX_INTPTR; -typedef unsigned int FX_UINTPTR; -#endif -typedef wchar_t FX_WCHAR; -typedef wchar_t* FX_LPWSTR; -typedef wchar_t const* FX_LPCWSTR; -typedef FX_DWORD FX_UINT32; -typedef FX_UINT64 FX_QWORD; -#define FX_DEFINEHANDLE(name) typedef struct _##name {FX_LPVOID pData;} * name; +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 +#ifndef TRUE #define TRUE 1 #endif -#ifndef FALSE +#ifndef FALSE #define FALSE 0 #endif -#ifndef NULL +#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 -#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ -#define FXSYS_snprintf _snprintf + +// 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 snprintf +#define FXSYS_snprintf (void) snprintf +#define FXSYS_vsnprintf (void) vsnprintf #endif -#define FXSYS_sprintf sprintf -#define FXSYS_vsprintf vsprintf + +#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_strlen strlen #define FXSYS_strncmp strncmp #define FXSYS_strcmp strcmp #define FXSYS_strcpy strcpy @@ -162,6 +162,7 @@ typedef FX_UINT64 FX_QWORD; #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)) @@ -170,9 +171,19 @@ typedef FX_UINT64 FX_QWORD; #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(strlen(ptr)) +#define FXSYS_wcslen(ptr) pdfium::base::checked_cast(wcslen(ptr)) +extern "C" { +#else +#define FXSYS_strlen(ptr) ((FX_STRSIZE)strlen(ptr)) +#define FXSYS_wcslen(ptr) ((FX_STRSIZE)wcslen(ptr)) #endif -#define FXSYS_wcslen wcslen #define FXSYS_wcscmp wcscmp #define FXSYS_wcschr wcschr #define FXSYS_wcsstr wcsstr @@ -187,6 +198,7 @@ FXSYS_FILE* FXSYS_wfopen(FX_LPCWSTR filename, FX_LPCWSTR mode); #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 @@ -223,16 +235,13 @@ 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 +#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 -#ifdef __cplusplus -} -#endif -#include #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ #define FXSYS_pow(a, b) (FX_FLOAT)powf(a, b) #else @@ -250,10 +259,6 @@ wchar_t* FXSYS_wcsupr(wchar_t* str); #define FXSYS_log10(a) (FX_FLOAT)log10(a) #define FXSYS_fmod(a, b) (FX_FLOAT)fmod(a, b) #define FXSYS_abs abs -#ifdef __cplusplus -extern "C" { -#endif -#define _FX_LSB_FIRST_ #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])) @@ -275,18 +280,6 @@ int FXSYS_round(FX_FLOAT f); #define FXSYS_sqrt2(a, b) (FX_FLOAT)FXSYS_sqrt((a)*(a) + (b)*(b)) #ifdef __cplusplus }; - -#if defined(__clang__) || _MSC_VER >= 1700 -#define FX_FINAL final -#define FX_OVERRIDE override -#elif defined(__GNUC__) && __cplusplus >= 201103 && \ - (__GNUC__ * 10000 + __GNUC_MINOR__ * 100) >= 40700 -#define FX_FINAL final -#define FX_OVERRIDE override -#else -#define FX_FINAL -#define FX_OVERRIDE -#endif #endif // To print a size_t value in a portable way: @@ -311,12 +304,20 @@ int FXSYS_round(FX_FLOAT f); #define PRIuS "zu" #endif -#else // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ +#else // _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ #if !defined(PRIuS) #define PRIuS "Iu" #endif -#endif +#endif // _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_ -#endif +// 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_