diff --git a/pd/src/s_file.c b/pd/src/s_file.c index a3c46cc10cce5d542c6e0865e5a5968509699470..f2b127c358fe166e6f0ecc72384d24e289dc51b7 100644 --- a/pd/src/s_file.c +++ b/pd/src/s_file.c @@ -139,10 +139,19 @@ static FILE *sys_prefsavefp; static void sys_initsavepreferences( void) { char filenamebuf[FILENAME_MAX], *homedir = getenv("HOME"); - FILE *fp; + struct stat statbuf; if (!homedir) return; + snprintf(filenamebuf, FILENAME_MAX, "%s/.pd-l2ork", homedir); + filenamebuf[FILENAME_MAX-1] = 0; + if (stat(filenamebuf, &statbuf) || !S_ISDIR(statbuf.st_mode)) { + // user config dir doesn't exist yet, try to create it + if (mkdir(filenamebuf, 0755)) { + pd_error(0, "%s: %s",filenamebuf, strerror(errno)); + return; + } + } snprintf(filenamebuf, FILENAME_MAX, "%s/.pd-l2ork/user.settings", homedir); filenamebuf[FILENAME_MAX-1] = 0; if ((sys_prefsavefp = fopen(filenamebuf, "w")) == NULL)