for (sizepower = 0;(1 << sizepower) < size;sizepower++);
if (size != (1 << sizepower))
- Sys_Error("fractalnoise: size must be power of 2\n");
+ {
+ Con_Printf("fractalnoise: size must be power of 2\n");
+ return;
+ }
for (gridpower = 0;(1 << gridpower) < startgrid;gridpower++);
if (startgrid != (1 << gridpower))
- Sys_Error("fractalnoise: grid must be power of 2\n");
+ {
+ Con_Printf("fractalnoise: grid must be power of 2\n");
+ return;
+ }
startgrid = bound(0, startgrid, size);
{
l = strlen(com_token) + 1;
if (cmd_tokenizebufferpos + l > CMD_TOKENIZELENGTH)
- Sys_Error("Cmd_TokenizeString: ran out of %i character buffer space for command arguements\n", CMD_TOKENIZELENGTH);
+ {
+ Con_Printf("Cmd_TokenizeString: ran out of %i character buffer space for command arguements\n", CMD_TOKENIZELENGTH);
+ break;
+ }
strcpy (cmd_tokenizebuffer + cmd_tokenizebufferpos, com_token);
cmd_argv[cmd_argc] = cmd_tokenizebuffer + cmd_tokenizebufferpos;
cmd_tokenizebufferpos += l;
cmd_argc++;
}
}
-
}
int i;
if (!parm)
- Sys_Error ("Cmd_CheckParm: NULL");
+ {
+ Con_Printf ("Cmd_CheckParm: NULL");
+ return 0;
+ }
for (i = 1; i < Cmd_Argc (); i++)
if (!strcasecmp (parm, Cmd_Argv (i)))
for (sizepower = 0;(1 << sizepower) < size;sizepower++);
if (size != (1 << sizepower))
- Sys_Error("fractalnoise: size must be power of 2\n");
+ {
+ Con_Printf("fractalnoise: size must be power of 2\n");
+ return;
+ }
for (gridpower = 0;(1 << gridpower) < startgrid;gridpower++);
if (startgrid != (1 << gridpower))
- Sys_Error("fractalnoise: grid must be power of 2\n");
+ {
+ Con_Printf("fractalnoise: grid must be power of 2\n");
+ return;
+ }
startgrid = bound(0, startgrid, size);
for (sizepower = 0;(1 << sizepower) < size;sizepower++);
if (size != (1 << sizepower))
- Sys_Error("fractalnoise: size must be power of 2\n");
+ {
+ Con_Printf("fractalnoise: size must be power of 2\n");
+ return;
+ }
for (gridpower = 0;(1 << gridpower) < startgrid;gridpower++);
if (startgrid != (1 << gridpower))
- Sys_Error("fractalnoise: grid must be power of 2\n");
+ {
+ Con_Printf("fractalnoise: grid must be power of 2\n");
+ return;
+ }
startgrid = bound(0, startgrid, size);
return NULL;
if (! PK3_GetEndOfCentralDir (packfile, packhandle, &eocd))
- Sys_Error ("%s is not a PK3 file", packfile);
+ {
+ Con_Printf ("%s is not a PK3 file", packfile);
+ close(packhandle);
+ return NULL;
+ }
// Multi-volume ZIP archives are NOT allowed
if (eocd.disknum != 0 || eocd.cdir_disknum != 0)
- Sys_Error ("%s is a multi-volume ZIP archive", packfile);
+ {
+ Con_Printf ("%s is a multi-volume ZIP archive", packfile);
+ close(packhandle);
+ return NULL;
+ }
// We only need to do this test if MAX_FILES_IN_PACK is lesser than 65535
// since eocd.nbentries is an unsigned 16 bits integer
#if MAX_FILES_IN_PACK < 65535
if (eocd.nbentries > MAX_FILES_IN_PACK)
- Sys_Error ("%s contains too many files (%hu)", packfile, eocd.nbentries);
+ {
+ Con_Printf ("%s contains too many files (%hu)", packfile, eocd.nbentries);
+ close(packhandle);
+ return NULL;
+ }
#endif
// Create a package structure in memory
real_nb_files = PK3_BuildFileList (pack, &eocd);
if (real_nb_files < 0)
- Sys_Error ("%s is not a valid PK3 file", packfile);
+ {
+ Con_Printf ("%s is not a valid PK3 file", packfile);
+ close(pack->handle);
+ Mem_Free(pack);
+ return NULL;
+ }
Con_Printf("Added packfile %s (%i files)\n", packfile, real_nb_files);
return pack;
Find where the true file data offset is
====================
*/
-void PK3_GetTrueFileOffset (packfile_t *pfile, pack_t *pack)
+qboolean PK3_GetTrueFileOffset (packfile_t *pfile, pack_t *pack)
{
qbyte buffer [ZIP_LOCAL_CHUNK_BASE_SIZE];
size_t count;
// Already found?
if (pfile->flags & PACKFILE_FLAG_TRUEOFFS)
- return;
+ return true;
// Load the local file description
lseek (pack->handle, pfile->offset, SEEK_SET);
count = read (pack->handle, buffer, ZIP_LOCAL_CHUNK_BASE_SIZE);
if (count != ZIP_LOCAL_CHUNK_BASE_SIZE || BuffBigLong (buffer) != ZIP_DATA_HEADER)
- Sys_Error ("Can't retrieve file %s in package %s", pfile->name, pack->filename);
+ {
+ Con_Printf ("Can't retrieve file %s in package %s", pfile->name, pack->filename);
+ return false;
+ }
// Skip name and extra field
pfile->offset += BuffLittleShort (&buffer[26]) + BuffLittleShort (&buffer[28]) + ZIP_LOCAL_CHUNK_BASE_SIZE;
pfile->flags |= PACKFILE_FLAG_TRUEOFFS;
+ return true;
}
// If we found the file, there's a problem
if (!diff)
- Sys_Error ("Package %s contains the file %s several times\n",
- pack->filename, name);
+ Con_Printf ("Package %s contains the file %s several times\n", pack->filename, name);
// If we're too far in the list
if (diff > 0)
return NULL;
read (packhandle, (void *)&header, sizeof(header));
if (memcmp(header.id, "PACK", 4))
- Sys_Error ("%s is not a packfile", packfile);
+ {
+ Con_Printf ("%s is not a packfile", packfile);
+ close(packhandle);
+ return NULL;
+ }
header.dirofs = LittleLong (header.dirofs);
header.dirlen = LittleLong (header.dirlen);
if (header.dirlen % sizeof(dpackfile_t))
- Sys_Error ("%s has an invalid directory size", packfile);
+ {
+ Con_Printf ("%s has an invalid directory size", packfile);
+ close(packhandle);
+ return NULL;
+ }
numpackfiles = header.dirlen / sizeof(dpackfile_t);
if (numpackfiles > MAX_FILES_IN_PACK)
- Sys_Error ("%s has %i files", packfile, numpackfiles);
+ {
+ Con_Printf ("%s has %i files", packfile, numpackfiles);
+ close(packhandle);
+ return NULL;
+ }
pack = Mem_Alloc(fs_mempool, sizeof (pack_t));
pack->ignorecase = false; // PAK is case sensitive
{
search->pack = FS_LoadPackPAK (com_argv[i]);
if (!search->pack)
- Sys_Error ("Couldn't load packfile: %s", com_argv[i]);
+ {
+ Con_Printf ("Couldn't load packfile: %s", com_argv[i]);
+ Mem_Free(search);
+ continue;
+ }
}
else if (!strcasecmp (FS_FileExtension (com_argv[i]), "pk3"))
{
search->pack = FS_LoadPackPK3 (com_argv[i]);
if (!search->pack)
- Sys_Error ("Couldn't load packfile: %s", com_argv[i]);
+ {
+ Con_Printf ("Couldn't load packfile: %s", com_argv[i]);
+ Mem_Free(search);
+ continue;
+ }
}
else
strlcpy (search->filename, com_argv[i], sizeof (search->filename));
pfile = &pack->files[pack_ind];
+ fs_filesize = -1;
+
// If we don't have the true offset, get it now
if (! (pfile->flags & PACKFILE_FLAG_TRUEOFFS))
- PK3_GetTrueFileOffset (pfile, pack);
+ if (!PK3_GetTrueFileOffset (pfile, pack))
+ return NULL;
// No Zlib DLL = no compressed files
if (!zlib_dll && (pfile->flags & PACKFILE_FLAG_DEFLATED))
Con_Printf("WARNING: can't open the compressed file %s\n"
"You need the Zlib DLL to use compressed files\n",
pfile->name);
- fs_filesize = -1;
+ return NULL;
+ }
+
+ // LordHavoc: lseek affects all duplicates of a handle so we do it before
+ // the dup() call to avoid having to close the dup_handle on error here
+ if (lseek (pack->handle, pfile->offset, SEEK_SET) == -1)
+ {
+ Con_Printf ("FS_OpenPackedFile: can't lseek to %s in %s (offset: %d)",
+ pfile->name, pack->filename, pfile->offset);
return NULL;
}
dup_handle = dup (pack->handle);
if (dup_handle < 0)
- Sys_Error ("FS_OpenPackedFile: can't dup package's handle (pack: %s)", pack->filename);
+ {
+ Con_Printf ("FS_OpenPackedFile: can't dup package's handle (pack: %s)", pack->filename);
+ return NULL;
+ }
file = Mem_Alloc (fs_mempool, sizeof (*file));
memset (file, 0, sizeof (*file));
file->position = 0;
file->ungetc = EOF;
- if (lseek (file->handle, file->offset, SEEK_SET) == -1)
- Sys_Error ("FS_OpenPackedFile: can't lseek to %s in %s (offset: %d)",
- pfile->name, pack->filename, file->offset);
-
if (pfile->flags & PACKFILE_FLAG_DEFLATED)
{
ztoolkit_t *ztk;
* size of both compressed and uncompressed data
*/
if (qz_inflateInit2 (&ztk->zstream, -MAX_WBITS) != Z_OK)
- Sys_Error ("FS_OpenPackedFile: inflate init error (file: %s)", pfile->name);
+ {
+ Con_Printf ("FS_OpenPackedFile: inflate init error (file: %s)", pfile->name);
+ close(dup_handle);
+ Mem_Free(file);
+ return NULL;
+ }
ztk->zstream.next_out = file->buff;
ztk->zstream.avail_out = sizeof (file->buff);
count = sizeof (ztk->input);
lseek (file->handle, file->offset + ztk->in_position, SEEK_SET);
if (read (file->handle, ztk->input, count) != (ssize_t)count)
- Sys_Error ("FS_Read: unexpected end of file");
+ {
+ Con_Printf ("FS_Read: unexpected end of file");
+ break;
+ }
ztk->in_ind = 0;
ztk->in_len = count;
ztk->zstream.avail_out = sizeof (file->buff);
error = qz_inflate (&ztk->zstream, Z_SYNC_FLUSH);
if (error != Z_OK && error != Z_STREAM_END)
- Sys_Error ("Can't inflate file");
+ {
+ Con_Printf ("FS_Read: Can't inflate file");
+ break;
+ }
ztk->in_ind = ztk->in_len - ztk->zstream.avail_in;
file->buff_len = sizeof (file->buff) - ztk->zstream.avail_out;
ztk->zstream.avail_out = buffersize;
error = qz_inflate (&ztk->zstream, Z_SYNC_FLUSH);
if (error != Z_OK && error != Z_STREAM_END)
- Sys_Error ("Can't inflate file");
+ {
+ Con_Printf ("FS_Read: Can't inflate file");
+ break;
+ }
ztk->in_ind = ztk->in_len - ztk->zstream.avail_in;
// How much data did it inflate?
return pic;
if (numcachepics == MAX_CACHED_PICS)
- Sys_Error ("numcachepics == MAX_CACHED_PICS");
+ {
+ Con_Printf ("Draw_CachePic: numcachepics == MAX_CACHED_PICS");
+ // FIXME: support NULL in callers?
+ return cachepics; // return the first one
+ }
pic = cachepics + (numcachepics++);
strlcpy (pic->name, path, sizeof(pic->name));
// link into list
if (pic == NULL)
{
if (numcachepics == MAX_CACHED_PICS)
- Sys_Error ("numcachepics == MAX_CACHED_PICS");
+ {
+ Con_Printf ("Draw_NewPic: numcachepics == MAX_CACHED_PICS");
+ // FIXME: support NULL in callers?
+ return cachepics; // return the first one
+ }
pic = cachepics + (numcachepics++);
strcpy (pic->name, picname);
// link into list
while (pool->gltchain)
R_FreeTexture((rtexture_t *)pool->gltchain);
if (pool->imagechain)
- Sys_Error("R_FreeTexturePool: not all images freed\n");
+ Con_Printf("R_FreeTexturePool: not all images freed\n");
Mem_Free(pool);
}
image = Mem_Alloc(texturemempool, sizeof(gltextureimage_t));
if (image == NULL)
- Sys_Error("R_FindImageForTexture: ran out of memory\n");
+ {
+ Con_Printf ("R_FindImageForTexture: ran out of memory\n");
+ return;
+ }
image->type = GLIMAGETYPE_FRAGMENTS;
// make sure the created image is big enough for the fragment
for (image->width = block_size;image->width < glt->width;image->width <<= 1);
image = Mem_Alloc(texturemempool, sizeof(gltextureimage_t));
if (image == NULL)
- Sys_Error("R_FindImageForTexture: ran out of memory\n");
+ {
+ Con_Printf ("R_FindImageForTexture: ran out of memory\n");
+ return;
+ }
image->type = GLIMAGETYPE_TILE;
image->blockallocation = NULL;
return NULL;
if (flags & TEXF_FRAGMENT && texturetype != GLTEXTURETYPE_2D)
- Sys_Error("R_LoadTexture: only 2D fragment textures implemented\n");
+ {
+ Con_Printf ("R_LoadTexture: only 2D fragment textures implemented\n");
+ return NULL;
+ }
if (texturetype == GLTEXTURETYPE_CUBEMAP && !gl_texturecubemap)
- Sys_Error("R_LoadTexture: cubemap texture not supported by driver\n");
+ {
+ Con_Printf ("R_LoadTexture: cubemap texture not supported by driver\n");
+ return NULL;
+ }
if (texturetype == GLTEXTURETYPE_3D && !gl_texture3d)
- Sys_Error("R_LoadTexture: 3d texture not supported by driver\n");
+ {
+ Con_Printf ("R_LoadTexture: 3d texture not supported by driver\n");
+ return NULL;
+ }
texinfo = R_GetTexTypeInfo(textype, flags);
size = width * height * depth * sides * texinfo->inputbytesperpixel;
if (size < 1)
- Sys_Error("R_LoadTexture: bogus texture size (%dx%dx%dx%dbppx%dsides = %d bytes)\n", width, height, depth, texinfo->inputbytesperpixel * 8, sides);
+ {
+ Con_Printf ("R_LoadTexture: bogus texture size (%dx%dx%dx%dbppx%dsides = %d bytes)\n", width, height, depth, texinfo->inputbytesperpixel * 8, sides);
+ return NULL;
+ }
// clear the alpha flag if the texture has no transparent pixels
switch(textype)
{
glt->inputtexels = Mem_Alloc(texturemempool, size);
if (glt->inputtexels == NULL)
- Sys_Error("R_LoadTexture: out of memory\n");
- memcpy(glt->inputtexels, data, size);
+ Con_Printf ("R_LoadTexture: out of memory\n");
+ else
+ memcpy(glt->inputtexels, data, size);
}
else
glt->inputtexels = NULL;
if (i && i + 1 < com_argc && atoi (com_argv[i+1]) >= 1)
svs.maxclients = atoi (com_argv[i+1]);
if (COM_CheckParm ("-listen"))
- Sys_Error ("Only one of -dedicated or -listen can be specified");
+ Con_Printf ("Only one of -dedicated or -listen can be specified");
// default sv_public on for dedicated servers (often hosted by serious administrators), off for listen servers (often hosted by clueless users)
Cvar_SetValue("sv_public", 1);
}
void Image_Resample (const void *indata, int inwidth, int inheight, int indepth, void *outdata, int outwidth, int outheight, int outdepth, int bytesperpixel, int quality)
{
if (indepth != 1 || outdepth != 1)
- Sys_Error("Image_Resample: 3D resampling not supported\n");
+ {
+ Con_Printf ("Image_Resample: 3D resampling not supported\n");
+ return;
+ }
if (bytesperpixel == 4)
{
if (quality)
Image_Resample24Nolerp(indata, inwidth, inheight, outdata, outwidth, outheight);
}
else
- Sys_Error("Image_Resample: unsupported bytesperpixel %i\n", bytesperpixel);
+ Con_Printf ("Image_Resample: unsupported bytesperpixel %i\n", bytesperpixel);
}
// in can be the same as out
{
int x, y, nextrow;
if (*depth != 1 || destdepth != 1)
- Sys_Error("Image_Resample: 3D resampling not supported\n");
+ {
+ Con_Printf ("Image_Resample: 3D resampling not supported\n");
+ return;
+ }
nextrow = *width * bytesperpixel;
if (*width > destwidth)
{
}
}
else
- Sys_Error("Image_MipReduce: unsupported bytesperpixel %i\n", bytesperpixel);
+ Con_Printf ("Image_MipReduce: unsupported bytesperpixel %i\n", bytesperpixel);
}
else
{
}
}
else
- Sys_Error("Image_MipReduce: unsupported bytesperpixel %i\n", bytesperpixel);
+ Con_Printf ("Image_MipReduce: unsupported bytesperpixel %i\n", bytesperpixel);
}
}
else
}
}
else
- Sys_Error("Image_MipReduce: unsupported bytesperpixel %i\n", bytesperpixel);
+ Con_Printf ("Image_MipReduce: unsupported bytesperpixel %i\n", bytesperpixel);
}
else
- Sys_Error("Image_MipReduce: desired size already achieved\n");
+ Con_Printf ("Image_MipReduce: desired size already achieved\n");
}
}
if(UI_Callback_IsSlotUsed(key_dest - 3))
UI_Callback_KeyDown (key, ascii);
else
- Sys_Error ("Bad key_dest");
+ Con_Printf ("Key_Event: Bad key_dest");
}
return;
}
if(UI_Callback_IsSlotUsed(key_dest - 3))
UI_Callback_KeyDown (key, ascii);
else
- Sys_Error ("Bad key_dest");
+ Con_Printf ("Key_Event: Bad key_dest");
}
}
//#ifdef DEBUG
if (data->cursize == 0)
- Sys_Error("Datagram_SendMessage: zero length message\n");
+ {
+ Con_Printf ("Datagram_SendMessage: zero length message\n");
+ return -1;
+ }
if (data->cursize > (int)sizeof(conn->sendMessage))
- Sys_Error("Datagram_SendMessage: message too big (%u > %u)\n", data->cursize, sizeof(conn->sendMessage));
+ {
+ Con_Printf ("Datagram_SendMessage: message too big (%u > %u)\n", data->cursize, sizeof(conn->sendMessage));
+ return -1;
+ }
if (conn->canSend == false)
- Sys_Error("SendMessage: called with canSend == false\n");
+ {
+ Con_Printf ("SendMessage: called with canSend == false\n");
+ return -1;
+ }
//#endif
memcpy(conn->sendMessage, data->data, data->cursize);
//#ifdef DEBUG
if (data->cursize == 0)
- Sys_Error("Datagram_SendUnreliableMessage: zero length message\n");
+ {
+ Con_Printf ("Datagram_SendUnreliableMessage: zero length message\n");
+ return -1;
+ }
if (packetLen > (int)sizeof(sendbuffer))
- Sys_Error("Datagram_SendUnreliableMessage: message too big %u\n", data->cursize);
+ {
+ Con_Printf ("Datagram_SendUnreliableMessage: message too big %u\n", data->cursize);
+ return -1;
+ }
//#endif
header = (void *)sendbuffer;
if (rendermodule[i].name == NULL)
break;
if (!strcmp(name, rendermodule[i].name))
- Sys_Error("R_RegisterModule: module \"%s\" registered twice\n", name);
+ {
+ Con_Printf("R_RegisterModule: module \"%s\" registered twice\n", name);
+ return;
+ }
}
if (i >= MAXRENDERMODULES)
Sys_Error("R_RegisterModule: ran out of renderer module slots (%i)\n", MAXRENDERMODULES);
if (rendermodule[i].name == NULL)
continue;
if (rendermodule[i].active)
- Sys_Error("R_StartModules: module \"%s\" already active\n", rendermodule[i].name);
+ {
+ Con_Printf ("R_StartModules: module \"%s\" already active\n", rendermodule[i].name);
+ continue;
+ }
rendermodule[i].active = 1;
rendermodule[i].start();
}
break;
}
if (prev_sfx == NULL)
- Sys_Error ("S_FreeSfx: Can't find SFX %s in the list!\n", sfx->name);
+ {
+ Con_Printf ("S_FreeSfx: Can't find SFX %s in the list!\n", sfx->name);
+ return;
+ }
}
// Free it
// Check that we can handle one second of that sound
if (in_format->speed * in_format->channels > (1 << INTEGER_BITS))
- Sys_Error ("ResampleSfx: sound quality too high for resampling (%uHz, %u channel(s))",
+ {
+ Con_Printf ("ResampleSfx: sound quality too high for resampling (%uHz, %u channel(s))",
in_format->speed, in_format->channels);
+ return 0;
+ }
// We work 1 sec at a time to make sure we don't accumulate any
// significant error when adding "fracstep" over several seconds, and
if (s->fetcher != NULL)
{
if (s->format.speed != shm->format.speed)
- Sys_Error ("S_LoadSound: sound %s hasn't been resampled (%uHz instead of %uHz)", s->name);
+ Con_Printf ("S_LoadSound: sound %s hasn't been resampled (%uHz instead of %uHz)", s->name);
return true;
}
LARGE_INTEGER PerformanceCount;
if (!QueryPerformanceFrequency (&PerformanceFreq))
- Sys_Error ("No hardware timer available");
+ {
+ Con_Printf ("No hardware timer available");
+ // fall back to timeGetTime
+ Cvar_SetValueQuick(&sys_usetimegettime, true);
+ return Sys_DoubleTime();
+ }
QueryPerformanceCounter (&PerformanceCount);
#ifdef __BORLANDC__
LARGE_INTEGER PerformanceCount;
if (!QueryPerformanceFrequency (&PerformanceFreq))
- Sys_Error ("No hardware timer available");
+ {
+ Con_Printf ("No hardware timer available");
+ // fall back to timeGetTime
+ Cvar_SetValueQuick(&sys_usetimegettime, true);
+ return Sys_DoubleTime();
+ }
QueryPerformanceCounter (&PerformanceCount);
#ifdef __BORLANDC__
ctx = qglXCreateContext(vidx11_display, visinfo, NULL, True);
if (!ctx)
- Sys_Error ("glXCreateContext failed\n");
+ {
+ Con_Printf ("glXCreateContext failed\n");
+ return false;
+ }
if (!qglXMakeCurrent(vidx11_display, win, ctx))
- Sys_Error ("glXMakeCurrent failed\n");
+ {
+ Con_Printf ("glXMakeCurrent failed\n");
+ return false;
+ }
XSync(vidx11_display, False);
if ((qglGetString = GL_GetProcAddress("glGetString")) == NULL)
- Sys_Error("glGetString not found in %s", gl_driver);
+ {
+ Con_Printf ("glGetString not found in %s", gl_driver);
+ return false;
+ }
gl_renderer = qglGetString(GL_RENDERER);
gl_vendor = qglGetString(GL_VENDOR);
wc.lpszClassName = "DarkPlacesWindowClass";
if (!RegisterClass (&wc))
- Sys_Error("Couldn't register window class\n");
+ Con_Printf ("Couldn't register window class\n");
IN_Init();
}