summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--deadbeef.h1
-rw-r--r--main.c30
-rw-r--r--plugins.c7
-rw-r--r--plugins.h3
-rw-r--r--plugins/lastfm/lastfm.c2
5 files changed, 38 insertions, 5 deletions
diff --git a/deadbeef.h b/deadbeef.h
index d8460cdc..fb974dc0 100644
--- a/deadbeef.h
+++ b/deadbeef.h
@@ -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);
diff --git a/main.c b/main.c
index d724dc13..217803f6 100644
--- a/main.c
+++ b/main.c
@@ -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];
diff --git a/plugins.c b/plugins.c
index bc5d3f42..dd7060e3 100644
--- a/plugins.c
+++ b/plugins.c
@@ -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);
diff --git a/plugins.h b/plugins.h
index 67238e4b..e7325ada 100644
--- a/plugins.h
+++ b/plugins.h
@@ -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);