diff options
author | Mike Lampard <mlampard@users.sourceforge.net> | 2004-10-24 21:30:14 +0000 |
---|---|---|
committer | Mike Lampard <mlampard@users.sourceforge.net> | 2004-10-24 21:30:14 +0000 |
commit | 3e28d4a627a3d3a6ea7ff5caf2a3140490ce4f39 (patch) | |
tree | 53132ac5578d9554a8aa06275df523526f3270d9 | |
parent | d007e2f23a9b01f0d5b2790492e33cbd2d1602d1 (diff) | |
download | xine-lib-3e28d4a627a3d3a6ea7ff5caf2a3140490ce4f39.tar.gz xine-lib-3e28d4a627a3d3a6ea7ff5caf2a3140490ce4f39.tar.bz2 |
bugfix from Maik Qualmann for playlist generation
CVS patchset: 7073
CVS date: 2004/10/24 21:30:14
-rw-r--r-- | src/input/input_dvb.c | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/src/input/input_dvb.c b/src/input/input_dvb.c index 494afa343..e2c3e6c0f 100644 --- a/src/input/input_dvb.c +++ b/src/input/input_dvb.c @@ -2099,14 +2099,13 @@ static char **dvb_class_get_autoplay_list(input_class_t * this_gen, int *num_files) { dvb_input_class_t *class = (dvb_input_class_t *) this_gen; - channel_t *channels; + channel_t *channels=NULL; FILE *f; char *tmpbuffer=malloc(BUFSIZE); char *foobuffer=malloc(BUFSIZE); char *str=tmpbuffer; int num_channels; int nlines=0; - int x=0; int default_channel; xine_cfg_entry_t lastchannel_enable; xine_cfg_entry_t lastchannel; @@ -2130,14 +2129,6 @@ static char **dvb_class_get_autoplay_list(input_class_t * this_gen, } fclose (f); - for(x=0;x<nlines;x++){ - if(class->autoplaylist[x]) - free(class->autoplaylist[x]); - class->autoplaylist[x]=malloc(128); - } - snprintf(tmpbuffer, BUFSIZE, "%s/.xine/channels.conf", - xine_get_homedir()); - if (xine_config_lookup_entry(class->xine, "input.dvb_last_channel_enable", &lastchannel_enable)) if (lastchannel_enable.num_value){ num_channels++; @@ -2145,17 +2136,25 @@ static char **dvb_class_get_autoplay_list(input_class_t * this_gen, default_channel = lastchannel.num_value; } + if (nlines+lastchannel_enable.num_value >= MAX_AUTOCHANNELS) + nlines = MAX_AUTOCHANNELS-lastchannel_enable.num_value; + + snprintf(tmpbuffer, BUFSIZE, "%s/.xine/channels.conf", xine_get_homedir()); + + f=fopen (tmpbuffer,"rb"); channels=malloc(sizeof(channel_t)*(nlines+lastchannel_enable.num_value)); - if(f>0) - while(num_channels < nlines+lastchannel_enable.num_value){ - fgets(str,BUFSIZE,f); + while (fgets(str,BUFSIZE,f) && num_channels < nlines+lastchannel_enable.num_value) { if (extract_channel_from_string (&(channels[num_channels]), str, 0) < 0) continue; sprintf(foobuffer,"dvb://%s",channels[num_channels].name); + if(class->autoplaylist[num_channels]) + free(class->autoplaylist[num_channels]); + class->autoplaylist[num_channels]=malloc(128); + class->autoplaylist[num_channels]=strdup(foobuffer); num_channels++; } @@ -2165,7 +2164,10 @@ static char **dvb_class_get_autoplay_list(input_class_t * this_gen, sprintf(foobuffer,"dvb://%s",channels[lastchannel.num_value].name); else /* set a reasonable default - the first channel */ sprintf(foobuffer,"dvb://%s",channels[lastchannel_enable.num_value].name); - class->autoplaylist[0]=strdup(foobuffer); + if(class->autoplaylist[0]) + free(class->autoplaylist[0]); + class->autoplaylist[0]=malloc(128); + class->autoplaylist[0]=strdup(foobuffer); } free(tmpbuffer); |