speechd-discuss
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] server - Use the GQueue data structure to remove hard-coded uppe


From: Jeremy Whiting
Subject: [PATCH] server - Use the GQueue data structure to remove hard-coded upper limits on voice lists
Date: Tue, 2 Jun 2015 19:17:12 -0600

Looks good to me.

On Tue, Jun 2, 2015 at 6:56 PM, Luke Yelavich
<luke.yelavich at canonical.com> wrote:
> From: Luke Yelavich <themuso at themuso.com>
>
> No synthesizer at this time provides more than 256 voices, but hard-coding
> a maximum is not a good idea either.
> ---
>  src/server/output.c | 35 ++++++++++++++++++++++++++++-------
>  1 file changed, 28 insertions(+), 7 deletions(-)
>
> diff --git a/src/server/output.c b/src/server/output.c
> index 0313454..8d2cbae 100644
> --- a/src/server/output.c
> +++ b/src/server/output.c
> @@ -278,11 +278,14 @@ int output_send_data(char *cmd, OutputModule * output, 
> int wfr)
>  static SPDVoice **output_get_voices(OutputModule * module)
>  {
>         SPDVoice **voice_dscr;
> +       SPDVoice *voice;
>         GString *reply;
>         gchar **lines;
>         gchar **atoms;
> +       GQueue *voices;
>         int i;
>         int ret = 0;
> +       int numvoices = 0;
>         gboolean errors = FALSE;
>
>         output_lock();
> @@ -298,10 +301,10 @@ static SPDVoice **output_get_voices(OutputModule * 
> module)
>                 output_unlock();
>                 return NULL;
>         }
> -       //TODO: only 256 voices supported here
> -       lines = g_strsplit(reply->str, "\n", 256);
> +
> +       lines = g_strsplit(reply->str, "\n", -1);
>         g_string_free(reply, TRUE);
> -       voice_dscr = g_malloc(256 * sizeof(SPDVoice *));
> +       voices = g_queue_new();
>         for (i = 0; !errors && (lines[i] != NULL); i++) {
>                 MSG(1, "LINE here:|%s|", lines[i]);
>                 if (strlen(lines[i]) <= 4) {
> @@ -320,10 +323,11 @@ static SPDVoice **output_get_voices(OutputModule * 
> module)
>                                 errors = TRUE;
>                         } else {
>                                 //Fill in VoiceDescription
> -                               voice_dscr[i] = g_malloc(sizeof(SPDVoice));
> -                               voice_dscr[i]->name = g_strdup(atoms[0]);
> -                               voice_dscr[i]->language = g_strdup(atoms[1]);
> -                               voice_dscr[i]->variant = g_strdup(atoms[2]);
> +                               voice = g_malloc(sizeof(SPDVoice));
> +                               voice->name = g_strdup(atoms[0]);
> +                               voice->language = g_strdup(atoms[1]);
> +                               voice->variant = g_strdup(atoms[2]);
> +                               g_queue_push_tail(voices, voice);
>                         }
>                         if (atoms != NULL)
>                                 g_strfreev(atoms);
> @@ -331,7 +335,24 @@ static SPDVoice **output_get_voices(OutputModule * 
> module)
>                 /* Should we do something in a final "else" branch? */
>
>         }
> +
> +       if (errors == TRUE) {
> +               g_queue_free(voices);
> +               g_strfreev(lines);
> +               output_unlock();
> +               return NULL;
> +       }
> +
> +       numvoices = g_queue_get_length(voices);
> +
> +       voice_dscr = g_malloc((numvoices + 1) * sizeof(SPDVoice *));
> +
> +       for (i = 0; i < numvoices; i++) {
> +               voice_dscr[i] = g_queue_pop_head(voices);
> +       }
> +
>         voice_dscr[i] = NULL;
> +       g_queue_free(voices);
>         g_strfreev(lines);
>
>         output_unlock();
> --
> 2.1.4
>
>
> _______________________________________________
> Speechd mailing list
> Speechd at lists.freebsoft.org
> http://lists.freebsoft.org/mailman/listinfo/speechd



reply via email to

[Prev in Thread] Current Thread [Next in Thread]