Some streams have no close function, so this caused a crash.
cancellation, since we want to close things anyway, although
possibly in a quick-n-dirty way. At least we never want to leak
open handles */
-
+
class = G_INPUT_STREAM_GET_CLASS (object);
- result = class->close_fn (G_INPUT_STREAM (object), cancellable, &error);
- if (!result)
+ if (class->close_fn)
{
- g_simple_async_result_set_from_error (res, error);
- g_error_free (error);
+ result = class->close_fn (G_INPUT_STREAM (object), cancellable, &error);
+ if (!result)
+ {
+ g_simple_async_result_set_from_error (res, error);
+ g_error_free (error);
+ }
}
}
open handles */
class = G_IO_STREAM_GET_CLASS (object);
- result = class->close_fn (G_IO_STREAM (object), cancellable, &error);
- if (!result)
+ if (class->close_fn)
{
- g_simple_async_result_set_from_error (res, error);
- g_error_free (error);
+ result = class->close_fn (G_IO_STREAM (object), cancellable, &error);
+ if (!result)
+ {
+ g_simple_async_result_set_from_error (res, error);
+ g_error_free (error);
+ }
}
}
if (flags & G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET)
{
/* But write errors on close are bad! */
- if (!class->close_fn (stream, cancellable, error))
+ if (class->close_fn &&
+ !class->close_fn (stream, cancellable, error))
res = FALSE;
}
if (res)
return bytes_copied;
-
+
return -1;
}
cancellation, since we want to close things anyway, although
possibly in a quick-n-dirty way. At least we never want to leak
open handles */
-
+
class = G_OUTPUT_STREAM_GET_CLASS (object);
- result = class->close_fn (G_OUTPUT_STREAM (object), cancellable, &error);
- if (!result)
+ if (class->close_fn)
{
- g_simple_async_result_set_from_error (res, error);
- g_error_free (error);
+ result = class->close_fn (G_OUTPUT_STREAM (object), cancellable, &error);
+ if (!result)
+ {
+ g_simple_async_result_set_from_error (res, error);
+ g_error_free (error);
+ }
}
}