diff --git a/engine/client/in_sdl.c b/engine/client/in_sdl.c index 4d0e4e47..32eeba37 100644 --- a/engine/client/in_sdl.c +++ b/engine/client/in_sdl.c @@ -1025,10 +1025,12 @@ void INS_Commands (void) //used to Cbuf_AddText joystick button events in window } void INS_EnumerateDevices(void *ctx, void(*callback)(void *ctx, const char *type, const char *devicename, unsigned int *qdevid)) { +#if SDL_MAJOR_VERSION >= 2 unsigned int i; for (i = 0; i < MAX_JOYSTICKS; i++) if (sdljoy[i].controller || sdljoy[i].joystick) callback(ctx, "joy", sdljoy[i].devname, &sdljoy[i].qdevid); +#endif } diff --git a/engine/client/sys_linux.c b/engine/client/sys_linux.c index b32c4910..f31f560f 100644 --- a/engine/client/sys_linux.c +++ b/engine/client/sys_linux.c @@ -20,7 +20,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. //well, linux or cygwin (windows with posix emulation layer), anyway... +#ifndef _GNU_SOURCE #define _GNU_SOURCE +#endif #include #include #include diff --git a/engine/client/sys_sdl.c b/engine/client/sys_sdl.c index b979b507..34b12616 100644 --- a/engine/client/sys_sdl.c +++ b/engine/client/sys_sdl.c @@ -722,4 +722,7 @@ int Sys_GetAutoUpdateSetting(void) void Sys_SetAutoUpdateSetting(int newval) { } +void Sys_SetUpdatedBinary(const char *fname) +{ +} #endif diff --git a/engine/common/fs.c b/engine/common/fs.c index bb129e3a..0ef56788 100644 --- a/engine/common/fs.c +++ b/engine/common/fs.c @@ -1437,6 +1437,11 @@ const char *FS_GetCleanPath(const char *pattern, char *outbuf, int outlen) s = pattern; seg = o = outbuf; + if (!pattern) + { + Con_Printf("Error: Empty filename\n"); + return NULL; + } for(;;) { if (o == end) @@ -1474,6 +1479,11 @@ const char *FS_GetCleanPath(const char *pattern, char *outbuf, int outlen) //it should just make more stuff invalid while (*seg == ' ') seg++; + if (!seg[0]) + { + Con_Printf("Error: No filename (%s)\n", pattern); + return NULL; + } if (seg[0] == '.') { if (o == seg+1) diff --git a/engine/common/pr_bgcmd.c b/engine/common/pr_bgcmd.c index 2b11ed81..c957cb82 100644 --- a/engine/common/pr_bgcmd.c +++ b/engine/common/pr_bgcmd.c @@ -2392,6 +2392,13 @@ int QDECL search_enumerate(const char *name, qofs_t fsize, time_t mtime, void *p { prvmsearch_t *s = parm; + size_t i; + for (i = 0; i < s->entries; i++) + { + if (!Q_strcasecmp(name, s->entry[i].name)) + return true; //already in the list, apparently. try to avoid dupes. + } + s->entry = BZ_Realloc(s->entry, ((s->entries+64)&~63) * sizeof(*s->entry)); s->entry[s->entries].name = BZ_Malloc(strlen(name)+1); strcpy(s->entry[s->entries].name, name); diff --git a/engine/gl/gl_model.c b/engine/gl/gl_model.c index d35912bf..69364ff6 100644 --- a/engine/gl/gl_model.c +++ b/engine/gl/gl_model.c @@ -1109,13 +1109,21 @@ void Mod_LoadModelWorker (void *ctx, void *data, size_t a, size_t b) } if (!buf) continue; - + if (filesize < 4) + { + BZ_Free(buf); + continue; + } + // // fill it in // Mod_DoCRC(mod, (char*)buf, filesize); - magic = LittleLong(*(unsigned *)buf); + if (filesize < 4) + magic = 0; + else + magic = LittleLong(*(unsigned *)buf); for(i = 0; i < sizeof(modelloaders) / sizeof(modelloaders[0]); i++) { if (modelloaders[i].load && modelloaders[i].magic == magic && !modelloaders[i].ident) @@ -1147,7 +1155,7 @@ void Mod_LoadModelWorker (void *ctx, void *data, size_t a, size_t b) } else { - Con_Printf(CON_WARNING "Unrecognised model format 0x%x (%c%c%c%c)\n", LittleLong(*(unsigned *)buf), ((char*)buf)[0], ((char*)buf)[1], ((char*)buf)[2], ((char*)buf)[3]); + Con_Printf(CON_WARNING "Unrecognised model format 0x%x (%c%c%c%c)\n", magic, ((char*)buf)[0], ((char*)buf)[1], ((char*)buf)[2], ((char*)buf)[3]); BZ_Free(buf); continue; } diff --git a/engine/qclib/qcc_pr_comp.c b/engine/qclib/qcc_pr_comp.c index b70d009c..bdc3d0e5 100644 --- a/engine/qclib/qcc_pr_comp.c +++ b/engine/qclib/qcc_pr_comp.c @@ -11686,7 +11686,10 @@ QCC_function_t *QCC_PR_GenerateQCFunction (QCC_def_t *def, QCC_type_t *type, pbo } } else if (dowrap) + { QCC_PR_ParseError(ERR_INTERNAL, "cannot wrap bodyless function %s", def->name); + return NULL; + } else func = &functions[numfunctions++]; func->filen = s_filen; @@ -11828,7 +11831,6 @@ QCC_function_t *QCC_PR_ParseImmediateStatements (QCC_def_t *def, QCC_type_t *typ { //if we're wrapping, then we moved the old function entry to the end and reused it for our function. //so we need to define some local that refers to the prior def. QCC_sref_t priorim = QCC_MakeIntConst(numfunctions-1); - prior; prior = QCC_PR_DummyDef(f->type, "prior", f, 0, priorim.sym, 0, true, GDF_CONST); //create a union into it prior->initialized = true; prior->filen = functions[numfunctions-1].filen; @@ -14095,7 +14097,7 @@ void QCC_PR_ParseDefs (char *classname) //if weak, only use the first non-weak version of the function if (autoprototype || dostrip || (def->initialized && doweak) || (!def->initialized && doweak && dowrap)) { //ignore the code and stuff - if ((dostrip || doweak && dowrap) && !def->initialized) + if ((dostrip || (doweak && dowrap)) && !def->initialized) def->initialized = 3; if (dostrip) def->referenced = true; diff --git a/engine/qclib/qcc_pr_lex.c b/engine/qclib/qcc_pr_lex.c index 91ddb4aa..680bd6f4 100644 --- a/engine/qclib/qcc_pr_lex.c +++ b/engine/qclib/qcc_pr_lex.c @@ -181,22 +181,6 @@ pbool QCC_PR_UnInclude(void) return true; } - -/* -============== -PR_PrintNextLine -============== -*/ -static void QCC_PR_PrintNextLine (void) -{ - char *t; - - printf ("%3i:",pr_source_line); - for (t=pr_line_start ; *t && *t != '\n' ; t++) - printf ("%c",*t); - printf ("\n"); -} - static void QCC_Canonicalize(char *fullname, size_t fullnamesize, char *newfile, char *base) { int doubledots; diff --git a/engine/server/pr_cmds.c b/engine/server/pr_cmds.c index 54ef12ee..d6f6cddd 100644 --- a/engine/server/pr_cmds.c +++ b/engine/server/pr_cmds.c @@ -10929,7 +10929,7 @@ void PR_DumpPlatform_f(void) #else //eg: pr_dumpplatform -FFTE -TCS -O csplat - const char *keywords[] = + /*const char *keywords[] = { "ignore" //0 "qwqc", //qw @@ -10947,7 +10947,7 @@ void PR_DumpPlatform_f(void) "mncsqwqc", //mn|cs|qw "mncsnqqc", //mn|cs|nq "" //mn|cs|nq|qw - }; + };*/ int idx; int i, j; diff --git a/engine/server/sv_sql.c b/engine/server/sv_sql.c index 2c86e9d3..76bb01b7 100644 --- a/engine/server/sv_sql.c +++ b/engine/server/sv_sql.c @@ -1035,7 +1035,11 @@ qboolean SQL_Available(void) #endif #ifdef USE_SQLITE //our sqlite implementation is sandboxed. we block database attachments, and restrict the master database name. +#ifdef _WIN32 sqlitehandle = Sys_LoadLibrary("sqlite3", sqlitefuncs); +#else + sqlitehandle = Sys_LoadLibrary("libsqlite3.so.0", sqlitefuncs); //at least on debian. +#endif if (sqlitehandle) { sqlavailable |= 1u< #include