void Log_AutoLogging_SaveMatch(void) { int error, num; FILE *f; char *dir, *tempname, savedname[2 * MAX_OSPATH], *fullsavedname, *exts[] = {"log", NULL}; if (!temp_log_ready) return; temp_log_ready = false; dir = Log_LogDirectory(); tempname = va("%s/%s", MT_TempDirectory(), TEMP_LOG_NAME); fullsavedname = va("%s/%s", dir, auto_matchname); if ((num = Util_Extend_Filename(fullsavedname, exts)) == -1) { Com_Printf("Error: no available filenames\n"); return; } snprintf (savedname, sizeof(savedname), "%s_%03i.log", auto_matchname, num); fullsavedname = va("%s/%s", dir, savedname); if (!(f = fopen(tempname, "rb"))) return; fclose(f); if ((error = rename(tempname, fullsavedname))) { FS_CreatePath(fullsavedname); error = rename(tempname, fullsavedname); } if (!error) Com_Printf("Match console log saved to %s\n", savedname); }
void Log_AutoLogging_StartMatch(char *logname) { char extendedname[MAX_OSPATH * 2], *fullname; FILE *templog; void *buf; temp_log_ready = false; if (!match_auto_logconsole.value) return; if (Log_IsLogging()) { if (autologging) { autologging = false; Log_Stop(); } else { Com_Printf("Auto console logging skipped (already logging)\n"); return; } } strlcpy(auto_matchname, logname, sizeof(auto_matchname)); strlcpy (extendedname, TEMP_LOG_NAME, sizeof(extendedname)); COM_ForceExtensionEx (extendedname, ".log", sizeof (extendedname)); fullname = va("%s/%s", MT_TempDirectory(), extendedname); if (!(templog = fopen (fullname, log_readable.value ? "w" : "wb"))) { FS_CreatePath(fullname); if (!(templog = fopen (fullname, log_readable.value ? "w" : "wb"))) { Com_Printf("Error: Couldn't open %s\n", fullname); return; } } buf = Q_calloc(1, LOGFILEBUFFER); if (!buf) { Com_Printf("Not enough memory to allocate log buffer\n"); return; } memlogfile = FSMMAP_OpenVFS(buf, LOGFILEBUFFER); Com_Printf ("Auto console logging commenced\n"); logfile = templog; autologging = true; auto_starttime = cls.realtime; }
void Log_AutoLogging_SaveMatch(qbool allow_upload) { int error, num; FILE *f; char *dir, *tempname, savedname[2 * MAX_OSPATH], *fullsavedname, *exts[] = {"log", NULL}; if (!temp_log_ready) return; if (temp_log_upload_pending) { Com_Printf("Error: Can't save the log. Log upload is still pending.\n"); return; } temp_log_ready = false; dir = Log_LogDirectory(); tempname = va("%s/%s", MT_TempDirectory(), TEMP_LOG_NAME); fullsavedname = va("%s/%s", dir, auto_matchname); if ((num = Util_Extend_Filename(fullsavedname, exts)) == -1) { Com_Printf("Error: no available filenames\n"); return; } snprintf (savedname, sizeof(savedname), "%s_%03i.log", auto_matchname, num); fullsavedname = va("%s/%s", dir, savedname); if (!(f = fopen(tempname, "rb"))) return; fclose(f); if ((error = rename(tempname, fullsavedname))) { FS_CreatePath(fullsavedname); error = rename(tempname, fullsavedname); } if (!error) { Com_Printf("Match console log saved to %s\n", savedname); if (allow_upload && Log_IsUploadAllowed()) { // note: we allow the client to be a spectator, so that spectators // can submit logs for matches they spec in case players don't do it Log_AutoLogging_Upload(fullsavedname); } } }
static void Log_UploadTemp(void) { char *tempname = va("%s/%s", MT_TempDirectory(), TEMP_LOG_NAME); temp_log_upload_pending = true; Log_AutoLogging_Upload(tempname); }