shithub: choc

Download patch

ref: 93a2a60a3d4643b7f888b0544d27b28f90967edc
parent: f232822d7e10b69db2c1ae52a05c3d3aef5f8976
parent: 1c5973e4aff6b99e6c4587f3944126d265b56536
author: Jonathan Dowland <jon+github@alcopop.org>
date: Fri Jul 15 05:49:26 EDT 2016

Merge pull request #755 from chungy/sdl2-getprefpath

Use SDL_GetPrefPath for the configuration directory.

--- a/man/default.cfg.template
+++ b/man/default.cfg.template
@@ -11,7 +11,9 @@
 configuration file, \fBchocolate-doom.cfg\fR.
 .PP
 \fIdefault.cfg\fR is normally stored in the user's home directory,
-in \fI~/.chocolate-doom/default.cfg\fR.
+as \fI~/.local/share/chocolate-doom/default.cfg\fR.  The path can be
+overridden using the \fBXDG_DATA_HOME\fR environment variable (see the XDG
+Base Directory Specification).
 .PP
 The \fBchocolate-setup\fR(6) tool provides a simple to use front-end
 for editing \fIdefault.cfg\fR.
--- a/man/doom.template
+++ b/man/doom.template
@@ -18,10 +18,10 @@
 @include environ.man
 .SH FILES
 .TP
-\fB$HOME/.chocolate-doom/default.cfg\fR
+\fB$HOME/.local/share/chocolate-doom/default.cfg\fR
 The main configuration file for Chocolate Doom.  See \fBdefault.cfg\fR(5).
 .TP
-\fB$HOME/.chocolate-doom/chocolate-doom.cfg\fR
+\fB$HOME/.local/share/chocolate-doom/chocolate-doom.cfg\fR
 Extra configuration values that are specific to Chocolate Doom and not
 present in Vanilla Doom.  See \fBchocolate-doom.cfg\fR(5).
 .SH SEE ALSO
--- a/man/extra.cfg.template
+++ b/man/extra.cfg.template
@@ -12,7 +12,9 @@
 only.
 .PP
 \fIchocolate-doom.cfg\fR is normally stored in the user's home directory,
-as \fI~/.chocolate-doom/chocolate-doom.cfg\fR.
+as \fI~/.local/share/chocolate-doom/chocolate-doom.cfg\fR.  The path can be
+overridden using the \fBXDG_DATA_HOME\fR environment variable (see the XDG
+Base Directory Specification).
 .PP
 The \fBchocolate-setup\fR(6) tool provides a simple to use front-end
 for editing \fIchocolate-doom.cfg\fR.
--- a/man/heretic.template
+++ b/man/heretic.template
@@ -19,10 +19,10 @@
 @include environ.man
 .SH FILES
 .TP
-\fB$HOME/.chocolate-doom/heretic.cfg\fR
+\fB$HOME/.local/share/chocolate-doom/heretic.cfg\fR
 The main configuration file for Chocolate Heretic.  See \fBheretic.cfg\fR(5).
 .TP
-\fB$HOME/.chocolate-doom/chocolate-heretic.cfg\fR
+\fB$HOME/.local/share/chocolate-doom/chocolate-heretic.cfg\fR
 Extra configuration values that are specific to Chocolate Heretic and not
 present in Vanilla Heretic. See \fBchocolate-heretic.cfg\fR(5).
 .SH SEE ALSO
--- a/man/hexen.template
+++ b/man/hexen.template
@@ -19,10 +19,10 @@
 @include environ.man
 .SH FILES
 .TP
-\fB$HOME/.chocolate-doom/hexen.cfg\fR
+\fB$HOME/.local/share/chocolate-doom/hexen.cfg\fR
 The main configuration file for Chocolate Hexen.  See \fBhexen.cfg\fR(5).
 .TP
-\fB$HOME/.chocolate-doom/chocolate-hexen.cfg\fR
+\fB$HOME/.local/share/chocolate-doom/chocolate-hexen.cfg\fR
 Extra configuration values that are specific to Chocolate Hexen and not
 present in Vanilla Hexen.  See \fBchocolate-hexen.cfg\fR(5).
 .SH SEE ALSO
--- a/man/strife.template
+++ b/man/strife.template
@@ -22,10 +22,10 @@
 
 .SH FILES
 .TP
-\fB$HOME/.chocolate-doom/strife.cfg\fR
+\fB$HOME/.local/share/chocolate-doom/strife.cfg\fR
 The main configuration file for Chocolate Strife.  See \fBstrife.cfg\fR(5).
 .TP
-\fB$HOME/.chocolate-doom/chocolate-strife.cfg\fR
+\fB$HOME/.local/share/chocolate-doom/chocolate-strife.cfg\fR
 Extra configuration values that are specific to Chocolate Strife and not
 present in Vanilla Strife.  See \fBchocolate-strife.cfg\fR(5).
 .SH SEE ALSO
--- a/src/m_config.c
+++ b/src/m_config.c
@@ -25,6 +25,8 @@
 #include <errno.h>
 #include <assert.h>
 
+#include "SDL_filesystem.h"
+
 #include "config.h"
 
 #include "doomtype.h"
@@ -2101,30 +2103,17 @@
 {
 #if !defined(_WIN32) || defined(_WIN32_WCE)
 
-    // Configuration settings are stored in ~/.chocolate-doom/,
-    // except on Windows, where we behave like Vanilla Doom and
-    // save in the current directory.
+    // Configuration settings are stored in an OS-appropriate path
+    // determined by SDL.  On typical Unix systems, this might be
+    // ~/.local/share/chocolate-doom.  On Windows, we behave like
+    // Vanilla Doom and save in the current directory.
 
-    char *homedir;
     char *result;
 
-    homedir = getenv("HOME");
-
-    if (homedir != NULL)
-    {
-        // put all configuration in a config directory off the
-        // homedir
-
-        result = M_StringJoin(homedir, DIR_SEPARATOR_S,
-                              "." PACKAGE_TARNAME, DIR_SEPARATOR_S, NULL);
-
-        return result;
-    }
-    else
+    result = SDL_GetPrefPath("", PACKAGE_TARNAME);
+    return result;
 #endif /* #ifndef _WIN32 */
-    {
-        return M_StringDuplicate("");
-    }
+    return M_StringDuplicate("");
 }
 
 // 
@@ -2176,12 +2165,12 @@
     }
     else
     {
-        // ~/.chocolate-doom/savegames
+        // ~/.local/share/chocolate-doom/savegames
 
         topdir = M_StringJoin(configdir, "savegames", NULL);
         M_MakeDirectory(topdir);
 
-        // eg. ~/.chocolate-doom/savegames/doom2.wad/
+        // eg. ~/.local/share/chocolate-doom/savegames/doom2.wad/
 
         savegamedir = M_StringJoin(topdir, DIR_SEPARATOR_S, iwadname,
                                    DIR_SEPARATOR_S, NULL);