[0.11] gst-plugins-bad: festival: enhance some error case handling

Sebastian Dröge slomo at kemper.freedesktop.org
Wed Jan 25 04:24:00 PST 2012


Module: gst-plugins-bad
Branch: 0.11
Commit: c004a1e4623be673c59dba85e64fe1ce9b539965
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=c004a1e4623be673c59dba85e64fe1ce9b539965

Author: Mark Nauwelaerts <mark.nauwelaerts at collabora.co.uk>
Date:   Mon Jan 23 13:56:02 2012 +0100

festival: enhance some error case handling

---

 gst/festival/gstfestival.c |   29 +++++++++++++++++++++++++----
 1 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/gst/festival/gstfestival.c b/gst/festival/gstfestival.c
index 4c7e241..47b371b 100644
--- a/gst/festival/gstfestival.c
+++ b/gst/festival/gstfestival.c
@@ -297,22 +297,29 @@ gst_festival_chain (GstPad * pad, GstBuffer * buf)
   GstFlowReturn ret = GST_FLOW_OK;
   GstFestival *festival;
   guint8 *p, *ep;
+  gint f;
   FILE *fd;
 
   festival = GST_FESTIVAL (GST_PAD_PARENT (pad));
 
   GST_LOG_OBJECT (festival, "Got text buffer, %u bytes", GST_BUFFER_SIZE (buf));
 
-  fd = fdopen (dup (festival->info->server_fd), "wb");
+  f = dup (festival->info->server_fd);
+  if (f < 0)
+    goto fail_open;
+  fd = fdopen (f, "wb");
+  if (fd == NULL) {
+    close (f);
+    goto fail_open;
+  }
 
   /* Copy text over to server, escaping any quotes */
   fprintf (fd, "(Parameter.set 'Audio_Required_Rate 16000)\n");
   fflush (fd);
   GST_DEBUG_OBJECT (festival, "issued Parameter.set command");
   if (read_response (festival) == FALSE) {
-    ret = GST_FLOW_ERROR;
     fclose (fd);
-    goto out;
+    goto fail_read;
   }
 
   fprintf (fd, "(tts_textall \"");
@@ -332,11 +339,25 @@ gst_festival_chain (GstPad * pad, GstBuffer * buf)
 
   /* Read back info from server */
   if (read_response (festival) == FALSE)
-    ret = GST_FLOW_ERROR;
+    goto fail_read;
 
 out:
   gst_buffer_unref (buf);
   return ret;
+
+  /* ERRORS */
+fail_open:
+  {
+    GST_ELEMENT_ERROR (festival, RESOURCE, OPEN_WRITE, (NULL), (NULL));
+    ret = GST_FLOW_ERROR;
+    goto out;
+  }
+fail_read:
+  {
+    GST_ELEMENT_ERROR (festival, RESOURCE, READ, (NULL), (NULL));
+    ret = GST_FLOW_ERROR;
+    goto out;
+  }
 }
 
 static FT_Info *



More information about the gstreamer-commits mailing list