src/thread/SDL_thread_c.h
author Ryan C. Gordon
Mon, 01 Jan 2018 19:16:51 -0500
changeset 11803 454f6dc9cb85
parent 11284 3db78361e751
child 11811 5d94cb6b24d3
permissions -rw-r--r--
windows: Remove references to GetVersionExA (thanks, Andrew Pilley!).

"GetVersionExA is deprecated in windows 8.1 and above's SDK, causing a warning
when building against the win10 SDK. Attached patch cleans up the usage for a
warning-free build.

GetVersionExA was being used to test to see if SDL was running on win9x or
winnt. A quick chat with Ryan on twitter suggested that SDL doesn't
officially support win9x anymore, so the call to this can be outright removed.

As an aside, replacing the call to GetVersionExA with VerifyVersionInfoA (the
recommended path) would have been pointless, as VerifyVersionInfoA only
supports VER_PLATFORM_WIN32_NT and doesn't officially support any other value
for dwPlatformId currently. (And it's probable that win9x SDKs didn't have
VerifyVersionInfo* in them anyway.)"

Fixes Bugzilla #4019.
slouken@0
     1
/*
slouken@5535
     2
  Simple DirectMedia Layer
slouken@10737
     3
  Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
slouken@0
     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@0
     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@0
    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@0
    20
*/
icculus@8093
    21
#include "../SDL_internal.h"
slouken@0
    22
slouken@10638
    23
#ifndef SDL_thread_c_h_
slouken@10638
    24
#define SDL_thread_c_h_
slouken@0
    25
slouken@7730
    26
#include "SDL_thread.h"
slouken@7730
    27
slouken@1361
    28
/* Need the definitions of SYS_ThreadHandle */
slouken@1361
    29
#if SDL_THREADS_DISABLED
slouken@1361
    30
#include "generic/SDL_systhread_c.h"
slouken@1361
    31
#elif SDL_THREAD_PTHREAD
slouken@1361
    32
#include "pthread/SDL_systhread_c.h"
slouken@5062
    33
#elif SDL_THREAD_WINDOWS
slouken@5062
    34
#include "windows/SDL_systhread_c.h"
kimonline@7009
    35
#elif SDL_THREAD_PSP
kimonline@7009
    36
#include "psp/SDL_systhread_c.h"
dludwig@8356
    37
#elif SDL_THREAD_STDCPP
dludwig@8356
    38
#include "stdcpp/SDL_systhread_c.h"
slouken@1361
    39
#else
slouken@1361
    40
#error Need thread implementation for this platform
slouken@1361
    41
#include "generic/SDL_systhread_c.h"
slouken@1361
    42
#endif
slouken@1361
    43
#include "../SDL_error_c.h"
slouken@0
    44
icculus@7978
    45
typedef enum SDL_ThreadState
icculus@7978
    46
{
icculus@7978
    47
    SDL_THREAD_STATE_ALIVE,
icculus@7978
    48
    SDL_THREAD_STATE_DETACHED,
icculus@7978
    49
    SDL_THREAD_STATE_ZOMBIE,
icculus@7978
    50
    SDL_THREAD_STATE_CLEANED,
icculus@7978
    51
} SDL_ThreadState;
icculus@7978
    52
slouken@0
    53
/* This is the system-independent thread info structure */
slouken@1895
    54
struct SDL_Thread
slouken@1895
    55
{
slouken@3578
    56
    SDL_threadID threadid;
slouken@1895
    57
    SYS_ThreadHandle handle;
slouken@1895
    58
    int status;
icculus@7978
    59
    SDL_atomic_t state;  /* SDL_THREAD_STATE_* */
slouken@1895
    60
    SDL_error errbuf;
icculus@5969
    61
    char *name;
icculus@10145
    62
    size_t stacksize;  /* 0 for default, >0 for user-specified stack size. */
slouken@1895
    63
    void *data;
slouken@0
    64
};
slouken@0
    65
slouken@0
    66
/* This is the function called to run a thread */
slouken@0
    67
extern void SDL_RunThread(void *data);
slouken@0
    68
slouken@7393
    69
/* This is the system-independent thread local storage structure */
slouken@7393
    70
typedef struct {
icculus@7482
    71
    unsigned int limit;
slouken@7393
    72
    struct {
slouken@7393
    73
        void *data;
slouken@11284
    74
        void (SDLCALL *destructor)(void*);
slouken@7393
    75
    } array[1];
slouken@7393
    76
} SDL_TLSData;
slouken@7393
    77
slouken@7393
    78
/* This is how many TLS entries we allocate at once */
slouken@7393
    79
#define TLS_ALLOC_CHUNKSIZE 4
slouken@7393
    80
slouken@7393
    81
/* Get cross-platform, slow, thread local storage for this thread.
slouken@7393
    82
   This is only intended as a fallback if getting real thread-local
slouken@7393
    83
   storage fails or isn't supported on this platform.
slouken@7393
    84
 */
slouken@10609
    85
extern SDL_TLSData *SDL_Generic_GetTLSData(void);
slouken@7393
    86
slouken@7393
    87
/* Set cross-platform, slow, thread local storage for this thread.
slouken@7393
    88
   This is only intended as a fallback if getting real thread-local
slouken@7393
    89
   storage fails or isn't supported on this platform.
slouken@7393
    90
 */
slouken@7393
    91
extern int SDL_Generic_SetTLSData(SDL_TLSData *data);
slouken@7393
    92
slouken@10638
    93
#endif /* SDL_thread_c_h_ */
slouken@6044
    94
slouken@1895
    95
/* vi: set ts=4 sw=4 expandtab: */