diff options
-rw-r--r-- | deadbeef.h | 1 | ||||
-rw-r--r-- | main.c | 30 | ||||
-rw-r--r-- | plugins.c | 7 | ||||
-rw-r--r-- | plugins.h | 3 | ||||
-rw-r--r-- | plugins/lastfm/lastfm.c | 2 |
5 files changed, 38 insertions, 5 deletions
@@ -122,6 +122,7 @@ typedef struct { void (*playback_set_pos) (float pos); // [0..100] int (*playback_get_samplerate) (void); // output samplerate // process control + const char *(*get_config_dir) (void); void (*quit) (void); // threading int (*thread_start) (void (*fn)(uintptr_t ctx), uintptr_t ctx); @@ -502,11 +502,33 @@ main (int argc, char *argv[]) { fprintf (stderr, "unable to find home directory. stopping.\n"); return -1; } - snprintf (defpl, 1024, "%s/.config/deadbeef/default.dbpl", homedir); - snprintf (sessfile, 1024, "%s/.config/deadbeef/session", homedir); - snprintf (confdir, 1024, "%s/.config", homedir); + + char *xdg_conf_dir = getenv ("XDG_CONFIG_HOME"); + if (xdg_conf_dir) { + if (snprintf (confdir, sizeof (confdir), "%s", xdg_conf_dir) > sizeof (confdir)) { + fprintf (stderr, "fatal: XDG_CONFIG_HOME value is too long: %s\n", xdg_conf_dir); + return -1; + } + } + else { + if (snprintf (confdir, sizeof (confdir), "%s/.config", homedir) > sizeof (confdir)) { + fprintf (stderr, "fatal: HOME value is too long: %s\n", homedir); + return -1; + } + } + if (snprintf (defpl, sizeof (defpl), "%s/deadbeef/default.dbpl", confdir) > sizeof (defpl)) { + fprintf (stderr, "fatal: out of memory while configuring\n"); + return -1; + } + if (snprintf (sessfile, sizeof (sessfile), "%s/deadbeef/session", confdir) > sizeof (sessfile)) { + fprintf (stderr, "fatal: out of memory while configuring\n"); + return -1; + } mkdir (confdir, 0755); - snprintf (dbconfdir, 1024, "%s/.config/deadbeef", homedir); + if (snprintf (dbconfdir, sizeof (dbconfdir), "%s/deadbeef", confdir) > sizeof (dbconfdir)) { + fprintf (stderr, "fatal: out of memory while configuring\n"); + return -1; + } mkdir (dbconfdir, 0755); char cmdline[2048]; @@ -36,6 +36,7 @@ #include "volume.h" #include "streamer.h" #include "playback.h" +#include "common.h" // deadbeef api DB_functions_t deadbeef_api = { @@ -55,6 +56,7 @@ DB_functions_t deadbeef_api = { .playback_get_pos = plug_playback_get_pos, .playback_set_pos = plug_playback_set_pos, .playback_get_samplerate = p_get_rate, + .get_config_dir = plug_get_config_dir, .quit = plug_quit, // threading .thread_start = thread_start, @@ -86,6 +88,11 @@ DB_functions_t deadbeef_api = { .volume_get_amp = volume_get_amp, }; +const char * +plug_get_config_dir (void) { + return dbconfdir; +} + void volumebar_notify_changed (void); @@ -77,4 +77,7 @@ plug_volume_set_db (float db); void plug_volume_set_amp (float amp); +const char * +plug_get_config_dir (void); + #endif // __PLUGINS_H diff --git a/plugins/lastfm/lastfm.c b/plugins/lastfm/lastfm.c index d637b61b..f6fbf7e2 100644 --- a/plugins/lastfm/lastfm.c +++ b/plugins/lastfm/lastfm.c @@ -659,7 +659,7 @@ lastfm_start (void) { #endif // }}} - snprintf (config, 1024, "%s/.config/deadbeef/lastfm", getenv ("HOME")); + snprintf (config, 1024, "%s/lastfm", deadbeef->get_config_dir ()); FILE *fp = fopen (config, "rt"); if (!fp) { fprintf (stderr, "lastfm: failed open %s\n", config); |