This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to annotated tag 1.5a
in repository iortcw.

commit f69dd5fb9f0772d46a71e764c3be08d563550ed5
Author: MAN-AT-ARMS <m4n4t4...@gmail.com>
Date:   Fri Oct 14 19:42:04 2016 -0400

    All: Offer post-crash safe settings on a per-mod basis
---
 MP/code/qcommon/common.c  | 12 +---------
 MP/code/qcommon/files.c   | 54 +++++++++++++++++++++++++++-----------------
 MP/code/qcommon/qcommon.h |  5 ++++-
 MP/code/sys/sys_main.c    | 57 +++++++++++++++++++++++++++++++++++++++--------
 SP/code/qcommon/common.c  | 12 +---------
 SP/code/qcommon/files.c   | 54 +++++++++++++++++++++++++++-----------------
 SP/code/qcommon/qcommon.h |  5 ++++-
 SP/code/sys/sys_main.c    | 57 +++++++++++++++++++++++++++++++++++++++--------
 8 files changed, 174 insertions(+), 82 deletions(-)

diff --git a/MP/code/qcommon/common.c b/MP/code/qcommon/common.c
index 5a1c88b..cb6a8a4 100644
--- a/MP/code/qcommon/common.c
+++ b/MP/code/qcommon/common.c
@@ -2855,17 +2855,7 @@ void Com_Init( char *commandLine ) {
 
        Sys_Init();
 
-       if( Sys_WritePIDFile( ) ) {
-#ifndef DEDICATED
-               const char *message = "The last time " CLIENT_WINDOW_TITLE " 
ran, "
-                       "it didn't exit properly. This may be due to 
inappropriate video "
-                       "settings. Would you like to start with \"safe\" video 
settings?";
-
-               if( Sys_Dialog( DT_YES_NO, message, "Abnormal Exit" ) == DR_YES 
) {
-                       Cvar_Set( "com_abnormalExit", "1" );
-               }
-#endif
-       }
+       Sys_InitPIDFile( FS_GetCurrentGameDir() );
 
        // Pick a random port value
        Com_RandomBytes( (byte*)&qport, sizeof(int) );
diff --git a/MP/code/qcommon/files.c b/MP/code/qcommon/files.c
index 2ccbf32..174540b 100644
--- a/MP/code/qcommon/files.c
+++ b/MP/code/qcommon/files.c
@@ -2715,6 +2715,33 @@ static char** Sys_ConcatenateFileLists( char **list0, 
char **list1 )
 
 /*
 ================
+FS_GetModDescription
+================
+*/
+void FS_GetModDescription( const char *modDir, char *description, int 
descriptionLen ) {
+       fileHandle_t    descHandle;
+       char                    descPath[MAX_QPATH];
+       int                             nDescLen;
+       FILE                    *file;
+
+       Com_sprintf( descPath, sizeof ( descPath ), "%s/description.txt", 
modDir );
+       nDescLen = FS_SV_FOpenFileRead( descPath, &descHandle );
+
+       if ( nDescLen > 0 && descHandle ) {
+               file = FS_FileForHandle(descHandle);
+               Com_Memset( description, 0, descriptionLen );
+               nDescLen = fread(description, 1, descriptionLen, file);
+               if (nDescLen >= 0) {
+                       description[nDescLen] = '\0';
+               }
+               FS_FCloseFile(descHandle);
+       } else {
+               Q_strncpyz( description, modDir, descriptionLen );
+       }
+}
+
+/*
+================
 FS_GetModList
 
 Returns a list of mod directory names
@@ -2727,8 +2754,7 @@ int       FS_GetModList( char *listbuf, int bufsize ) {
        char **pFiles = NULL;
        char **pPaks = NULL;
        char *name, *path;
-       char descPath[MAX_OSPATH];
-       fileHandle_t descHandle;
+       char description[MAX_OSPATH];
 
        int dummy;
        char **pFiles0 = NULL;
@@ -2813,28 +2839,13 @@ int     FS_GetModList( char *listbuf, int bufsize ) {
                                nLen = strlen(name) + 1;
                                // nLen is the length of the mod path
                                // we need to see if there is a description 
available
-                               descPath[0] = '\0';
-                               strcpy(descPath, name);
-                               strcat(descPath, "/description.txt");
-                               nDescLen = FS_SV_FOpenFileRead( descPath, 
&descHandle );
-                               if ( nDescLen > 0 && descHandle) {
-                                       FILE *file;
-                                       file = FS_FileForHandle(descHandle);
-                                       Com_Memset( descPath, 0, sizeof( 
descPath ) );
-                                       nDescLen = fread(descPath, 1, 48, file);
-                                       if (nDescLen >= 0) {
-                                               descPath[nDescLen] = '\0';
-                                       }
-                                       FS_FCloseFile(descHandle);
-                               } else {
-                                       strcpy(descPath, name);
-                               }
-                               nDescLen = strlen(descPath) + 1;
+                               FS_GetModDescription( name, description, 
sizeof( description ) );
+                               nDescLen = strlen(description) + 1;
 
                                if (nTotal + nLen + 1 + nDescLen + 1 < bufsize) 
{
                                        strcpy(listbuf, name);
                                        listbuf += nLen;
-                                       strcpy(listbuf, descPath);
+                                       strcpy(listbuf, description);
                                        listbuf += nDescLen;
                                        nTotal += nLen + nDescLen;
                                        nMods++;
@@ -4267,6 +4278,9 @@ void FS_Restart( int checksumFeed ) {
        }
 
        if ( Q_stricmp( fs_gamedirvar->string, lastValidGame ) ) {
+               Sys_RemovePIDFile( lastValidGame );
+               Sys_InitPIDFile( fs_gamedirvar->string );
+
                // skip the wolfconfig.cfg if "safe" is on the command line
                if ( !Com_SafeMode() ) {
                        Cbuf_AddText("exec " Q3CONFIG_CFG "\n");
diff --git a/MP/code/qcommon/qcommon.h b/MP/code/qcommon/qcommon.h
index 4be7ba2..1f23d0f 100644
--- a/MP/code/qcommon/qcommon.h
+++ b/MP/code/qcommon/qcommon.h
@@ -703,6 +703,8 @@ int         FS_LoadStack( void );
 int     FS_GetFileList(  const char *path, const char *extension, char 
*listbuf, int bufsize );
 int     FS_GetModList(  char *listbuf, int bufsize );
 
+void   FS_GetModDescription( const char *modDir, char *description, int 
descriptionLen );
+
 fileHandle_t    FS_FOpenFileWrite( const char *qpath );
 fileHandle_t   FS_FOpenFileAppend( const char *filename );
 fileHandle_t   FS_FCreateOpenPipeFile( const char *filename );
@@ -1281,7 +1283,8 @@ typedef enum
 
 dialogResult_t Sys_Dialog( dialogType_t type, const char *message, const char 
*title );
 
-qboolean Sys_WritePIDFile( void );
+void Sys_RemovePIDFile( const char *gamedir );
+void Sys_InitPIDFile( const char *gamedir );
 
 /* This is based on the Adaptive Huffman algorithm described in Sayood's Data
  * Compression book.  The ranks are not actually stored, but implicitly defined
diff --git a/MP/code/sys/sys_main.c b/MP/code/sys/sys_main.c
index 43a1261..b4181da 100644
--- a/MP/code/sys/sys_main.c
+++ b/MP/code/sys/sys_main.c
@@ -167,26 +167,39 @@ char *Sys_GetClipboardData(void)
 Sys_PIDFileName
 =================
 */
-static char *Sys_PIDFileName( void )
+static char *Sys_PIDFileName( const char *gamedir )
 {
        const char *homePath = Cvar_VariableString( "fs_homepath" );
 
        if( *homePath != '\0' )
-               return va( "%s/%s", homePath, PID_FILENAME );
+               return va( "%s/%s/%s", homePath, gamedir, PID_FILENAME );
 
        return NULL;
 }
 
 /*
 =================
+Sys_RemovePIDFile
+=================
+*/
+void Sys_RemovePIDFile( const char *gamedir )
+{
+       char *pidFile = Sys_PIDFileName( gamedir );
+
+       if( pidFile != NULL )
+               remove( pidFile );
+}
+
+/*
+=================
 Sys_WritePIDFile
 
 Return qtrue if there is an existing stale PID file
 =================
 */
-qboolean Sys_WritePIDFile( void )
+static qboolean Sys_WritePIDFile( const char *gamedir )
 {
-       char      *pidFile = Sys_PIDFileName( );
+       char      *pidFile = Sys_PIDFileName( gamedir );
        FILE      *f;
        qboolean  stale = qfalse;
 
@@ -212,6 +225,10 @@ qboolean Sys_WritePIDFile( void )
                        stale = qtrue;
        }
 
+       if( FS_CreatePath( pidFile ) ) {
+               return 0;
+       }
+
        if( ( f = fopen( pidFile, "w" ) ) != NULL )
        {
                fprintf( f, "%d", Sys_PID( ) );
@@ -225,6 +242,31 @@ qboolean Sys_WritePIDFile( void )
 
 /*
 =================
+Sys_InitPIDFile
+=================
+*/
+void Sys_InitPIDFile( const char *gamedir ) {
+       if( Sys_WritePIDFile( gamedir ) ) {
+#ifndef DEDICATED
+               char message[1024];
+               char modName[MAX_OSPATH];
+
+               FS_GetModDescription( gamedir, modName, sizeof ( modName ) );
+               Q_CleanStr( modName );
+
+               Com_sprintf( message, sizeof (message), "The last time %s ran, "
+                       "it didn't exit properly. This may be due to 
inappropriate video "
+                       "settings. Would you like to start with \"safe\" video 
settings?", modName );
+
+               if( Sys_Dialog( DT_YES_NO, message, "Abnormal Exit" ) == DR_YES 
) {
+                       Cvar_Set( "com_abnormalExit", "1" );
+               }
+#endif
+       }
+}
+
+/*
+=================
 Sys_Exit
 
 Single exit point (regular exit or in case of error)
@@ -238,13 +280,10 @@ static __attribute__ ((noreturn)) void Sys_Exit( int 
exitCode )
        SDL_Quit( );
 #endif
 
-       if( exitCode < 2 )
+       if( exitCode < 2 && com_fullyInitialized )
        {
                // Normal exit
-               char *pidFile = Sys_PIDFileName( );
-
-               if( pidFile != NULL )
-                       remove( pidFile );
+               Sys_RemovePIDFile( FS_GetCurrentGameDir() );
        }
 
        NET_Shutdown( );
diff --git a/SP/code/qcommon/common.c b/SP/code/qcommon/common.c
index 966268a..94f0da3 100644
--- a/SP/code/qcommon/common.c
+++ b/SP/code/qcommon/common.c
@@ -2395,17 +2395,7 @@ void Com_Init( char *commandLine ) {
 
        Sys_Init();
 
-       if( Sys_WritePIDFile( ) ) {
-#ifndef DEDICATED
-               const char *message = "The last time " CLIENT_WINDOW_TITLE " 
ran, "
-                       "it didn't exit properly. This may be due to 
inappropriate video "
-                       "settings. Would you like to start with \"safe\" video 
settings?";
-
-               if( Sys_Dialog( DT_YES_NO, message, "Abnormal Exit" ) == DR_YES 
) {
-                       Cvar_Set( "com_abnormalExit", "1" );
-               }
-#endif
-       }
+       Sys_InitPIDFile( FS_GetCurrentGameDir() );
 
        // Pick a random port value
        Com_RandomBytes( (byte*)&qport, sizeof(int) );
diff --git a/SP/code/qcommon/files.c b/SP/code/qcommon/files.c
index eb70384..6cd6706 100644
--- a/SP/code/qcommon/files.c
+++ b/SP/code/qcommon/files.c
@@ -2750,6 +2750,33 @@ static char** Sys_ConcatenateFileLists( char **list0, 
char **list1 )
 
 /*
 ================
+FS_GetModDescription
+================
+*/
+void FS_GetModDescription( const char *modDir, char *description, int 
descriptionLen ) {
+       fileHandle_t    descHandle;
+       char                    descPath[MAX_QPATH];
+       int                             nDescLen;
+       FILE                    *file;
+
+       Com_sprintf( descPath, sizeof ( descPath ), "%s/description.txt", 
modDir );
+       nDescLen = FS_SV_FOpenFileRead( descPath, &descHandle );
+
+       if ( nDescLen > 0 && descHandle ) {
+               file = FS_FileForHandle(descHandle);
+               Com_Memset( description, 0, descriptionLen );
+               nDescLen = fread(description, 1, descriptionLen, file);
+               if (nDescLen >= 0) {
+                       description[nDescLen] = '\0';
+               }
+               FS_FCloseFile(descHandle);
+       } else {
+               Q_strncpyz( description, modDir, descriptionLen );
+       }
+}
+
+/*
+================
 FS_GetModList
 
 Returns a list of mod directory names
@@ -2762,8 +2789,7 @@ int       FS_GetModList( char *listbuf, int bufsize ) {
        char **pFiles = NULL;
        char **pPaks = NULL;
        char *name, *path;
-       char descPath[MAX_OSPATH];
-       fileHandle_t descHandle;
+       char description[MAX_OSPATH];
 
        int dummy;
        char **pFiles0 = NULL;
@@ -2847,28 +2873,13 @@ int     FS_GetModList( char *listbuf, int bufsize ) {
                                nLen = strlen(name) + 1;
                                // nLen is the length of the mod path
                                // we need to see if there is a description 
available
-                               descPath[0] = '\0';
-                               strcpy(descPath, name);
-                               strcat(descPath, "/description.txt");
-                               nDescLen = FS_SV_FOpenFileRead( descPath, 
&descHandle );
-                               if ( nDescLen > 0 && descHandle) {
-                                       FILE *file;
-                                       file = FS_FileForHandle(descHandle);
-                                       Com_Memset( descPath, 0, sizeof( 
descPath ) );
-                                       nDescLen = fread(descPath, 1, 48, file);
-                                       if (nDescLen >= 0) {
-                                               descPath[nDescLen] = '\0';
-                                       }
-                                       FS_FCloseFile(descHandle);
-                               } else {
-                                       strcpy(descPath, name);
-                               }
-                               nDescLen = strlen(descPath) + 1;
+                               FS_GetModDescription( name, description, 
sizeof( description ) );
+                               nDescLen = strlen(description) + 1;
 
                                if (nTotal + nLen + 1 + nDescLen + 1 < bufsize) 
{
                                        strcpy(listbuf, name);
                                        listbuf += nLen;
-                                       strcpy(listbuf, descPath);
+                                       strcpy(listbuf, description);
                                        listbuf += nDescLen;
                                        nTotal += nLen + nDescLen;
                                        nMods++;
@@ -4278,6 +4289,9 @@ void FS_Restart( int checksumFeed ) {
        }
 
        if ( Q_stricmp( fs_gamedirvar->string, lastValidGame ) ) {
+               Sys_RemovePIDFile( lastValidGame );
+               Sys_InitPIDFile( fs_gamedirvar->string );
+
                // skip the wolfconfig.cfg if "safe" is on the command line
                if ( !Com_SafeMode() ) {
                        Cbuf_AddText ("exec " Q3CONFIG_CFG "\n");
diff --git a/SP/code/qcommon/qcommon.h b/SP/code/qcommon/qcommon.h
index 707fcd6..f424036 100644
--- a/SP/code/qcommon/qcommon.h
+++ b/SP/code/qcommon/qcommon.h
@@ -675,6 +675,8 @@ int         FS_LoadStack( void );
 int     FS_GetFileList(  const char *path, const char *extension, char 
*listbuf, int bufsize );
 int     FS_GetModList(  char *listbuf, int bufsize );
 
+void   FS_GetModDescription( const char *modDir, char *description, int 
descriptionLen );
+
 fileHandle_t    FS_FOpenFileWrite( const char *qpath );
 fileHandle_t   FS_FOpenFileAppend( const char *filename );
 fileHandle_t   FS_FCreateOpenPipeFile( const char *filename );
@@ -1188,7 +1190,8 @@ typedef enum
 
 dialogResult_t Sys_Dialog( dialogType_t type, const char *message, const char 
*title );
 
-qboolean Sys_WritePIDFile( void );
+void Sys_RemovePIDFile( const char *gamedir );
+void Sys_InitPIDFile( const char *gamedir );
 
 void Sys_StartProcess( char *cmdline, qboolean doexit );            // NERVE - 
SMF
 // TTimo
diff --git a/SP/code/sys/sys_main.c b/SP/code/sys/sys_main.c
index d2c53cb..d24f402 100644
--- a/SP/code/sys/sys_main.c
+++ b/SP/code/sys/sys_main.c
@@ -167,26 +167,39 @@ char *Sys_GetClipboardData(void)
 Sys_PIDFileName
 =================
 */
-static char *Sys_PIDFileName( void )
+static char *Sys_PIDFileName( const char *gamedir )
 {
        const char *homePath = Cvar_VariableString( "fs_homepath" );
 
        if( *homePath != '\0' )
-               return va( "%s/%s", homePath, PID_FILENAME );
+               return va( "%s/%s/%s", homePath, gamedir, PID_FILENAME );
 
        return NULL;
 }
 
 /*
 =================
+Sys_RemovePIDFile
+=================
+*/
+void Sys_RemovePIDFile( const char *gamedir )
+{
+       char *pidFile = Sys_PIDFileName( gamedir );
+
+       if( pidFile != NULL )
+               remove( pidFile );
+}
+
+/*
+=================
 Sys_WritePIDFile
 
 Return qtrue if there is an existing stale PID file
 =================
 */
-qboolean Sys_WritePIDFile( void )
+static qboolean Sys_WritePIDFile( const char *gamedir )
 {
-       char      *pidFile = Sys_PIDFileName( );
+       char      *pidFile = Sys_PIDFileName( gamedir );
        FILE      *f;
        qboolean  stale = qfalse;
 
@@ -212,6 +225,10 @@ qboolean Sys_WritePIDFile( void )
                        stale = qtrue;
        }
 
+       if( FS_CreatePath( pidFile ) ) {
+               return 0;
+       }
+
        if( ( f = fopen( pidFile, "w" ) ) != NULL )
        {
                fprintf( f, "%d", Sys_PID( ) );
@@ -225,6 +242,31 @@ qboolean Sys_WritePIDFile( void )
 
 /*
 =================
+Sys_InitPIDFile
+=================
+*/
+void Sys_InitPIDFile( const char *gamedir ) {
+       if( Sys_WritePIDFile( gamedir ) ) {
+#ifndef DEDICATED
+               char message[1024];
+               char modName[MAX_OSPATH];
+
+               FS_GetModDescription( gamedir, modName, sizeof ( modName ) );
+               Q_CleanStr( modName );
+
+               Com_sprintf( message, sizeof (message), "The last time %s ran, "
+                       "it didn't exit properly. This may be due to 
inappropriate video "
+                       "settings. Would you like to start with \"safe\" video 
settings?", modName );
+
+               if( Sys_Dialog( DT_YES_NO, message, "Abnormal Exit" ) == DR_YES 
) {
+                       Cvar_Set( "com_abnormalExit", "1" );
+               }
+#endif
+       }
+}
+
+/*
+=================
 Sys_Exit
 
 Single exit point (regular exit or in case of error)
@@ -238,13 +280,10 @@ static __attribute__ ((noreturn)) void Sys_Exit( int 
exitCode )
        SDL_Quit( );
 #endif
 
-       if( exitCode < 2 )
+       if( exitCode < 2 && com_fullyInitialized )
        {
                // Normal exit
-               char *pidFile = Sys_PIDFileName( );
-
-               if( pidFile != NULL )
-                       remove( pidFile );
+               Sys_RemovePIDFile( FS_GetCurrentGameDir() );
        }
 
        NET_Shutdown( );

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-games/iortcw.git

_______________________________________________
Pkg-games-commits mailing list
Pkg-games-commits@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

Reply via email to