mirror of
https://github.com/YGGverse/xash3d-fwgs.git
synced 2025-01-30 08:44:31 +00:00
public: crclib now is part of public library
This commit is contained in:
parent
9735dedf2f
commit
70d45f23de
@ -117,6 +117,7 @@ typedef enum
|
|||||||
#include "crtlib.h"
|
#include "crtlib.h"
|
||||||
#include "cvar.h"
|
#include "cvar.h"
|
||||||
#include "con_nprint.h"
|
#include "con_nprint.h"
|
||||||
|
#include "crclib.h"
|
||||||
|
|
||||||
#define XASH_VERSION "0.99" // engine current version
|
#define XASH_VERSION "0.99" // engine current version
|
||||||
|
|
||||||
@ -296,14 +297,6 @@ typedef enum
|
|||||||
key_message
|
key_message
|
||||||
} keydest_t;
|
} keydest_t;
|
||||||
|
|
||||||
// MD5 Hash
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint buf[4];
|
|
||||||
uint bits[2];
|
|
||||||
byte in[64];
|
|
||||||
} MD5Context_t;
|
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
RD_NONE = 0,
|
RD_NONE = 0,
|
||||||
@ -541,6 +534,8 @@ const char *FS_GetDiskPath( const char *name, qboolean gamedironly );
|
|||||||
byte *W_LoadLump( wfile_t *wad, const char *lumpname, size_t *lumpsizeptr, const char type );
|
byte *W_LoadLump( wfile_t *wad, const char *lumpname, size_t *lumpsizeptr, const char type );
|
||||||
void W_Close( wfile_t *wad );
|
void W_Close( wfile_t *wad );
|
||||||
byte *FS_LoadFile( const char *path, fs_offset_t *filesizeptr, qboolean gamedironly );
|
byte *FS_LoadFile( const char *path, fs_offset_t *filesizeptr, qboolean gamedironly );
|
||||||
|
qboolean CRC32_File( dword *crcvalue, const char *filename );
|
||||||
|
qboolean MD5_HashFile( byte digest[16], const char *pszFileName, uint seed[4] );
|
||||||
byte *FS_LoadDirectFile( const char *path, fs_offset_t *filesizeptr );
|
byte *FS_LoadDirectFile( const char *path, fs_offset_t *filesizeptr );
|
||||||
qboolean FS_WriteFile( const char *filename, const void *data, fs_offset_t len );
|
qboolean FS_WriteFile( const char *filename, const void *data, fs_offset_t len );
|
||||||
qboolean COM_ParseVector( char **pfile, float *v, size_t size );
|
qboolean COM_ParseVector( char **pfile, float *v, size_t size );
|
||||||
@ -792,23 +787,6 @@ void Con_CompleteCommand( field_t *field );
|
|||||||
void Cmd_AutoComplete( char *complete_string );
|
void Cmd_AutoComplete( char *complete_string );
|
||||||
void Cmd_AutoCompleteClear( void );
|
void Cmd_AutoCompleteClear( void );
|
||||||
|
|
||||||
//
|
|
||||||
// crclib.c
|
|
||||||
//
|
|
||||||
void CRC32_Init( dword *pulCRC );
|
|
||||||
byte CRC32_BlockSequence( byte *base, int length, int sequence );
|
|
||||||
void CRC32_ProcessBuffer( dword *pulCRC, const void *pBuffer, int nBuffer );
|
|
||||||
void CRC32_ProcessByte( dword *pulCRC, byte ch );
|
|
||||||
dword CRC32_Final( dword pulCRC );
|
|
||||||
qboolean CRC32_File( dword *crcvalue, const char *filename );
|
|
||||||
qboolean CRC32_MapFile( dword *crcvalue, const char *filename, qboolean multiplayer );
|
|
||||||
void MD5Init( MD5Context_t *ctx );
|
|
||||||
void MD5Update( MD5Context_t *ctx, const byte *buf, uint len );
|
|
||||||
void MD5Final( byte digest[16], MD5Context_t *ctx );
|
|
||||||
qboolean MD5_HashFile( byte digest[16], const char *pszFileName, uint seed[4] );
|
|
||||||
uint COM_HashKey( const char *string, uint hashSize );
|
|
||||||
char *MD5_Print( byte hash[16] );
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// custom.c
|
// custom.c
|
||||||
//
|
//
|
||||||
|
@ -2942,6 +2942,68 @@ byte *FS_LoadFile( const char *path, fs_offset_t *filesizeptr, qboolean gamediro
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qboolean CRC32_File( dword *crcvalue, const char *filename )
|
||||||
|
{
|
||||||
|
char buffer[1024];
|
||||||
|
int num_bytes;
|
||||||
|
file_t *f;
|
||||||
|
|
||||||
|
f = FS_Open( filename, "rb", false );
|
||||||
|
if( !f ) return false;
|
||||||
|
|
||||||
|
Assert( crcvalue != NULL );
|
||||||
|
CRC32_Init( crcvalue );
|
||||||
|
|
||||||
|
while( 1 )
|
||||||
|
{
|
||||||
|
num_bytes = FS_Read( f, buffer, sizeof( buffer ));
|
||||||
|
|
||||||
|
if( num_bytes > 0 )
|
||||||
|
CRC32_ProcessBuffer( crcvalue, buffer, num_bytes );
|
||||||
|
|
||||||
|
if( FS_Eof( f )) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
FS_Close( f );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
qboolean MD5_HashFile( byte digest[16], const char *pszFileName, uint seed[4] )
|
||||||
|
{
|
||||||
|
file_t *file;
|
||||||
|
char buffer[1024];
|
||||||
|
MD5Context_t MD5_Hash;
|
||||||
|
int bytes;
|
||||||
|
|
||||||
|
if(( file = FS_Open( pszFileName, "rb", false )) == NULL )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
memset( &MD5_Hash, 0, sizeof( MD5Context_t ));
|
||||||
|
|
||||||
|
MD5Init( &MD5_Hash );
|
||||||
|
|
||||||
|
if( seed )
|
||||||
|
{
|
||||||
|
MD5Update( &MD5_Hash, (const byte *)seed, 16 );
|
||||||
|
}
|
||||||
|
|
||||||
|
while( 1 )
|
||||||
|
{
|
||||||
|
bytes = FS_Read( file, buffer, sizeof( buffer ));
|
||||||
|
|
||||||
|
if( bytes > 0 )
|
||||||
|
MD5Update( &MD5_Hash, buffer, bytes );
|
||||||
|
|
||||||
|
if( FS_Eof( file ))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
FS_Close( file );
|
||||||
|
MD5Final( digest, &MD5_Hash );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
============
|
============
|
||||||
FS_LoadFile
|
FS_LoadFile
|
||||||
|
@ -759,6 +759,83 @@ void SV_SetupClients( void )
|
|||||||
ClearBits( sv_maxclients->flags, FCVAR_CHANGED );
|
ClearBits( sv_maxclients->flags, FCVAR_CHANGED );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static qboolean CRC32_MapFile( dword *crcvalue, const char *filename, qboolean multiplayer )
|
||||||
|
{
|
||||||
|
char headbuf[1024], buffer[1024];
|
||||||
|
int i, num_bytes, lumplen;
|
||||||
|
int version, hdr_size;
|
||||||
|
dheader_t *header;
|
||||||
|
file_t *f;
|
||||||
|
|
||||||
|
if( !crcvalue ) return false;
|
||||||
|
|
||||||
|
// always calc same checksum for singleplayer
|
||||||
|
if( multiplayer == false )
|
||||||
|
{
|
||||||
|
*crcvalue = (('H'<<24)+('S'<<16)+('A'<<8)+'X');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
f = FS_Open( filename, "rb", false );
|
||||||
|
if( !f ) return false;
|
||||||
|
|
||||||
|
// read version number
|
||||||
|
FS_Read( f, &version, sizeof( int ));
|
||||||
|
FS_Seek( f, 0, SEEK_SET );
|
||||||
|
|
||||||
|
hdr_size = sizeof( int ) + sizeof( dlump_t ) * HEADER_LUMPS;
|
||||||
|
num_bytes = FS_Read( f, headbuf, hdr_size );
|
||||||
|
|
||||||
|
// corrupted map ?
|
||||||
|
if( num_bytes != hdr_size )
|
||||||
|
{
|
||||||
|
FS_Close( f );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
header = (dheader_t *)headbuf;
|
||||||
|
|
||||||
|
// invalid version ?
|
||||||
|
switch( header->version )
|
||||||
|
{
|
||||||
|
case Q1BSP_VERSION:
|
||||||
|
case HLBSP_VERSION:
|
||||||
|
case QBSP2_VERSION:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
FS_Close( f );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
CRC32_Init( crcvalue );
|
||||||
|
|
||||||
|
for( i = LUMP_PLANES; i < HEADER_LUMPS; i++ )
|
||||||
|
{
|
||||||
|
lumplen = header->lumps[i].filelen;
|
||||||
|
FS_Seek( f, header->lumps[i].fileofs, SEEK_SET );
|
||||||
|
|
||||||
|
while( lumplen > 0 )
|
||||||
|
{
|
||||||
|
if( lumplen >= sizeof( buffer ))
|
||||||
|
num_bytes = FS_Read( f, buffer, sizeof( buffer ));
|
||||||
|
else num_bytes = FS_Read( f, buffer, lumplen );
|
||||||
|
|
||||||
|
if( num_bytes > 0 )
|
||||||
|
{
|
||||||
|
lumplen -= num_bytes;
|
||||||
|
CRC32_ProcessBuffer( crcvalue, buffer, num_bytes );
|
||||||
|
}
|
||||||
|
|
||||||
|
// file unexpected end ?
|
||||||
|
if( FS_Eof( f )) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FS_Close( f );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
================
|
================
|
||||||
SV_SpawnServer
|
SV_SpawnServer
|
||||||
|
@ -13,8 +13,10 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "common.h"
|
#include "crclib.h"
|
||||||
#include "client.h"
|
#include "crtlib.h"
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
#define NUM_BYTES 256
|
#define NUM_BYTES 256
|
||||||
#define CRC32_INIT_VALUE 0xFFFFFFFFUL
|
#define CRC32_INIT_VALUE 0xFFFFFFFFUL
|
||||||
@ -204,109 +206,6 @@ byte CRC32_BlockSequence( byte *base, int length, int sequence )
|
|||||||
return (byte)CRC;
|
return (byte)CRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
qboolean CRC32_File( dword *crcvalue, const char *filename )
|
|
||||||
{
|
|
||||||
char buffer[1024];
|
|
||||||
int num_bytes;
|
|
||||||
file_t *f;
|
|
||||||
|
|
||||||
f = FS_Open( filename, "rb", false );
|
|
||||||
if( !f ) return false;
|
|
||||||
|
|
||||||
Assert( crcvalue != NULL );
|
|
||||||
CRC32_Init( crcvalue );
|
|
||||||
|
|
||||||
while( 1 )
|
|
||||||
{
|
|
||||||
num_bytes = FS_Read( f, buffer, sizeof( buffer ));
|
|
||||||
|
|
||||||
if( num_bytes > 0 )
|
|
||||||
CRC32_ProcessBuffer( crcvalue, buffer, num_bytes );
|
|
||||||
|
|
||||||
if( FS_Eof( f )) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
FS_Close( f );
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
qboolean CRC32_MapFile( dword *crcvalue, const char *filename, qboolean multiplayer )
|
|
||||||
{
|
|
||||||
char headbuf[1024], buffer[1024];
|
|
||||||
int i, num_bytes, lumplen;
|
|
||||||
int version, hdr_size;
|
|
||||||
dheader_t *header;
|
|
||||||
file_t *f;
|
|
||||||
|
|
||||||
if( !crcvalue ) return false;
|
|
||||||
|
|
||||||
// always calc same checksum for singleplayer
|
|
||||||
if( multiplayer == false )
|
|
||||||
{
|
|
||||||
*crcvalue = (('H'<<24)+('S'<<16)+('A'<<8)+'X');
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
f = FS_Open( filename, "rb", false );
|
|
||||||
if( !f ) return false;
|
|
||||||
|
|
||||||
// read version number
|
|
||||||
FS_Read( f, &version, sizeof( int ));
|
|
||||||
FS_Seek( f, 0, SEEK_SET );
|
|
||||||
|
|
||||||
hdr_size = sizeof( int ) + sizeof( dlump_t ) * HEADER_LUMPS;
|
|
||||||
num_bytes = FS_Read( f, headbuf, hdr_size );
|
|
||||||
|
|
||||||
// corrupted map ?
|
|
||||||
if( num_bytes != hdr_size )
|
|
||||||
{
|
|
||||||
FS_Close( f );
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
header = (dheader_t *)headbuf;
|
|
||||||
|
|
||||||
// invalid version ?
|
|
||||||
switch( header->version )
|
|
||||||
{
|
|
||||||
case Q1BSP_VERSION:
|
|
||||||
case HLBSP_VERSION:
|
|
||||||
case QBSP2_VERSION:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
FS_Close( f );
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
CRC32_Init( crcvalue );
|
|
||||||
|
|
||||||
for( i = LUMP_PLANES; i < HEADER_LUMPS; i++ )
|
|
||||||
{
|
|
||||||
lumplen = header->lumps[i].filelen;
|
|
||||||
FS_Seek( f, header->lumps[i].fileofs, SEEK_SET );
|
|
||||||
|
|
||||||
while( lumplen > 0 )
|
|
||||||
{
|
|
||||||
if( lumplen >= sizeof( buffer ))
|
|
||||||
num_bytes = FS_Read( f, buffer, sizeof( buffer ));
|
|
||||||
else num_bytes = FS_Read( f, buffer, lumplen );
|
|
||||||
|
|
||||||
if( num_bytes > 0 )
|
|
||||||
{
|
|
||||||
lumplen -= num_bytes;
|
|
||||||
CRC32_ProcessBuffer( crcvalue, buffer, num_bytes );
|
|
||||||
}
|
|
||||||
|
|
||||||
// file unexpected end ?
|
|
||||||
if( FS_Eof( f )) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FS_Close( f );
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MD5Transform( uint buf[4], const uint in[16] );
|
void MD5Transform( uint buf[4], const uint in[16] );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -529,42 +428,6 @@ void MD5Transform( uint buf[4], const uint in[16] )
|
|||||||
buf[3] += d;
|
buf[3] += d;
|
||||||
}
|
}
|
||||||
|
|
||||||
qboolean MD5_HashFile( byte digest[16], const char *pszFileName, uint seed[4] )
|
|
||||||
{
|
|
||||||
file_t *file;
|
|
||||||
char buffer[1024];
|
|
||||||
MD5Context_t MD5_Hash;
|
|
||||||
int bytes;
|
|
||||||
|
|
||||||
if(( file = FS_Open( pszFileName, "rb", false )) == NULL )
|
|
||||||
return false;
|
|
||||||
|
|
||||||
memset( &MD5_Hash, 0, sizeof( MD5Context_t ));
|
|
||||||
|
|
||||||
MD5Init( &MD5_Hash );
|
|
||||||
|
|
||||||
if( seed )
|
|
||||||
{
|
|
||||||
MD5Update( &MD5_Hash, (const byte *)seed, 16 );
|
|
||||||
}
|
|
||||||
|
|
||||||
while( 1 )
|
|
||||||
{
|
|
||||||
bytes = FS_Read( file, buffer, sizeof( buffer ));
|
|
||||||
|
|
||||||
if( bytes > 0 )
|
|
||||||
MD5Update( &MD5_Hash, buffer, bytes );
|
|
||||||
|
|
||||||
if( FS_Eof( file ))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
FS_Close( file );
|
|
||||||
MD5Final( digest, &MD5_Hash );
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=================
|
=================
|
||||||
MD5_Print
|
MD5_Print
|
41
public/crclib.h
Normal file
41
public/crclib.h
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
crclib.c - generate crc stuff
|
||||||
|
Copyright (C) 2007 Uncle Mike
|
||||||
|
Copyright (C) 2019 a1batross
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
#ifndef CRCLIB_H
|
||||||
|
#define CRCLIB_H
|
||||||
|
|
||||||
|
#include "xash3d_types.h"
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint buf[4];
|
||||||
|
uint bits[2];
|
||||||
|
byte in[64];
|
||||||
|
} MD5Context_t;
|
||||||
|
|
||||||
|
|
||||||
|
void CRC32_Init( dword *pulCRC );
|
||||||
|
byte CRC32_BlockSequence( byte *base, int length, int sequence );
|
||||||
|
void CRC32_ProcessBuffer( dword *pulCRC, const void *pBuffer, int nBuffer );
|
||||||
|
void CRC32_ProcessByte( dword *pulCRC, byte ch );
|
||||||
|
dword CRC32_Final( dword pulCRC );
|
||||||
|
void MD5Init( MD5Context_t *ctx );
|
||||||
|
void MD5Update( MD5Context_t *ctx, const byte *buf, uint len );
|
||||||
|
void MD5Final( byte digest[16], MD5Context_t *ctx );
|
||||||
|
uint COM_HashKey( const char *string, uint hashSize );
|
||||||
|
char *MD5_Print( byte hash[16] );
|
||||||
|
|
||||||
|
#endif // CRCLIB_H
|
@ -16,6 +16,8 @@ GNU General Public License for more details.
|
|||||||
#ifndef STDLIB_H
|
#ifndef STDLIB_H
|
||||||
#define STDLIB_H
|
#define STDLIB_H
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#define _format(x) __attribute__((format(printf, x, x+1)))
|
#define _format(x) __attribute__((format(printf, x, x+1)))
|
||||||
#else
|
#else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user