fix capturethrottle paths

log_dir prefixed with ./ will work as relative to quake's basedir (files will get .log postfix).

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5149 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2017-09-21 00:52:52 +00:00
parent 0c8ad17f7c
commit 2de7be6f11
3 changed files with 39 additions and 29 deletions

View File

@ -2989,7 +2989,7 @@ static void QDECL capture_raw_video (void *vctx, int frame, void *data, int stri
char base[MAX_QPATH];
Q_strncpyz(base, ctx->videonameprefix, sizeof(base));
*COM_SkipPath(base) = 0;
if (FS_NativePath(base, FS_GAMEONLY, filename, sizeof(filename)))
if (FS_NativePath(base, ctx->fsroot, filename, sizeof(filename)))
{
#ifdef HAVE_STATVFS
//posix 2001

View File

@ -15,7 +15,7 @@ cvar_t log_enable[LOG_TYPES] = { CVARF("log_enable", "0", CVAR_NOTFROMSERVER),
cvar_t log_name[LOG_TYPES] = { CVARFC("log_name", "", CVAR_NOTFROMSERVER, Log_Name_Callback),
CVARFC("log_name_players", "players", CVAR_NOTFROMSERVER, Log_Name_Callback),
CVARFC("log_name_rcon", "rcon", CVAR_NOTFROMSERVER, Log_Name_Callback)};
cvar_t log_dir = CVARFC("log_dir", "", CVAR_NOTFROMSERVER, Log_Dir_Callback);
cvar_t log_dir_var = CVARFC("log_dir", "", CVAR_NOTFROMSERVER, Log_Dir_Callback);
cvar_t log_readable = CVARFD("log_readable", "7", CVAR_NOTFROMSERVER, "Bitfield describing what to convert/strip. If 0, exact byte representation will be used.\n&1: Dequakify text.\n&2: Strip special markup.\n&4: Strip ansi control codes.");
cvar_t log_developer = CVARFD("log_developer", "0", CVAR_NOTFROMSERVER, "Enables logging of console prints when set to 1. Otherwise unimportant messages will not fill up your log files.");
cvar_t log_rotate_files = CVARF("log_rotate_files", "0", CVAR_NOTFROMSERVER);
@ -28,8 +28,9 @@ cvar_t log_dosformat = CVARF("log_dosformat", "0", CVAR_NOTFROMSERVER);
#endif
qboolean log_newline[LOG_TYPES];
// externals
extern char gamedirfile[];
static char log_dir[MAX_OSPATH];
static enum fs_relative log_root = FS_GAMEONLY;
// Log_Dir_Callback: called when a log_dir is changed
static void QDECL Log_Dir_Callback (struct cvar_s *var, char *oldvalue)
@ -44,6 +45,17 @@ static void QDECL Log_Dir_Callback (struct cvar_s *var, char *oldvalue)
// recursion is avoided by assuming the default value is sane
Cvar_ForceSet(var, var->defaultstr);
}
if (!strncmp(var->string, "./", 2)||!strncmp(var->string, ".\\", 2))
{
strcpy(log_dir, var->string+2);
log_root = FS_ROOT;
}
else
{
strcpy(log_dir, var->string);
log_root = FS_GAMEONLY;
}
}
// Log_Name_Callback: called when a log_name is changed
@ -64,7 +76,6 @@ static void QDECL Log_Name_Callback (struct cvar_s *var, char *oldvalue)
void Log_String (logtype_t lognum, const char *s)
{
vfsfile_t *fi;
char *d; // directory
char *f; // filename
char *t;
char utf8[2048];
@ -93,12 +104,6 @@ void Log_String (logtype_t lognum, const char *s)
if (!log_enable[lognum].value)
return;
// get directory/filename
if (log_dir.string[0])
d = log_dir.string;
else
d = "";//gamedirfile;
if (log_name[lognum].string[0])
f = log_name[lognum].string;
@ -145,8 +150,8 @@ void Log_String (logtype_t lognum, const char *s)
}
*t = 0;
if (*d)
Q_snprintfz(fbase, sizeof(fname)-4, "%s/%s", d, f);
if (*log_dir)
Q_snprintfz(fbase, sizeof(fname)-4, "%s/%s", log_dir, f);
else
Q_snprintfz(fbase, sizeof(fname)-4, "%s", f);
Q_snprintfz(fname, sizeof(fname), "%s.log", fbase);
@ -158,7 +163,7 @@ void Log_String (logtype_t lognum, const char *s)
vfsfile_t *fi;
// check file size, use x as temp
if ((fi = FS_OpenVFS(fname, "rb", FS_GAMEONLY)))
if ((fi = FS_OpenVFS(fname, "rb", log_root)))
{
x = VFS_GETLEN(fi);
VFS_CLOSE(fi);
@ -176,7 +181,7 @@ void Log_String (logtype_t lognum, const char *s)
// unlink file at the top of the chain
Q_snprintfz(oldf, sizeof(oldf), "%s.%i.log", fbase, i);
FS_Remove(oldf, FS_GAMEONLY);
FS_Remove(oldf, log_root);
// rename files through chain
for (x = i-1; x > 0; x--)
@ -185,12 +190,12 @@ void Log_String (logtype_t lognum, const char *s)
Q_snprintfz(oldf, sizeof(oldf), "%s.%i.log", fbase, x);
// check if file exists, otherwise skip
if ((fi = FS_OpenVFS(oldf, "rb", FS_GAMEONLY)))
if ((fi = FS_OpenVFS(oldf, "rb", log_root)))
VFS_CLOSE(fi);
else
continue; // skip nonexistant files
if (!FS_Rename(oldf, newf, FS_GAMEONLY))
if (!FS_Rename(oldf, newf, log_root))
{
// rename failed, disable log and bug out
Cvar_ForceSet(&log_enable[lognum], "0");
@ -201,7 +206,7 @@ void Log_String (logtype_t lognum, const char *s)
// TODO: option to compress file somewhere in here?
// rename our base file, which had better exist...
if (!FS_Rename(fname, oldf, FS_GAMEONLY))
if (!FS_Rename(fname, oldf, log_root))
{
// rename failed, disable log and bug out
Cvar_ForceSet(&log_enable[lognum], "0");
@ -211,8 +216,8 @@ void Log_String (logtype_t lognum, const char *s)
}
}
FS_CreatePath(fname, FS_GAMEONLY);
if ((fi = FS_OpenVFS(fname, "ab", FS_GAMEONLY)))
FS_CreatePath(fname, log_root);
if ((fi = FS_OpenVFS(fname, "ab", log_root)))
{
VFS_WRITE(fi, utf8, strlen(utf8));
VFS_CLOSE(fi);
@ -262,8 +267,6 @@ void SV_LogPlayer(client_t *cl, char *msg)
void Log_Logfile_f (void)
{
extern char gamedirfile[];
if (log_enable[LOG_CONSOLE].value)
{
Cvar_SetValue(&log_enable[LOG_CONSOLE], 0);
@ -271,17 +274,22 @@ void Log_Logfile_f (void)
}
else
{
char *d, *f;
d = gamedirfile;
if (log_dir.string[0])
d = log_dir.string;
char *f;
char syspath[MAX_OSPATH];
f = "qconsole";
if (log_name[LOG_CONSOLE].string[0])
f = log_name[LOG_CONSOLE].string;
Con_Printf("%s", va("Logging to %s/%s.log.\n", d, f));
if (*log_dir)
f = va("%s/%s.log", log_dir, f);
else
f = va("%s.log", f);
if (FS_NativePath(f, log_root, syspath, sizeof(syspath)))
Con_Printf("%s", va("Logging to %s\n", syspath));
else
Con_Printf("%s", va("Logging to %s\n", f));
Cvar_SetValue(&log_enable[LOG_CONSOLE], 1);
}
@ -803,7 +811,7 @@ void Log_Init(void)
Cvar_Register (&log_name[i], CONLOGGROUP);
log_newline[i] = true;
}
Cvar_Register (&log_dir, CONLOGGROUP);
Cvar_Register (&log_dir_var, CONLOGGROUP);
Cvar_Register (&log_readable, CONLOGGROUP);
Cvar_Register (&log_developer, CONLOGGROUP);
Cvar_Register (&log_rotate_size, CONLOGGROUP);

View File

@ -3682,6 +3682,7 @@ void JCL_ParseIQ(jclient_t *jcl, xmltree_t *tree)
JCL_RosterUpdate(jcl, c, from);
}
#ifdef USE_GOOGLE_MAIL_NOTIFY
//google-specific - new mail notifications.
c = XML_ChildOfTree(tree, "new-mail", 0);
if (c && !strcmp(c->xmlns, "google:mail:notify") && !strcmp(from, jcl->domain))
@ -3690,6 +3691,7 @@ void JCL_ParseIQ(jclient_t *jcl, xmltree_t *tree)
JCL_SendIQf(jcl, XMPP_NewGoogleMailsReply, "get", "", "<query xmlns='google:mail:notify'/>");
return;
}
#endif
#ifdef JINGLE
c = XML_ChildOfTreeNS(tree, "urn:xmpp:jingle:1", "jingle", 0);