mirror of https://github.com/encounter/SDL.git
Added SDL_crc16() to be used in joystick GUIDs after 2.24.0
This commit is contained in:
parent
a1e34b5e35
commit
b4c4dd84c2
|
@ -18,7 +18,7 @@ General:
|
|||
* The patchlevel indicates successive prereleases, for example
|
||||
2.23.1 and 2.23.2 would be prereleases during development of
|
||||
the SDL 2.24.0 stable release.
|
||||
* Added SDL_bsearch() and SDL_utf8strnlen() to the stdlib routines
|
||||
* Added SDL_bsearch(), SDL_crc16(), and SDL_utf8strnlen() to the stdlib routines
|
||||
* Added SDL_size_mul_overflow() and SDL_size_add_overflow() for better size overflow protection
|
||||
* Added SDL_ResetHint() to reset a hint to the default value
|
||||
* The hint SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS now defaults on
|
||||
|
|
|
@ -503,6 +503,7 @@ extern DECLSPEC int SDLCALL SDL_isgraph(int x);
|
|||
extern DECLSPEC int SDLCALL SDL_toupper(int x);
|
||||
extern DECLSPEC int SDLCALL SDL_tolower(int x);
|
||||
|
||||
extern DECLSPEC Uint16 SDLCALL SDL_crc16(Uint16 crc, const void *data, size_t len);
|
||||
extern DECLSPEC Uint32 SDLCALL SDL_crc32(Uint32 crc, const void *data, size_t len);
|
||||
|
||||
extern DECLSPEC void *SDLCALL SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len);
|
||||
|
|
|
@ -857,3 +857,4 @@
|
|||
++'_SDL_GetPointDisplayIndex'.'SDL2.dll'.'SDL_GetPointDisplayIndex'
|
||||
++'_SDL_GetRectDisplayIndex'.'SDL2.dll'.'SDL_GetRectDisplayIndex'
|
||||
++'_SDL_ResetHint'.'SDL2.dll'.'SDL_ResetHint'
|
||||
++'_SDL_crc16'.'SDL2.dll'.'SDL_crc16'
|
||||
|
|
|
@ -883,3 +883,4 @@
|
|||
#define SDL_GetPointDisplayIndex SDL_GetPointDisplayIndex_REAL
|
||||
#define SDL_GetRectDisplayIndex SDL_GetRectDisplayIndex_REAL
|
||||
#define SDL_ResetHint SDL_ResetHint_REAL
|
||||
#define SDL_crc16 SDL_crc16_REAL
|
||||
|
|
|
@ -966,3 +966,4 @@ SDL_DYNAPI_PROC(int,SDL_GetDefaultAudioInfo,(char **a, SDL_AudioSpec *b, int c),
|
|||
SDL_DYNAPI_PROC(int,SDL_GetPointDisplayIndex,(const SDL_Point *a),(a),return)
|
||||
SDL_DYNAPI_PROC(int,SDL_GetRectDisplayIndex,(const SDL_Rect *a),(a),return)
|
||||
SDL_DYNAPI_PROC(SDL_bool,SDL_ResetHint,(const char *a),(a),return)
|
||||
SDL_DYNAPI_PROC(Uint16,SDL_crc16,(Uint16 a, const void *b, size_t c),(a,b,c),return)
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
*/
|
||||
#include "../SDL_internal.h"
|
||||
|
||||
#include "SDL_stdinc.h"
|
||||
|
||||
|
||||
/* Public domain CRC implementation adapted from:
|
||||
http://home.thep.lu.se/~bjorn/crc/crc32_simple.c
|
||||
*/
|
||||
/* NOTE: DO NOT CHANGE THIS ALGORITHM
|
||||
There is code that relies on this in the joystick code
|
||||
*/
|
||||
|
||||
static Uint16 crc16_for_byte(Uint8 r)
|
||||
{
|
||||
Uint16 crc = 0;
|
||||
int i;
|
||||
for (i = 0; i < 8; ++i) {
|
||||
crc = ((crc ^ r) & 1? 0xA001 : 0) ^ crc >> 1;
|
||||
r >>= 1;
|
||||
}
|
||||
return crc;
|
||||
}
|
||||
|
||||
Uint16 SDL_crc16(Uint16 crc, const void *data, size_t len)
|
||||
{
|
||||
/* As an optimization we can precalculate a 256 entry table for each byte */
|
||||
size_t i;
|
||||
for(i = 0; i < len; ++i) {
|
||||
crc = crc16_for_byte((Uint8)crc ^ ((const Uint8*)data)[i]) ^ crc >> 8;
|
||||
}
|
||||
return crc;
|
||||
}
|
||||
|
||||
/* vi: set ts=4 sw=4 expandtab: */
|
Loading…
Reference in New Issue