plugins/elements/: Emit RESOURCE_NO_SPACE_LEFT error here as well when there's no space left on the device.

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.
This commit is contained in:
Tim-Philipp Müller 2006-03-11 13:02:28 +00:00
parent 61ce17d6f3
commit 22482e1bbd
3 changed files with 40 additions and 12 deletions

View file

@ -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:

View 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

View file

@ -420,12 +420,20 @@ gst_file_sink_render (GstBaseSink * sink, GstBuffer * buffer)
return GST_FLOW_OK;
handle_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