You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
3.7 KiB
180 lines
3.7 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
// |
|
//=============================================================================// |
|
// tagbuild.cpp : Defines the entry point for the console application. |
|
// |
|
|
|
#include "stdafx.h" |
|
#include <stdio.h> |
|
#include <process.h> |
|
#include <string.h> |
|
#include "interface.h" |
|
#include "imysqlwrapper.h" |
|
|
|
const char *search = "VLV_INTERNAL "; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void printusage( void ) |
|
{ |
|
printf( "usage: tagbuild engine.dll buildid <hostname database username password>\n" ); |
|
|
|
// Exit app |
|
exit( 1 ); |
|
} |
|
|
|
int main(int argc, char* argv[]) |
|
{ |
|
if ( argc != 3 && argc != 7 ) |
|
{ |
|
printusage(); |
|
} |
|
|
|
int idlen = strlen( argv[ 2 ] ); |
|
|
|
if ( idlen > 32 ) |
|
{ |
|
printf( "id string '%s' is %i long, 32 is max\n", argv[ 2 ], idlen ); |
|
printusage(); |
|
} |
|
|
|
// Open for reading and writing |
|
FILE *fp = fopen( argv[ 1 ], "r+" ); |
|
if ( !fp ) |
|
{ |
|
printf( "unable to open %s\n", argv[ 1 ] ); |
|
exit( 1 ); |
|
} |
|
|
|
fseek( fp, 0, SEEK_END ); |
|
int size = ftell( fp ); |
|
fseek( fp, 0, SEEK_SET ); |
|
|
|
int searchlen = strlen( search ); |
|
|
|
char alreadytagged[ 32 ]; |
|
Q_memset( alreadytagged, ' ', sizeof( alreadytagged ) ); |
|
alreadytagged[ 31 ] = 0; |
|
// Copies in the id, but doesn't copy the terminating '\0' |
|
Q_memcpy( alreadytagged, argv[ 2 ], Q_strlen( argv[ 2 ] ) ); |
|
|
|
bool found = false; |
|
char *buf = new char[ size ]; |
|
if ( buf ) |
|
{ |
|
fread( buf, size, 1, fp ); |
|
|
|
// Now search |
|
char *start = buf; |
|
while ( start - buf < ( size - searchlen ) ) |
|
{ |
|
if ( !memcmp( start, search, searchlen - 1 ) ) |
|
{ |
|
int pos = start - buf; |
|
|
|
printf( "Found placeholder at %i, writing '%s' into file\n", |
|
pos, argv[ 2 ] ); |
|
|
|
fseek( fp, pos, SEEK_SET ); |
|
fwrite( argv[ 2 ], idlen, 1, fp ); |
|
while ( idlen < searchlen ) |
|
{ |
|
fputc( ' ', fp ); |
|
++idlen; |
|
} |
|
|
|
found = true; |
|
break; |
|
} |
|
else if ( !memcmp( start, alreadytagged, searchlen - 1 ) ) |
|
{ |
|
int pos = start - buf; |
|
|
|
printf( "Found tag at %i (%s)\n", pos, argv[ 2 ] ); |
|
found = true; |
|
break; |
|
} |
|
|
|
++start; |
|
} |
|
|
|
if ( !found ) |
|
{ |
|
printf( "Couldn't find search string '%s' in binary data\n", search ); |
|
} |
|
|
|
} |
|
else |
|
{ |
|
printf( "unable to allocate %i bytes for %s\n", size, argv[ 1 ] ); |
|
} |
|
|
|
|
|
fclose( fp ); |
|
|
|
if ( argc <= 3 ) |
|
{ |
|
printf( "Skipping database insertion\n" ); |
|
} |
|
else |
|
{ |
|
// Now connect to steamweb and update the engineaccess table |
|
CSysModule *sql = Sys_LoadModule( "mysql_wrapper" ); |
|
if ( sql ) |
|
{ |
|
CreateInterfaceFn factory = Sys_GetFactory( sql ); |
|
if ( factory ) |
|
{ |
|
IMySQL *mysql = ( IMySQL * )factory( MYSQL_WRAPPER_VERSION_NAME, NULL ); |
|
if ( mysql ) |
|
{ |
|
if ( mysql->InitMySQL( argv[ 4 ], argv[ 3 ], argv[ 5 ], argv[ 6 ] ) ) |
|
{ |
|
char q[ 512 ]; |
|
|
|
Q_snprintf( q, sizeof( q ), "insert into engineaccess (BuildIdentifier,AllowAccess) values (\"%s\",1);", |
|
argv[2] ); |
|
|
|
int retcode = mysql->Execute( q ); |
|
if ( retcode != 0 ) |
|
{ |
|
printf( "Query %s failed\n", q ); |
|
} |
|
else |
|
{ |
|
printf( "Successfully added buildidentifier '%s' to %s:%s\n", |
|
argv[ 2 ], argv[ 3 ], argv[ 4 ] ); |
|
} |
|
} |
|
else |
|
{ |
|
printf( "InitMySQL failed\n" ); |
|
} |
|
|
|
mysql->Release(); |
|
} |
|
else |
|
{ |
|
printf( "Unable to connect via mysql_wrapper\n"); |
|
} |
|
} |
|
else |
|
{ |
|
printf( "Unable to get factory from mysql_wrapper.dll, not updating access mysql table!!!" ); |
|
} |
|
|
|
Sys_UnloadModule( sql ); |
|
} |
|
else |
|
{ |
|
printf( "Unable to load mysql_wrapper.dll, not updating access mysql table!!!" ); |
|
} |
|
} |
|
|
|
return 0; |
|
}
|
|
|