include/SDL_config_windows.h
author Sam Lantinga <slouken@libsdl.org>
Sat, 09 Sep 2017 08:36:37 -0700
changeset 11480 e7a79b236dc0
parent 11457 3db9f2a42870
child 11486 0f4bf9e4a498
permissions -rw-r--r--
Fixed bug 3760 - RWops doesn't check for integer overflow when stdio_fseek only supports 32 bits

Simon Hug

When RWops seeks with fseek or fseeko it uses the types long or off_t which can be 32 bits on some platforms. stdio_seek does not check if the 64-bit integer for the offset fits into a 32-bit integer. Offsets equal or larger than 2 GiB will have implementation-defined behavior and failure states would be very confusing to debug.

The attached patch adds range checking by using the macros from limits.h for long type and some bit shifting for off_t because POSIX couldn't be bothered to specify min and max macros.

It also defines HAVE_FSEEKI64 in SDL_config_windows.h so that the Windows function gets picked up automatically with the default config.

And there's an additional error message for when ftell fails.
slouken@1422
     1
/*
slouken@5535
     2
  Simple DirectMedia Layer
slouken@10737
     3
  Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
slouken@1422
     4
slouken@5535
     5
  This software is provided 'as-is', without any express or implied
slouken@5535
     6
  warranty.  In no event will the authors be held liable for any damages
slouken@5535
     7
  arising from the use of this software.
slouken@1422
     8
slouken@5535
     9
  Permission is granted to anyone to use this software for any purpose,
slouken@5535
    10
  including commercial applications, and to alter it and redistribute it
slouken@5535
    11
  freely, subject to the following restrictions:
slouken@1422
    12
slouken@5535
    13
  1. The origin of this software must not be misrepresented; you must not
slouken@5535
    14
     claim that you wrote the original software. If you use this software
slouken@5535
    15
     in a product, an acknowledgment in the product documentation would be
slouken@5535
    16
     appreciated but is not required.
slouken@5535
    17
  2. Altered source versions must be plainly marked as such, and must not be
slouken@5535
    18
     misrepresented as being the original software.
slouken@5535
    19
  3. This notice may not be removed or altered from any source distribution.
slouken@1422
    20
*/
slouken@1422
    21
slouken@10638
    22
#ifndef SDL_config_windows_h_
slouken@10638
    23
#define SDL_config_windows_h_
slouken@10903
    24
#define SDL_config_h_
slouken@1608
    25
slouken@1608
    26
#include "SDL_platform.h"
slouken@1422
    27
slouken@1422
    28
/* This is a set of defines to configure the SDL features */
slouken@1422
    29
slouken@3220
    30
#if !defined(_STDINT_H_) && (!defined(HAVE_STDINT_H) || !_HAVE_STDINT_H)
slouken@3569
    31
#if defined(__GNUC__) || defined(__DMC__) || defined(__WATCOMC__)
slouken@7191
    32
#define HAVE_STDINT_H   1
slouken@1885
    33
#elif defined(_MSC_VER)
slouken@1895
    34
typedef signed __int8 int8_t;
slouken@1895
    35
typedef unsigned __int8 uint8_t;
slouken@1895
    36
typedef signed __int16 int16_t;
slouken@1895
    37
typedef unsigned __int16 uint16_t;
slouken@1895
    38
typedef signed __int32 int32_t;
slouken@1895
    39
typedef unsigned __int32 uint32_t;
slouken@1895
    40
typedef signed __int64 int64_t;
slouken@1895
    41
typedef unsigned __int64 uint64_t;
slouken@1465
    42
#ifndef _UINTPTR_T_DEFINED
slouken@1465
    43
#ifdef  _WIN64
slouken@1895
    44
typedef unsigned __int64 uintptr_t;
slouken@1465
    45
#else
slouken@1895
    46
typedef unsigned int uintptr_t;
slouken@1465
    47
#endif
slouken@1465
    48
#define _UINTPTR_T_DEFINED
icculus@2137
    49
#endif
icculus@2132
    50
/* Older Visual C++ headers don't have the Win64-compatible typedefs... */
icculus@2132
    51
#if ((_MSC_VER <= 1200) && (!defined(DWORD_PTR)))
icculus@2132
    52
#define DWORD_PTR DWORD
icculus@2132
    53
#endif
icculus@2132
    54
#if ((_MSC_VER <= 1200) && (!defined(LONG_PTR)))
icculus@2132
    55
#define LONG_PTR LONG
icculus@2132
    56
#endif
slouken@1895
    57
#else /* !__GNUC__ && !_MSC_VER */
slouken@1465
    58
typedef signed char int8_t;
slouken@1465
    59
typedef unsigned char uint8_t;
slouken@1465
    60
typedef signed short int16_t;
slouken@1465
    61
typedef unsigned short uint16_t;
slouken@1465
    62
typedef signed int int32_t;
slouken@1465
    63
typedef unsigned int uint32_t;
slouken@1465
    64
typedef signed long long int64_t;
slouken@1465
    65
typedef unsigned long long uint64_t;
slouken@1471
    66
#ifndef _SIZE_T_DEFINED_
slouken@1471
    67
#define _SIZE_T_DEFINED_
slouken@1465
    68
typedef unsigned int size_t;
slouken@1471
    69
#endif
slouken@1470
    70
typedef unsigned int uintptr_t;
slouken@1885
    71
#endif /* __GNUC__ || _MSC_VER */
slouken@3220
    72
#endif /* !_STDINT_H_ && !HAVE_STDINT_H */
bob@3180
    73
bob@3180
    74
#ifdef _WIN64
bob@3180
    75
# define SIZEOF_VOIDP 8
bob@3180
    76
#else
bob@3180
    77
# define SIZEOF_VOIDP 4
bob@3180
    78
#endif
slouken@1422
    79
slouken@8972
    80
#define HAVE_DDRAW_H 1
slouken@8972
    81
#define HAVE_DINPUT_H 1
slouken@8972
    82
#define HAVE_DSOUND_H 1
icculus@8751
    83
#define HAVE_DXGI_H 1
slouken@8972
    84
#define HAVE_XINPUT_H 1
icculus@8751
    85
slouken@7233
    86
/* This is disabled by default to avoid C runtime dependencies and manifest requirements */
slouken@1626
    87
#ifdef HAVE_LIBC
slouken@1422
    88
/* Useful headers */
slouken@11480
    89
#define STDC_HEADERS 1
slouken@11480
    90
#define HAVE_CTYPE_H 1
slouken@11480
    91
#define HAVE_FLOAT_H 1
slouken@11480
    92
#define HAVE_LIMITS_H 1
slouken@11480
    93
#define HAVE_MATH_H 1
slouken@11480
    94
#define HAVE_SIGNAL_H 1
slouken@1471
    95
#define HAVE_STDIO_H 1
slouken@1471
    96
#define HAVE_STRING_H 1
slouken@1471
    97
slouken@1471
    98
/* C library functions */
slouken@1471
    99
#define HAVE_MALLOC 1
slouken@1471
   100
#define HAVE_CALLOC 1
slouken@1471
   101
#define HAVE_REALLOC 1
slouken@1471
   102
#define HAVE_FREE 1
slouken@1471
   103
#define HAVE_ALLOCA 1
slouken@1471
   104
#define HAVE_QSORT 1
slouken@1471
   105
#define HAVE_ABS 1
slouken@1471
   106
#define HAVE_MEMSET 1
slouken@1471
   107
#define HAVE_MEMCPY 1
slouken@1471
   108
#define HAVE_MEMMOVE 1
slouken@1471
   109
#define HAVE_MEMCMP 1
slouken@1471
   110
#define HAVE_STRLEN 1
slouken@1471
   111
#define HAVE__STRREV 1
slouken@1471
   112
#define HAVE__STRUPR 1
slouken@1471
   113
#define HAVE__STRLWR 1
slouken@1471
   114
#define HAVE_STRCHR 1
slouken@1471
   115
#define HAVE_STRRCHR 1
slouken@1471
   116
#define HAVE_STRSTR 1
slouken@1471
   117
#define HAVE__LTOA 1
slouken@1471
   118
#define HAVE__ULTOA 1
slouken@1471
   119
#define HAVE_STRTOL 1
slouken@1471
   120
#define HAVE_STRTOUL 1
slouken@1471
   121
#define HAVE_STRTOD 1
slouken@1471
   122
#define HAVE_ATOI 1
slouken@1471
   123
#define HAVE_ATOF 1
slouken@1471
   124
#define HAVE_STRCMP 1
slouken@1471
   125
#define HAVE_STRNCMP 1
slouken@1510
   126
#define HAVE__STRICMP 1
slouken@1512
   127
#define HAVE__STRNICMP 1
slouken@4874
   128
#define HAVE_ATAN 1
slouken@4874
   129
#define HAVE_ATAN2 1
icculus@8056
   130
#define HAVE_ACOS  1
icculus@8056
   131
#define HAVE_ASIN  1
slouken@3032
   132
#define HAVE_CEIL 1
slouken@3012
   133
#define HAVE_COS 1
slouken@3012
   134
#define HAVE_COSF 1
slouken@3012
   135
#define HAVE_FABS 1
slouken@3012
   136
#define HAVE_FLOOR 1
slouken@3012
   137
#define HAVE_LOG 1
slouken@3012
   138
#define HAVE_POW 1
slouken@3012
   139
#define HAVE_SIN 1
slouken@3012
   140
#define HAVE_SINF 1
slouken@3012
   141
#define HAVE_SQRT 1
slouken@8840
   142
#define HAVE_SQRTF 1
slouken@8840
   143
#define HAVE_TAN 1
slouken@8840
   144
#define HAVE_TANF 1
slouken@11480
   145
#if defined(_MSC_VER)
slouken@11480
   146
/* These functions were added with the VC++ 2013 C runtime library */
slouken@7812
   147
#if _MSC_VER >= 1800
slouken@7754
   148
#define HAVE_STRTOLL 1
icculus@8089
   149
#define HAVE_VSSCANF 1
slouken@7754
   150
#define HAVE_COPYSIGN 1
slouken@7754
   151
#define HAVE_SCALBN 1
slouken@7754
   152
#endif
slouken@11480
   153
/* This function is available with at least the VC++ 2008 C runtime library */
slouken@11480
   154
#if _MSC_VER >= 1400
slouken@11480
   155
#define HAVE__FSEEKI64 1
slouken@11480
   156
#endif
slouken@11480
   157
#endif
slouken@7754
   158
#if !defined(_MSC_VER) || defined(_USE_MATH_DEFINES)
slouken@7754
   159
#define HAVE_M_PI 1
slouken@7754
   160
#endif
slouken@1471
   161
#else
slouken@7191
   162
#define HAVE_STDARG_H   1
slouken@7191
   163
#define HAVE_STDDEF_H   1
slouken@1471
   164
#endif
slouken@1422
   165
slouken@1422
   166
/* Enable various audio drivers */
icculus@10888
   167
#define SDL_AUDIO_DRIVER_WASAPI 1
slouken@7191
   168
#define SDL_AUDIO_DRIVER_DSOUND 1
slouken@11330
   169
#define SDL_AUDIO_DRIVER_XAUDIO2    0
slouken@7191
   170
#define SDL_AUDIO_DRIVER_WINMM  1
slouken@7191
   171
#define SDL_AUDIO_DRIVER_DISK   1
slouken@7191
   172
#define SDL_AUDIO_DRIVER_DUMMY  1
slouken@1422
   173
slouken@1422
   174
/* Enable various input drivers */
slouken@7191
   175
#define SDL_JOYSTICK_DINPUT 1
slouken@8972
   176
#define SDL_JOYSTICK_XINPUT 1
slouken@7191
   177
#define SDL_HAPTIC_DINPUT   1
slouken@8972
   178
#define SDL_HAPTIC_XINPUT   1
slouken@1422
   179
slouken@1422
   180
/* Enable various shared object loading systems */
slouken@7191
   181
#define SDL_LOADSO_WINDOWS  1
slouken@1422
   182
slouken@1422
   183
/* Enable various threading systems */
slouken@7191
   184
#define SDL_THREAD_WINDOWS  1
slouken@1422
   185
slouken@1422
   186
/* Enable various timer systems */
slouken@7191
   187
#define SDL_TIMER_WINDOWS   1
slouken@1422
   188
slouken@1422
   189
/* Enable various video drivers */
slouken@7191
   190
#define SDL_VIDEO_DRIVER_DUMMY  1
slouken@7191
   191
#define SDL_VIDEO_DRIVER_WINDOWS    1
slouken@1895
   192
slouken@5088
   193
#ifndef SDL_VIDEO_RENDER_D3D
slouken@7191
   194
#define SDL_VIDEO_RENDER_D3D    1
slouken@5086
   195
#endif
slouken@8591
   196
#ifndef SDL_VIDEO_RENDER_D3D11
slouken@8602
   197
#define SDL_VIDEO_RENDER_D3D11	0
slouken@8591
   198
#endif
slouken@1422
   199
slouken@1422
   200
/* Enable OpenGL support */
slouken@5088
   201
#ifndef SDL_VIDEO_OPENGL
slouken@7191
   202
#define SDL_VIDEO_OPENGL    1
slouken@5088
   203
#endif
slouken@5088
   204
#ifndef SDL_VIDEO_OPENGL_WGL
slouken@7191
   205
#define SDL_VIDEO_OPENGL_WGL    1
slouken@5088
   206
#endif
slouken@5088
   207
#ifndef SDL_VIDEO_RENDER_OGL
slouken@7191
   208
#define SDL_VIDEO_RENDER_OGL    1
slouken@1465
   209
#endif
gabomdq@8021
   210
#ifndef SDL_VIDEO_RENDER_OGL_ES2
gabomdq@8021
   211
#define SDL_VIDEO_RENDER_OGL_ES2    1
gabomdq@8021
   212
#endif
gabomdq@8021
   213
#ifndef SDL_VIDEO_OPENGL_ES2
gabomdq@8021
   214
#define SDL_VIDEO_OPENGL_ES2    1
gabomdq@8021
   215
#endif
gabomdq@8021
   216
#ifndef SDL_VIDEO_OPENGL_EGL
gabomdq@8021
   217
#define SDL_VIDEO_OPENGL_EGL    1
gabomdq@8021
   218
#endif
gabomdq@8021
   219
slouken@11381
   220
/* Enable Vulkan support */
slouken@11381
   221
#define SDL_VIDEO_VULKAN 1
slouken@1422
   222
icculus@3170
   223
/* Enable system power support */
icculus@3170
   224
#define SDL_POWER_WINDOWS 1
icculus@3170
   225
icculus@7667
   226
/* Enable filesystem support */
icculus@7667
   227
#define SDL_FILESYSTEM_WINDOWS  1
icculus@7667
   228
slouken@1480
   229
/* Enable assembly routines (Win64 doesn't have inline asm) */
slouken@1480
   230
#ifndef _WIN64
slouken@7191
   231
#define SDL_ASSEMBLY_ROUTINES   1
slouken@1480
   232
#endif
slouken@1422
   233
slouken@10638
   234
#endif /* SDL_config_windows_h_ */