Use NULL for an empty GList instead of g_list_alloc(); fix memory leaks; s/LCPM/LPCM/; use g_strdup_printf() instead ...

Original commit message from CVS:
Use NULL for an empty GList instead of g_list_alloc(); fix memory leaks; s/LCPM/LPCM/; use g_strdup_printf() instead of GString (easier to bulk free later)
This commit is contained in:
Tim-Philipp Müller 2005-01-17 14:46:23 +00:00
parent d8c64315ae
commit 50b7c32b3e
2 changed files with 29 additions and 20 deletions

View file

@ -1,3 +1,11 @@
2005-01-17 Tim-Philipp Müller <tim at centricular dot net>
* ext/dvdread/stream_labels.c:
(dvdreadsrc_get_audio_stream_labels):
Use NULL for an empty GList instead of g_list_alloc(); fix
memory leaks; s/LCPM/LPCM/; use g_strdup_printf() instead
of GString (easier to bulk free later)
2005-01-17 Gergely Nagy <algernon@bonehunter.rulez.org> 2005-01-17 Gergely Nagy <algernon@bonehunter.rulez.org>
Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net> Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>

View file

@ -164,69 +164,70 @@ void
dvdreadsrc_get_audio_stream_labels (ifo_handle_t * vts_file, dvdreadsrc_get_audio_stream_labels (ifo_handle_t * vts_file,
GHashTable * languagelist) GHashTable * languagelist)
{ {
GList *audio_stream_label = g_list_alloc (); GList *audio_stream_label = NULL;
if (vts_file->vts_pgcit) { if (vts_file->vts_pgcit) {
int i; int i;
/* 8 audio streams maximum */ /* 8 audio streams maximum */
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
GString *streamlabel; const gchar *format, *channel_nb, *language = NULL;
guchar *language, *format, *channel_nb;
guchar language_code[3] = "??"; guchar language_code[3] = "??";
gchar *streamlabel;
if (vts_file->vts_pgcit->pgci_srp[0].pgc->audio_control[i] & 0x8000) { if (vts_file->vts_pgcit->pgci_srp[0].pgc->audio_control[i] & 0x8000) {
audio_attr_t *audio = &vts_file->vtsi_mat->vts_audio_attr[i]; audio_attr_t *audio = &vts_file->vtsi_mat->vts_audio_attr[i];
guint16 language_id = 0;
if (audio->lang_type == 1) { if (audio->lang_type == 1) {
language_id = audio->lang_code; language_code[0] = (audio->lang_code >> 8);
snprintf (language_code, 3, "%c%c", (language_id >> 8), language_code[1] = (audio->lang_code & 0xFF);
(language_id & 0xFF)); language = g_hash_table_lookup (languagelist, language_code);
} }
language = g_hash_table_lookup (languagelist, language_code);
if (!language) { if (!language) {
language = g_strdup ("?"); language = "?";
} }
switch (audio->audio_format) { switch (audio->audio_format) {
case 0: case 0:
format = g_strdup (_("Dolby AC-3")); format = _("Dolby AC-3");
break; break;
case 2: case 2:
case 3: case 3:
format = g_strdup (_("MPEG layer I, II or III")); format = _("MPEG layer I, II or III");
break; break;
case 4: case 4:
format = g_strdup (_("LCPM")); format = _("LPCM");
break; break;
case 6: case 6:
format = g_strdup (_("Digital Theatre System")); format = _("Digital Theatre System");
break; break;
default: default:
format = g_strdup ("?"); format = "?";
} }
switch (audio->channels) { switch (audio->channels) {
case 1: case 1:
channel_nb = g_strdup (_("Stereo")); channel_nb = _("Stereo");
break; break;
case 5: case 5:
channel_nb = g_strdup (_("5.1")); channel_nb = _("5.1");
break; break;
default: default:
channel_nb = g_strdup ("?"); channel_nb = "?";
} }
streamlabel = g_string_new ("");
g_string_printf (streamlabel, "%u : %s, %s %s", i + 1, language, format, streamlabel = g_strdup_printf ("%u : %s, %s %s", i + 1, language,
channel_nb); format, channel_nb);
audio_stream_label = g_list_append (audio_stream_label, streamlabel); /* "French, Dolby AC-3 Stereo" */ audio_stream_label = g_list_append (audio_stream_label, streamlabel); /* "French, Dolby AC-3 Stereo" */
printf ("%u : %s, %s %s\n", i + 1, language, format, channel_nb); printf ("%u : %s, %s %s\n", i + 1, language, format, channel_nb);
} }
} }
} }
g_list_foreach (audio_stream_label, (GFunc) g_free, NULL);
g_list_free (audio_stream_label);
} }
void void