Fixed snd_config_update

This commit is contained in:
Abramo Bagnara 2000-08-26 08:09:41 +00:00
parent b5576ef229
commit 8eef219f5f

View file

@ -984,7 +984,7 @@ int snd_config_update()
int err; int err;
char *usr_asoundrc = NULL; char *usr_asoundrc = NULL;
char *home = getenv("HOME"); char *home = getenv("HOME");
struct stat st; struct stat usr_st, sys_st;
int reload; int reload;
FILE *fp; FILE *fp;
if (home) { if (home) {
@ -997,44 +997,50 @@ int snd_config_update()
usr_asoundrc[len + 1 + len1] = '\0'; usr_asoundrc[len + 1 + len1] = '\0';
} }
reload = (snd_config == NULL); reload = (snd_config == NULL);
if (!reload && if (stat(SYS_ASOUNDRC, &sys_st) == 0 &&
stat(usr_asoundrc, &st) == 0 && (sys_st.st_dev != sys_asoundrc_device ||
(st.st_dev != usr_asoundrc_device || sys_st.st_ino != sys_asoundrc_inode ||
st.st_ino != usr_asoundrc_inode || sys_st.st_mtime != sys_asoundrc_mtime))
st.st_mtime != usr_asoundrc_mtime))
reload = 1; reload = 1;
if (!reload && if (stat(usr_asoundrc, &usr_st) == 0 &&
stat(SYS_ASOUNDRC, &st) == 0 && (usr_st.st_dev != usr_asoundrc_device ||
(st.st_dev != sys_asoundrc_device || usr_st.st_ino != usr_asoundrc_inode ||
st.st_ino != sys_asoundrc_inode || usr_st.st_mtime != usr_asoundrc_mtime))
st.st_mtime != sys_asoundrc_mtime))
reload = 1; reload = 1;
if (!reload) if (!reload)
return 0; return 0;
if (snd_config == NULL) { if (snd_config) {
err = snd_config_top(&snd_config); err = snd_config_delete(snd_config);
if (err < 0) if (err < 0)
return err; return err;
snd_config = 0;
} }
err = snd_config_top(&snd_config);
if (err < 0)
return err;
fp = fopen(SYS_ASOUNDRC, "r"); fp = fopen(SYS_ASOUNDRC, "r");
if (fp) { if (fp) {
err = snd_config_load(snd_config, fp); err = snd_config_load(snd_config, fp);
fclose(fp);
if (err < 0) { if (err < 0) {
snd_config = NULL; snd_config = NULL;
fclose(fp);
return err; return err;
} }
fclose(fp); sys_asoundrc_device = sys_st.st_dev;
sys_asoundrc_inode = sys_st.st_ino;
sys_asoundrc_mtime = sys_st.st_mtime;
} }
fp = fopen(usr_asoundrc, "r"); fp = fopen(usr_asoundrc, "r");
if (fp) { if (fp) {
err = snd_config_load(snd_config, fp); err = snd_config_load(snd_config, fp);
fclose(fp);
if (err < 0) { if (err < 0) {
snd_config = NULL; snd_config = NULL;
fclose(fp);
return err; return err;
} }
fclose(fp); usr_asoundrc_device = usr_st.st_dev;
usr_asoundrc_inode = usr_st.st_ino;
usr_asoundrc_mtime = usr_st.st_mtime;
} }
return 0; return 0;
} }