return -1;
}
if(!strcmp(vec[0], "alsa")) {
-#if API_ALSA
+#if HAVE_ALSA_ASOUNDLIB_H
*valuep = BACKEND_ALSA;
#else
error(0, "%s:%d: ALSA is not available on this platform",
} \
} while(0)
+static int validate_isabspath(const struct config_state *cs,
+ int nvec, char **vec) {
+ int n;
+
+ for(n = 0; n < nvec; ++n)
+ if(vec[n][0] != '/') {
+ error(errno, "%s:%d: %s: not an absolute path",
+ cs->path, cs->line, vec[n]);
+ return -1;
+ }
+ return 0;
+}
+
static int validate_isdir(const struct config_state *cs,
int nvec, char **vec) {
VALIDATE_FILE(S_ISDIR, "directory");
{ C(device), &type_string, validate_any },
{ C(gap), &type_integer, validate_non_negative },
{ C(history), &type_integer, validate_positive },
- { C(home), &type_string, validate_isdir },
+ { C(home), &type_string, validate_isabspath },
{ C(listen), &type_stringlist, validate_port },
{ C(lock), &type_boolean, validate_any },
{ C(mixer), &type_string, validate_ischr },
else if(c->broadcast.n)
c->speaker_backend = BACKEND_NETWORK;
else {
-#if API_ALSA
+#if HAVE_ALSA_ASOUNDLIB_H
c->speaker_backend = BACKEND_ALSA;
+#elif HAVE_SYS_SOUNDCARD_H
+ c->speaker_backend = BACKEND_OSS;
#elif HAVE_COREAUDIO_AUDIOHARDWARE_H
c->speaker_backend = BACKEND_COREAUDIO;
#else
char *config_userconf(const char *home, const struct passwd *pw) {
char *s;
+ if(!home && !pw && !(pw = getpwuid(getuid())))
+ fatal(0, "cannot determine our username");
byte_xasprintf(&s, "%s/.disorder/passwd", home ? home : pw->pw_dir);
return s;
}