summaryrefslogtreecommitdiff
path: root/src/cl_download.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cl_download.c')
-rw-r--r--src/cl_download.c478
1 files changed, 244 insertions, 234 deletions
diff --git a/src/cl_download.c b/src/cl_download.c
index 1763fd2..a5c4c7f 100644
--- a/src/cl_download.c
+++ b/src/cl_download.c
@@ -46,25 +46,26 @@ Entry will stay in queue for entire lifetime of server connection,
to make sure each path is tried exactly once.
===============
*/
-qerror_t CL_QueueDownload( const char *path, dltype_t type ) {
+qerror_t CL_QueueDownload(const char *path, dltype_t type)
+{
dlqueue_t *q;
size_t len;
- FOR_EACH_DLQ( q ) {
+ FOR_EACH_DLQ(q) {
// avoid sending duplicate requests
- if( !FS_pathcmp( path, q->path ) ) {
- Com_DPrintf( "%s: %s [DUP]\n", __func__, path );
+ if (!FS_pathcmp(path, q->path)) {
+ Com_DPrintf("%s: %s [DUP]\n", __func__, path);
return Q_ERR_EXIST;
}
}
- len = strlen( path );
- if( len >= MAX_QPATH ) {
- Com_Error( ERR_DROP, "%s: oversize quake path", __func__ );
+ len = strlen(path);
+ if (len >= MAX_QPATH) {
+ Com_Error(ERR_DROP, "%s: oversize quake path", __func__);
}
- q = Z_Malloc( sizeof( *q ) + len );
- memcpy( q->path, path, len + 1 );
+ q = Z_Malloc(sizeof(*q) + len);
+ memcpy(q->path, path, len + 1);
q->type = type;
q->state = DL_PENDING;
@@ -72,14 +73,14 @@ qerror_t CL_QueueDownload( const char *path, dltype_t type ) {
// paks get bumped to the top and HTTP switches to single downloading.
// this prevents someone on 28k dialup trying to do both the main .pak
// and referenced configstrings data at once.
- if( type == DL_PAK )
- List_Insert( &cls.download.queue, &q->entry );
+ if (type == DL_PAK)
+ List_Insert(&cls.download.queue, &q->entry);
else
#endif
- List_Append( &cls.download.queue, &q->entry );
+ List_Append(&cls.download.queue, &q->entry);
cls.download.pending++;
- Com_DPrintf( "%s: %s [%d]\n", __func__, path, cls.download.pending );
+ Com_DPrintf("%s: %s [%d]\n", __func__, path, cls.download.pending);
return Q_ERR_SUCCESS;
}
@@ -90,17 +91,18 @@ CL_FinishDownload
Mark the queue entry as done, decrementing pending count.
===============
*/
-void CL_FinishDownload( dlqueue_t *q ) {
- if( q->state == DL_DONE ) {
- Com_Error( ERR_DROP, "%s: already done", __func__ );
+void CL_FinishDownload(dlqueue_t *q)
+{
+ if (q->state == DL_DONE) {
+ Com_Error(ERR_DROP, "%s: already done", __func__);
}
- if( !cls.download.pending ) {
- Com_Error( ERR_DROP, "%s: bad pending count", __func__ );
+ if (!cls.download.pending) {
+ Com_Error(ERR_DROP, "%s: bad pending count", __func__);
}
q->state = DL_DONE;
cls.download.pending--;
- Com_DPrintf( "%s: %s [%d]\n", __func__, q->path, cls.download.pending );
+ Com_DPrintf("%s: %s [%d]\n", __func__, q->path, cls.download.pending);
}
/*
@@ -110,25 +112,26 @@ CL_CleanupDownloads
Disconnected from server, clean up.
===============
*/
-void CL_CleanupDownloads( void ) {
+void CL_CleanupDownloads(void)
+{
dlqueue_t *q, *n;
#if USE_CURL
HTTP_CleanupDownloads();
#endif
- FOR_EACH_DLQ_SAFE( q, n ) {
- Z_Free( q );
+ FOR_EACH_DLQ_SAFE(q, n) {
+ Z_Free(q);
}
- List_Init( &cls.download.queue );
+ List_Init(&cls.download.queue);
cls.download.pending = 0;
cls.download.current = NULL;
cls.download.percent = 0;
- if( cls.download.file ) {
- FS_FCloseFile( cls.download.file );
+ if (cls.download.file) {
+ FS_FCloseFile(cls.download.file);
cls.download.file = 0;
}
@@ -136,38 +139,39 @@ void CL_CleanupDownloads( void ) {
}
// start legacy UDP download
-static qboolean start_download( dlqueue_t *q ) {
+static qboolean start_download(dlqueue_t *q)
+{
size_t len;
qhandle_t f;
ssize_t ret;
- len = strlen( q->path );
- if( len >= MAX_QPATH ) {
- Com_Error( ERR_DROP, "%s: oversize quake path", __func__ );
+ len = strlen(q->path);
+ if (len >= MAX_QPATH) {
+ Com_Error(ERR_DROP, "%s: oversize quake path", __func__);
}
// download to a temp name, and only rename
// to the real name when done, so if interrupted
// a runt file wont be left
- memcpy( cls.download.temp, q->path, len );
- memcpy( cls.download.temp + len, ".tmp", 5 );
+ memcpy(cls.download.temp, q->path, len);
+ memcpy(cls.download.temp + len, ".tmp", 5);
//ZOID
// check to see if we already have a tmp for this file, if so, try to resume
// open the file if not opened yet
- ret = FS_FOpenFile( cls.download.temp, &f, FS_MODE_RDWR );
- if( ret >= 0 ) { // it exists
+ ret = FS_FOpenFile(cls.download.temp, &f, FS_MODE_RDWR);
+ if (ret >= 0) { // it exists
cls.download.file = f;
// give the server an offset to start the download
- Com_DPrintf( "[UDP] Resuming %s\n", q->path );
- CL_ClientCommand( va( "download \"%s\" %d", q->path, (int)ret ) );
- } else if( ret == Q_ERR_NOENT ) { // it doesn't exist
- Com_DPrintf( "[UDP] Downloading %s\n", q->path );
- CL_ClientCommand( va( "download \"%s\"", q->path ) );
+ Com_DPrintf("[UDP] Resuming %s\n", q->path);
+ CL_ClientCommand(va("download \"%s\" %d", q->path, (int)ret));
+ } else if (ret == Q_ERR_NOENT) { // it doesn't exist
+ Com_DPrintf("[UDP] Downloading %s\n", q->path);
+ CL_ClientCommand(va("download \"%s\"", q->path));
} else { // error happened
- Com_EPrintf( "[UDP] Couldn't open %s for appending: %s\n",
- cls.download.temp, Q_ErrorString( ret ) );
- CL_FinishDownload( q );
+ Com_EPrintf("[UDP] Couldn't open %s for appending: %s\n",
+ cls.download.temp, Q_ErrorString(ret));
+ CL_FinishDownload(q);
return qfalse;
}
@@ -183,16 +187,17 @@ CL_StartNextDownload
Start another UDP download if possible
===============
*/
-void CL_StartNextDownload( void ) {
+void CL_StartNextDownload(void)
+{
dlqueue_t *q;
- if( !cls.download.pending || cls.download.current ) {
+ if (!cls.download.pending || cls.download.current) {
return;
}
- FOR_EACH_DLQ( q ) {
- if( q->state == DL_PENDING ) {
- if( start_download( q ) ) {
+ FOR_EACH_DLQ(q) {
+ if (q->state == DL_PENDING) {
+ if (start_download(q)) {
break;
}
}
@@ -206,75 +211,76 @@ CL_HandleDownload
A download data has been received from the server
=====================
*/
-void CL_HandleDownload( const byte *data, int size, int percent ) {
+void CL_HandleDownload(const byte *data, int size, int percent)
+{
dlqueue_t *q = cls.download.current;
const char *msg = NULL;
qerror_t ret;
- if( !q ) {
- Com_Error( ERR_DROP, "%s: no download requested", __func__ );
+ if (!q) {
+ Com_Error(ERR_DROP, "%s: no download requested", __func__);
}
- if( size == -1 ) {
- if( !percent ) {
+ if (size == -1) {
+ if (!percent) {
msg = "FAIL";
} else {
msg = "STOP";
}
- if( cls.download.file ) {
+ if (cls.download.file) {
// if here, we tried to resume a file but the server said no
- FS_FCloseFile( cls.download.file );
+ FS_FCloseFile(cls.download.file);
}
goto another;
}
// open the file if not opened yet
- if( !cls.download.file ) {
- ret = FS_FOpenFile( cls.download.temp, &cls.download.file, FS_MODE_WRITE );
- if( !cls.download.file ) {
- Com_EPrintf( "[UDP] Couldn't open %s for writing: %s\n",
- cls.download.temp, Q_ErrorString( ret ) );
+ if (!cls.download.file) {
+ ret = FS_FOpenFile(cls.download.temp, &cls.download.file, FS_MODE_WRITE);
+ if (!cls.download.file) {
+ Com_EPrintf("[UDP] Couldn't open %s for writing: %s\n",
+ cls.download.temp, Q_ErrorString(ret));
goto another;
}
}
- ret = FS_Write( data, size, cls.download.file );
- if( ret != size ) {
- Com_EPrintf( "[UDP] Couldn't write %s: %s\n",
- cls.download.temp, Q_ErrorString( ret ) );
- FS_FCloseFile( cls.download.file );
+ ret = FS_Write(data, size, cls.download.file);
+ if (ret != size) {
+ Com_EPrintf("[UDP] Couldn't write %s: %s\n",
+ cls.download.temp, Q_ErrorString(ret));
+ FS_FCloseFile(cls.download.file);
goto another;
}
- if( percent != 100 ) {
+ if (percent != 100) {
// request next block
// change display routines by zoid
cls.download.percent = percent;
- CL_ClientCommand( "nextdl" );
+ CL_ClientCommand("nextdl");
} else {
- FS_FCloseFile( cls.download.file );
+ FS_FCloseFile(cls.download.file);
// rename the temp file to it's final name
- ret = FS_RenameFile( cls.download.temp, q->path );
- if( ret ) {
- Com_EPrintf( "[UDP] Couldn't rename %s to %s: %s\n",
- cls.download.temp, q->path, Q_ErrorString( ret ) );
+ ret = FS_RenameFile(cls.download.temp, q->path);
+ if (ret) {
+ Com_EPrintf("[UDP] Couldn't rename %s to %s: %s\n",
+ cls.download.temp, q->path, Q_ErrorString(ret));
} else {
msg = "DONE";
}
another:
// finished with current path
- CL_FinishDownload( q );
+ CL_FinishDownload(q);
cls.download.current = NULL;
cls.download.percent = 0;
cls.download.file = 0;
cls.download.temp[0] = 0;
- if( msg ) {
- Com_Printf( "[UDP] %s [%s] [%d remaining file%s]\n",
- q->path, msg, cls.download.pending, cls.download.pending == 1 ? "" : "s" );
+ if (msg) {
+ Com_Printf("[UDP] %s [%s] [%d remaining file%s]\n",
+ q->path, msg, cls.download.pending, cls.download.pending == 1 ? "" : "s");
}
// get another file if needed
@@ -292,44 +298,45 @@ Only predefined set of filename extensions is allowed,
to prevent the server from uploading arbitrary files.
===============
*/
-qboolean CL_CheckDownloadExtension( const char *ext ) {
+qboolean CL_CheckDownloadExtension(const char *ext)
+{
static const char allowed[][4] = {
"pcx", "wal", "wav", "md2", "sp2", "tga", "png",
"jpg", "bsp", "ent", "txt", "dm2", "loc", "md3"
};
- static const int total = sizeof( allowed ) / sizeof( allowed[0] );
+ static const int total = sizeof(allowed) / sizeof(allowed[0]);
int i;
- for( i = 0; i < total; i++ )
- if( !Q_stricmp( ext, allowed[i] ) )
+ for (i = 0; i < total; i++)
+ if (!Q_stricmp(ext, allowed[i]))
return qtrue;
return qfalse;
}
// attempts to start a download from the server if file doesn't exist.
-static qerror_t check_file_len( const char *path, size_t len, dltype_t type ) {
+static qerror_t check_file_len(const char *path, size_t len, dltype_t type)
+{
char buffer[MAX_QPATH], *ext;
qerror_t ret;
// check for oversize path
- if( len >= MAX_QPATH )
+ if (len >= MAX_QPATH)
return Q_ERR_NAMETOOLONG;
// normalize path
- len = FS_NormalizePath( buffer, path );
+ len = FS_NormalizePath(buffer, path);
// check for empty path
- if( len == 0 )
+ if (len == 0)
return Q_ERR_NAMETOOSHORT;
// check path
- if( !Q_ispath( buffer[0] )
- || !Q_ispath( buffer[ len - 1 ] )
- || !FS_ValidatePath( buffer )
- || strstr( buffer, ".." )
- || !strchr( buffer, '/' ) )
- {
+ if (!Q_ispath(buffer[0])
+ || !Q_ispath(buffer[len - 1])
+ || !FS_ValidatePath(buffer)
+ || strstr(buffer, "..")
+ || !strchr(buffer, '/')) {
// some of these checks are too conservative or even redundant
// once we have normalized the path, however they have to stay for
// compatibility reasons with older servers (some would even ban us
@@ -338,32 +345,33 @@ static qerror_t check_file_len( const char *path, size_t len, dltype_t type ) {
}
// check extension
- ext = COM_FileExtension( buffer );
- if( *ext != '.' || !CL_CheckDownloadExtension( ext + 1 ) )
+ ext = COM_FileExtension(buffer);
+ if (*ext != '.' || !CL_CheckDownloadExtension(ext + 1))
return Q_ERR_INVALID_PATH;
- if( FS_FileExists( buffer ) )
+ if (FS_FileExists(buffer))
// it exists, no need to download
return Q_ERR_EXIST;
#if USE_CURL
- ret = HTTP_QueueDownload( buffer, type );
- if( ret != Q_ERR_NOSYS )
+ ret = HTTP_QueueDownload(buffer, type);
+ if (ret != Q_ERR_NOSYS)
return ret;
#endif
// queue and start legacy UDP download
- ret = CL_QueueDownload( buffer, type );
- if( ret == Q_ERR_SUCCESS )
+ ret = CL_QueueDownload(buffer, type);
+ if (ret == Q_ERR_SUCCESS)
CL_StartNextDownload();
return ret;
}
-#define check_file( path, type ) \
- check_file_len( path, strlen( path ), type )
+#define check_file(path, type) \
+ check_file_len(path, strlen(path), type)
-static void check_skins( const char *name ) {
+static void check_skins(const char *name)
+{
size_t i, num_skins, ofs_skins, end_skins;
byte *model;
size_t len;
@@ -372,78 +380,76 @@ static void check_skins( const char *name ) {
char *md2skin;
dsp2frame_t *sp2frame;
uint32_t ident;
- char fn[ MAX_QPATH ];
+ char fn[MAX_QPATH];
- len = FS_LoadFile( name, ( void ** )&model );
- if( !model ) {
+ len = FS_LoadFile(name, (void **)&model);
+ if (!model) {
// couldn't load it
return;
}
- if( len < sizeof( ident ) ) {
+ if (len < sizeof(ident)) {
// file too small
goto done;
}
// check ident
- ident = LittleLong( *( uint32_t * )model );
- switch( ident ) {
+ ident = LittleLong(*(uint32_t *)model);
+ switch (ident) {
case MD2_IDENT:
// alias model
- md2header = ( dmd2header_t * )model;
- if( len < sizeof( *md2header ) ||
- LittleLong( md2header->ident ) != MD2_IDENT ||
- LittleLong( md2header->version ) != MD2_VERSION )
- {
+ md2header = (dmd2header_t *)model;
+ if (len < sizeof(*md2header) ||
+ LittleLong(md2header->ident) != MD2_IDENT ||
+ LittleLong(md2header->version) != MD2_VERSION) {
// not an alias model
goto done;
}
- num_skins = LittleLong( md2header->num_skins );
- ofs_skins = LittleLong( md2header->ofs_skins );
+ num_skins = LittleLong(md2header->num_skins);
+ ofs_skins = LittleLong(md2header->ofs_skins);
end_skins = ofs_skins + num_skins * MD2_MAX_SKINNAME;
- if( num_skins > MD2_MAX_SKINS || end_skins < ofs_skins || end_skins > len ) {
+ if (num_skins > MD2_MAX_SKINS || end_skins < ofs_skins || end_skins > len) {
// bad alias model
goto done;
}
- md2skin = ( char * )model + ofs_skins;
- for( i = 0; i < num_skins; i++ ) {
- if( !Q_memccpy( fn, md2skin, 0, sizeof( fn ) ) ) {
+ md2skin = (char *)model + ofs_skins;
+ for (i = 0; i < num_skins; i++) {
+ if (!Q_memccpy(fn, md2skin, 0, sizeof(fn))) {
// bad alias model
goto done;
}
- check_file( fn, DL_OTHER );
+ check_file(fn, DL_OTHER);
md2skin += MD2_MAX_SKINNAME;
}
break;
case SP2_IDENT:
// sprite model
- sp2header = ( dsp2header_t * )model;
- if( len < sizeof( *sp2header ) ||
- LittleLong( sp2header->ident ) != SP2_IDENT ||
- LittleLong( sp2header->version ) != SP2_VERSION )
- {
+ sp2header = (dsp2header_t *)model;
+ if (len < sizeof(*sp2header) ||
+ LittleLong(sp2header->ident) != SP2_IDENT ||
+ LittleLong(sp2header->version) != SP2_VERSION) {
// not a sprite model
goto done;
}
- num_skins = LittleLong( sp2header->numframes );
- ofs_skins = sizeof( *sp2header );
- end_skins = ofs_skins + num_skins * sizeof( dsp2frame_t );
- if( num_skins > SP2_MAX_FRAMES || end_skins < ofs_skins || end_skins > len ) {
+ num_skins = LittleLong(sp2header->numframes);
+ ofs_skins = sizeof(*sp2header);
+ end_skins = ofs_skins + num_skins * sizeof(dsp2frame_t);
+ if (num_skins > SP2_MAX_FRAMES || end_skins < ofs_skins || end_skins > len) {
// bad sprite model
goto done;
}
- sp2frame = ( dsp2frame_t * )( model + ofs_skins );
- for( i = 0; i < num_skins; i++ ) {
- if( !Q_memccpy( fn, sp2frame->name, 0, sizeof( fn ) ) ) {
+ sp2frame = (dsp2frame_t *)(model + ofs_skins);
+ for (i = 0; i < num_skins; i++) {
+ if (!Q_memccpy(fn, sp2frame->name, 0, sizeof(fn))) {
// bad sprite model
goto done;
}
- check_file( fn, DL_OTHER );
+ check_file(fn, DL_OTHER);
sp2frame++;
}
break;
@@ -454,62 +460,64 @@ static void check_skins( const char *name ) {
}
done:
- FS_FreeFile( model );
+ FS_FreeFile(model);
}
-static void check_player( const char *name ) {
- char fn[ MAX_QPATH ], model[ MAX_QPATH ], skin[ MAX_QPATH ], *p;
+static void check_player(const char *name)
+{
+ char fn[MAX_QPATH], model[MAX_QPATH], skin[MAX_QPATH], *p;
size_t len;
int i, j;
- CL_ParsePlayerSkin( NULL, model, skin, name );
+ CL_ParsePlayerSkin(NULL, model, skin, name);
// model
- len = Q_concat( fn, sizeof( fn ), "players/", model, "/tris.md2", NULL );
- check_file_len( fn, len, DL_OTHER );
+ len = Q_concat(fn, sizeof(fn), "players/", model, "/tris.md2", NULL);
+ check_file_len(fn, len, DL_OTHER);
// weapon models
- for( i = 0; i < cl.numWeaponModels; i++ ) {
- len = Q_concat( fn, sizeof( fn ), "players/", model, "/", cl.weaponModels[i], NULL );
- check_file_len( fn, len, DL_OTHER );
+ for (i = 0; i < cl.numWeaponModels; i++) {
+ len = Q_concat(fn, sizeof(fn), "players/", model, "/", cl.weaponModels[i], NULL);
+ check_file_len(fn, len, DL_OTHER);
}
// default weapon skin
- len = Q_concat( fn, sizeof( fn ), "players/", model, "/weapon.pcx", NULL );
- check_file_len( fn, len, DL_OTHER );
+ len = Q_concat(fn, sizeof(fn), "players/", model, "/weapon.pcx", NULL);
+ check_file_len(fn, len, DL_OTHER);
// skin
- len = Q_concat( fn, sizeof( fn ), "players/", model, "/", skin, ".pcx", NULL );
- check_file_len( fn, len, DL_OTHER );
+ len = Q_concat(fn, sizeof(fn), "players/", model, "/", skin, ".pcx", NULL);
+ check_file_len(fn, len, DL_OTHER);
// skin_i
- len = Q_concat( fn, sizeof( fn ), "players/", model, "/", skin, "_i.pcx", NULL );
- check_file_len( fn, len, DL_OTHER );
+ len = Q_concat(fn, sizeof(fn), "players/", model, "/", skin, "_i.pcx", NULL);
+ check_file_len(fn, len, DL_OTHER);
// sexed sounds
- for( i = 0; i < precache_sexed_total; i++ ) {
- j = precache_sexed_sounds[ i ];
- p = cl.configstrings[ CS_SOUNDS + j ];
+ for (i = 0; i < precache_sexed_total; i++) {
+ j = precache_sexed_sounds[i];
+ p = cl.configstrings[CS_SOUNDS + j];
- if( *p == '*' ) {
- len = Q_concat( fn, sizeof( fn ), "players/", model, "/", p + 1, NULL );
- check_file_len( fn, len, DL_OTHER );
+ if (*p == '*') {
+ len = Q_concat(fn, sizeof(fn), "players/", model, "/", p + 1, NULL);
+ check_file_len(fn, len, DL_OTHER);
}
}
}
// for precaching dependencies
-static qboolean downloads_pending( dltype_t type ) {
+static qboolean downloads_pending(dltype_t type)
+{
dlqueue_t *q;
// DL_OTHER just checks for any download
- if( type == DL_OTHER ) {
+ if (type == DL_OTHER) {
return !!cls.download.pending;
}
// see if there are pending downloads of the given type
- FOR_EACH_DLQ( q ) {
- if( q->state != DL_DONE && q->type == type ) {
+ FOR_EACH_DLQ(q) {
+ if (q->state != DL_DONE && q->type == type) {
return qtrue;
}
}
@@ -524,16 +532,17 @@ CL_RequestNextDownload
Runs precache check and dispatches downloads.
=====================
*/
-void CL_RequestNextDownload( void ) {
- char fn[ MAX_QPATH ], *name;
+void CL_RequestNextDownload(void)
+{
+ char fn[MAX_QPATH], *name;
size_t len;
int i;
- if( cls.state != ca_connected && cls.state != ca_loading )
+ if (cls.state != ca_connected && cls.state != ca_loading)
return;
- if( allow_download->integer <= 0 || NET_IsLocalAddress( &cls.serverAddress ) ) {
- if( precache_check <= PRECACHE_MAP ) {
+ if (allow_download->integer <= 0 || NET_IsLocalAddress(&cls.serverAddress)) {
+ if (precache_check <= PRECACHE_MAP) {
CL_RegisterBspModels();
}
@@ -541,23 +550,23 @@ void CL_RequestNextDownload( void ) {
return;
}
- switch( precache_check ) {
+ switch (precache_check) {
case PRECACHE_MODELS:
// confirm map
- if( allow_download_maps->integer )
- check_file( cl.configstrings[ CS_MODELS + 1 ], DL_MAP );
+ if (allow_download_maps->integer)
+ check_file(cl.configstrings[CS_MODELS + 1], DL_MAP);
// checking for models
- if( allow_download_models->integer ) {
- for( i = 2; i < MAX_MODELS; i++ ) {
- name = cl.configstrings[ CS_MODELS + i ];
- if( !name[0] ) {
+ if (allow_download_models->integer) {
+ for (i = 2; i < MAX_MODELS; i++) {
+ name = cl.configstrings[CS_MODELS + i];
+ if (!name[0]) {
break;
}
- if( name[0] == '*' || name[0] == '#' ) {
+ if (name[0] == '*' || name[0] == '#') {
continue;
}
- check_file( name, DL_MODEL );
+ check_file(name, DL_MODEL);
}
}
@@ -565,89 +574,89 @@ void CL_RequestNextDownload( void ) {
// fall through
case PRECACHE_OTHER:
- if( allow_download_models->integer ) {
- if( downloads_pending( DL_MODEL ) ) {
+ if (allow_download_models->integer) {
+ if (downloads_pending(DL_MODEL)) {
// pending downloads (models), let's wait here before we can check skins.
- Com_DPrintf( "%s: waiting for models...\n", __func__ );
+ Com_DPrintf("%s: waiting for models...\n", __func__);
return;
}
- for( i = 2; i < MAX_MODELS; i++ ) {
- name = cl.configstrings[ CS_MODELS + i ];
- if( !name[0] ) {
+ for (i = 2; i < MAX_MODELS; i++) {
+ name = cl.configstrings[CS_MODELS + i];
+ if (!name[0]) {
break;
}
- if( name[0] == '*' || name[0] == '#' ) {
+ if (name[0] == '*' || name[0] == '#') {
continue;
}
- check_skins( name );
+ check_skins(name);
}
}
- if( allow_download_sounds->integer ) {
- for( i = 1; i < MAX_SOUNDS; i++ ) {
- name = cl.configstrings[ CS_SOUNDS + i ];
- if( !name[0] ) {
+ if (allow_download_sounds->integer) {
+ for (i = 1; i < MAX_SOUNDS; i++) {
+ name = cl.configstrings[CS_SOUNDS + i];
+ if (!name[0]) {
break;
}
- if( name[0] == '*' ) {
+ if (name[0] == '*') {
continue;
}
- if( name[0] == '#' ) {
- len = Q_strlcpy( fn, name + 1, sizeof( fn ) );
+ if (name[0] == '#') {
+ len = Q_strlcpy(fn, name + 1, sizeof(fn));
} else {
- len = Q_concat( fn, sizeof( fn ), "sound/", name, NULL );
+ len = Q_concat(fn, sizeof(fn), "sound/", name, NULL);
}
- check_file_len( fn, len, DL_OTHER );
+ check_file_len(fn, len, DL_OTHER);
}
}
- if( allow_download_pics->integer ) {
- for( i = 1; i < MAX_IMAGES; i++ ) {
- name = cl.configstrings[ CS_IMAGES + i ];
- if( !name[0] ) {
+ if (allow_download_pics->integer) {
+ for (i = 1; i < MAX_IMAGES; i++) {
+ name = cl.configstrings[CS_IMAGES + i];
+ if (!name[0]) {
break;
}
- if( name[0] == '/' || name[0] == '\\' ) {
- len = Q_strlcpy( fn, name + 1, sizeof( fn ) );
+ if (name[0] == '/' || name[0] == '\\') {
+ len = Q_strlcpy(fn, name + 1, sizeof(fn));
} else {
- len = Q_concat( fn, sizeof( fn ), "pics/", name, ".pcx", NULL );
+ len = Q_concat(fn, sizeof(fn), "pics/", name, ".pcx", NULL);
}
- check_file_len( fn, len, DL_OTHER );
+ check_file_len(fn, len, DL_OTHER);
}
}
- if( allow_download_players->integer ) {
+ if (allow_download_players->integer) {
// find sexed sounds
precache_sexed_total = 0;
- for( i = 1; i < MAX_SOUNDS; i++ ) {
- if( cl.configstrings[ CS_SOUNDS + i ][ 0 ] == '*' ) {
+ for (i = 1; i < MAX_SOUNDS; i++) {
+ if (cl.configstrings[CS_SOUNDS + i][0] == '*') {
precache_sexed_sounds[precache_sexed_total++] = i;
}
}
- for( i = 0; i < MAX_CLIENTS; i++ ) {
- name = cl.configstrings[ CS_PLAYERSKINS + i ];
- if( !name[0] ) {
+ for (i = 0; i < MAX_CLIENTS; i++) {
+ name = cl.configstrings[CS_PLAYERSKINS + i];
+ if (!name[0]) {
continue;
}
- check_player( name );
+ check_player(name);
}
}
- if( allow_download_textures->integer ) {
+ if (allow_download_textures->integer) {
static const char env_suf[6][3] = {
"rt", "bk", "lf", "ft", "up", "dn"
};
- for( i = 0; i < 12; i++ ) {
- if( i & 1 )
- len = Q_concat( fn, sizeof( fn ),
- "env/", cl.configstrings[ CS_SKY ], env_suf[ i >> 1 ], ".pcx", NULL );
+ for (i = 0; i < 12; i++) {
+ if (i & 1)
+ len = Q_concat(fn, sizeof(fn),
+ "env/", cl.configstrings[CS_SKY], env_suf[i >> 1], ".pcx", NULL);
else
- len = Q_concat( fn, sizeof( fn ),
- "env/", cl.configstrings[ CS_SKY ], env_suf[ i >> 1 ], ".tga", NULL );
- check_file_len( fn, len, DL_OTHER );
+ len = Q_concat(fn, sizeof(fn),
+ "env/", cl.configstrings[CS_SKY], env_suf[i >> 1], ".tga", NULL);
+ check_file_len(fn, len, DL_OTHER);
}
}
@@ -655,21 +664,19 @@ void CL_RequestNextDownload( void ) {
// fall through
case PRECACHE_MAP:
- if( downloads_pending( DL_MAP ) ) {
+ if (downloads_pending(DL_MAP)) {
// map might still be downloading?
- Com_DPrintf( "%s: waiting for map...\n", __func__ );
+ Com_DPrintf("%s: waiting for map...\n", __func__);
return;
}
// load the map file before checking textures
CL_RegisterBspModels();
- if( allow_download_textures->integer ) {
- for( i = 0; i < cl.bsp->numtexinfo; i++ ) {
- name = cl.bsp->texinfo[ i ].name;
-
- len = Q_concat( fn, sizeof( fn ), "textures/", name, ".wal", NULL );
- check_file_len( fn, len, DL_OTHER );
+ if (allow_download_textures->integer) {
+ for (i = 0; i < cl.bsp->numtexinfo; i++) {
+ len = Q_concat(fn, sizeof(fn), "textures/", cl.bsp->texinfo[i].name, ".wal", NULL);
+ check_file_len(fn, len, DL_OTHER);
}
}
@@ -677,9 +684,9 @@ void CL_RequestNextDownload( void ) {
// fall through
case PRECACHE_FINAL:
- if( downloads_pending( DL_OTHER ) ) {
+ if (downloads_pending(DL_OTHER)) {
// pending downloads (possibly textures), let's wait here.
- Com_DPrintf( "%s: waiting for others...\n", __func__ );
+ Com_DPrintf("%s: waiting for others...\n", __func__);
return;
}
@@ -688,11 +695,12 @@ void CL_RequestNextDownload( void ) {
break;
default:
- Com_Error( ERR_DROP, "%s: bad precache_check\n", __func__ );
+ Com_Error(ERR_DROP, "%s: bad precache_check\n", __func__);
}
}
-void CL_ResetPrecacheCheck( void ) {
+void CL_ResetPrecacheCheck(void)
+{
precache_check = PRECACHE_MODELS;
}
@@ -703,36 +711,38 @@ CL_Download_f
Request a download from the server
===============
*/
-static void CL_Download_f( void ) {
+static void CL_Download_f(void)
+{
char *path;
qerror_t ret;
- if( cls.state < ca_connected ) {
- Com_Printf( "Must be connected to a server.\n" );
+ if (cls.state < ca_connected) {
+ Com_Printf("Must be connected to a server.\n");
return;
}
- if( allow_download->integer == -1 ) {
- Com_Printf( "Downloads are permanently disabled.\n" );
+ if (allow_download->integer == -1) {
+ Com_Printf("Downloads are permanently disabled.\n");
return;
}
- if( Cmd_Argc() != 2 ) {
- Com_Printf( "Usage: download <filename>\n" );
+ if (Cmd_Argc() != 2) {
+ Com_Printf("Usage: download <filename>\n");
return;
}
- path = Cmd_Argv( 1 );
+ path = Cmd_Argv(1);
- ret = check_file( path, DL_OTHER );
- if( ret ) {
- Com_Printf( "Couldn't download %s: %s\n", path, Q_ErrorString( ret ) );
+ ret = check_file(path, DL_OTHER);
+ if (ret) {
+ Com_Printf("Couldn't download %s: %s\n", path, Q_ErrorString(ret));
}
}
-void CL_InitDownloads( void ) {
- Cmd_AddCommand( "download", CL_Download_f );
+void CL_InitDownloads(void)
+{
+ Cmd_AddCommand("download", CL_Download_f);
- List_Init( &cls.download.queue );
+ List_Init(&cls.download.queue);
}