plugins/elements/: Emit RESOURCE_NO_SPACE_LEFT error here as well when there's no...
authorTim-Philipp Müller <tim@centricular.net>
Sat, 11 Mar 2006 13:02:28 +0000 (13:02 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Sat, 11 Mar 2006 13:02:28 +0000 (13:02 +0000)
Original commit message from CVS:
* plugins/elements/gstfdsink.c: (gst_fd_sink_render):
* plugins/elements/gstfilesink.c: (gst_file_sink_render):
Emit RESOURCE_NO_SPACE_LEFT error here as well when
there's no space left on the device.

ChangeLog
plugins/elements/gstfdsink.c
plugins/elements/gstfilesink.c

index 9f8b492..a4dc897 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-03-11  Tim-Philipp Müller  <tim at centricular dot net>
+
+       * plugins/elements/gstfdsink.c: (gst_fd_sink_render):
+       * plugins/elements/gstfilesink.c: (gst_file_sink_render):
+         Emit RESOURCE_NO_SPACE_LEFT error here as well when
+         there's no space left on the device.
+
 2006-03-10  Tim-Philipp Müller  <tim at centricular dot net>
 
        * gst/gstclock.h:
index 8113ca3..f04490c 100644 (file)
@@ -278,15 +278,13 @@ gst_fd_sink_render (GstBaseSink * sink, GstBuffer * buffer)
 
     GST_DEBUG ("writing %d bytes to file descriptor %d",
         GST_BUFFER_SIZE (buffer), fdsink->fd);
+    /* FIXME: short writes are perfectly valid and may happen; also,
+     * we should probably handle EINTR and EAGAIN in a non-fatal way */
     bytes_written =
         write (fdsink->fd, GST_BUFFER_DATA (buffer), GST_BUFFER_SIZE (buffer));
     fdsink->bytes_written += bytes_written;
-    if (bytes_written != GST_BUFFER_SIZE (buffer)) {
-      GST_ELEMENT_ERROR (fdsink, RESOURCE, WRITE,
-          (_("Error while writing to file descriptor \"%d\"."), fdsink->fd),
-          ("%s", g_strerror (errno)));
-      return GST_FLOW_ERROR;
-    }
+    if (bytes_written != GST_BUFFER_SIZE (buffer))
+      goto write_error;
   }
 
   return GST_FLOW_OK;
@@ -305,6 +303,21 @@ stopped:
     return GST_FLOW_WRONG_STATE;
   }
 #endif
+
+write_error:
+  {
+    switch (errno) {
+      case ENOSPC:
+        GST_ELEMENT_ERROR (fdsink, RESOURCE, NO_SPACE_LEFT, (NULL), (NULL));
+        break;
+      default:{
+        GST_ELEMENT_ERROR (fdsink, RESOURCE, WRITE,
+            (_("Error while writing to file descriptor \"%d\"."), fdsink->fd),
+            ("%s", g_strerror (errno)));
+      }
+    }
+    return GST_FLOW_ERROR;
+  }
 }
 
 static gboolean
index 6e55489..1cf513f 100644 (file)
@@ -420,12 +420,20 @@ gst_file_sink_render (GstBaseSink * sink, GstBuffer * buffer)
   return GST_FLOW_OK;
 
 handle_error:
-
-  GST_ELEMENT_ERROR (filesink, RESOURCE, WRITE,
-      (_("Error while writing to file \"%s\"."), filesink->filename),
-      ("%s", g_strerror (errno)));
-
-  return GST_FLOW_ERROR;
+  {
+    switch (errno) {
+      case ENOSPC:{
+        GST_ELEMENT_ERROR (filesink, RESOURCE, NO_SPACE_LEFT, (NULL), (NULL));
+        break;
+      }
+      default:{
+        GST_ELEMENT_ERROR (filesink, RESOURCE, WRITE,
+            (_("Error while writing to file \"%s\"."), filesink->filename),
+            ("%s", g_strerror (errno)));
+      }
+    }
+    return GST_FLOW_ERROR;
+  }
 }
 
 static gboolean