Fix memory leak in load_config with strdup and iniparser_freedict

Memory leaks every time settings are reloaded.
master
Quantum 6 years ago
parent 01049230a5
commit 273c469dba
  1. 32
      config.c

@ -471,10 +471,15 @@ p->highcf = iniparser_getint(ini, "general:higher_cutoff_freq", 10000);
p->FFTbufferSize = iniparser_getint(ini, "general:FFTbufferSize", 12);
// config: output
channels = (char *)iniparser_getstring(ini, "output:channels", "stereo");
p->mono_option = (char *)iniparser_getstring(ini, "output:mono_option", "average");
p->raw_target = (char *)iniparser_getstring(ini, "output:raw_target", "/dev/stdout");
p->data_format = (char *)iniparser_getstring(ini, "output:data_format", "binary");
free(channels);
free(p->mono_option);
free(p->raw_target);
free(p->data_format);
channels = strdup(iniparser_getstring(ini, "output:channels", "stereo"));
p->mono_option = strdup(iniparser_getstring(ini, "output:mono_option", "average"));
p->raw_target = strdup(iniparser_getstring(ini, "output:raw_target", "/dev/stdout"));
p->data_format = strdup(iniparser_getstring(ini, "output:data_format", "binary"));
p->bar_delim = (char)iniparser_getint(ini, "output:bar_delimiter", 59);
p->frame_delim = (char)iniparser_getint(ini, "output:frame_delimiter", 10);
p->ascii_range = iniparser_getint(ini, "output:ascii_max_range", 1000);
@ -501,40 +506,43 @@ if (p->smcount > 0) {
p->smcount = sizeof(smoothDef)/sizeof(smoothDef[0]); //back to the default one
}
free(p->audio_source);
// config: input
p->im = 0;
if (strcmp(inputMethod, "alsa") == 0) {
p->im = 1;
p->audio_source = (char *)iniparser_getstring(ini, "input:source", "hw:Loopback,1");
p->audio_source = strdup(iniparser_getstring(ini, "input:source", "hw:Loopback,1"));
}
if (strcmp(inputMethod, "fifo") == 0) {
p->im = 2;
p->audio_source = (char *)iniparser_getstring(ini, "input:source", "/tmp/mpd.fifo");
p->audio_source = strdup(iniparser_getstring(ini, "input:source", "/tmp/mpd.fifo"));
p->fifoSample = iniparser_getint(ini, "input:sample_rate", 44100);
}
if (strcmp(inputMethod, "pulse") == 0) {
p->im = 3;
p->audio_source = (char *)iniparser_getstring(ini, "input:source", "auto");
p->audio_source = strdup(iniparser_getstring(ini, "input:source", "auto"));
}
#ifdef SNDIO
if (strcmp(inputMethod, "sndio") == 0) {
p->im = 4;
p->audio_source = (char *)iniparser_getstring(ini, "input:source", SIO_DEVANY);
p->audio_source = strdup(iniparser_getstring(ini, "input:source", SIO_DEVANY));
}
#endif
#ifdef SHMEM
if (strcmp(inputMethod, "shmem") == 0) {
p->im = 5;
p->audio_source = (char *)iniparser_getstring(ini, "input:source", "/squeezelite-00:00:00:00:00:00");
p->audio_source = strdup(iniparser_getstring(ini, "input:source", "/squeezelite-00:00:00:00:00:00"));
}
#endif
#ifdef PORTAUDIO
if (strcmp(inputMethod, "portaudio") == 0) {
p->im = 6;
p->audio_source = (char *)iniparser_getstring(ini, "input:source", "auto");
p->audio_source = strdup(iniparser_getstring(ini, "input:source", "auto"));
}
#endif
return validate_config(supportedInput, params, error);
//iniparser_freedict(ini);
bool result = validate_config(supportedInput, params, error);
iniparser_freedict(ini);
return result;
}

Loading…
Cancel
Save