From: Colin Walters Date: Thu, 9 May 2013 17:39:50 +0000 (+0100) Subject: GLocalFileOutputStream: Deduplicate stream creation code X-Git-Tag: 2.37.1~26 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5e65cd4e5153b340a25a8ffb580cf5f23f54d649;p=platform%2Fupstream%2Fglib.git GLocalFileOutputStream: Deduplicate stream creation code Lots of copy/paste of the error handling path, let's deduplicate so I can sanely patch this code later. https://bugzilla.gnome.org/699959 --- diff --git a/gio/glocalfileoutputstream.c b/gio/glocalfileoutputstream.c index 22fefc4..520f771 100644 --- a/gio/glocalfileoutputstream.c +++ b/gio/glocalfileoutputstream.c @@ -544,26 +544,17 @@ _g_local_file_output_stream_new (int fd) return G_FILE_OUTPUT_STREAM (stream); } -GFileOutputStream * -_g_local_file_output_stream_open (const char *filename, - gboolean readable, - GCancellable *cancellable, - GError **error) +static GFileOutputStream * +output_stream_open (const char *filename, + gint open_flags, + guint mode, + GCancellable *cancellable, + GError **error) { GLocalFileOutputStream *stream; - int fd; - int open_flags; - - if (g_cancellable_set_error_if_cancelled (cancellable, error)) - return NULL; + gint fd; - open_flags = O_BINARY; - if (readable) - open_flags |= O_RDWR; - else - open_flags |= O_WRONLY; - - fd = g_open (filename, open_flags, 0666); + fd = g_open (filename, open_flags, mode); if (fd == -1) { int errsv = errno; @@ -591,15 +582,33 @@ _g_local_file_output_stream_open (const char *filename, } GFileOutputStream * +_g_local_file_output_stream_open (const char *filename, + gboolean readable, + GCancellable *cancellable, + GError **error) +{ + int open_flags; + + if (g_cancellable_set_error_if_cancelled (cancellable, error)) + return NULL; + + open_flags = O_BINARY; + if (readable) + open_flags |= O_RDWR; + else + open_flags |= O_WRONLY; + + return output_stream_open (filename, open_flags, 0666, cancellable, error); +} + +GFileOutputStream * _g_local_file_output_stream_create (const char *filename, gboolean readable, GFileCreateFlags flags, GCancellable *cancellable, GError **error) { - GLocalFileOutputStream *stream; int mode; - int fd; int open_flags; if (g_cancellable_set_error_if_cancelled (cancellable, error)) @@ -616,31 +625,7 @@ _g_local_file_output_stream_create (const char *filename, else open_flags |= O_WRONLY; - fd = g_open (filename, open_flags, mode); - if (fd == -1) - { - int errsv = errno; - - if (errsv == EINVAL) - /* This must be an invalid filename, on e.g. FAT */ - g_set_error_literal (error, G_IO_ERROR, - G_IO_ERROR_INVALID_FILENAME, - _("Invalid filename")); - else - { - char *display_name = g_filename_display_name (filename); - g_set_error (error, G_IO_ERROR, - g_io_error_from_errno (errsv), - _("Error opening file '%s': %s"), - display_name, g_strerror (errsv)); - g_free (display_name); - } - return NULL; - } - - stream = g_object_new (G_TYPE_LOCAL_FILE_OUTPUT_STREAM, NULL); - stream->priv->fd = fd; - return G_FILE_OUTPUT_STREAM (stream); + return output_stream_open (filename, open_flags, mode, cancellable, error); } GFileOutputStream * @@ -649,9 +634,7 @@ _g_local_file_output_stream_append (const char *filename, GCancellable *cancellable, GError **error) { - GLocalFileOutputStream *stream; int mode; - int fd; if (g_cancellable_set_error_if_cancelled (cancellable, error)) return NULL; @@ -661,32 +644,8 @@ _g_local_file_output_stream_append (const char *filename, else mode = 0666; - fd = g_open (filename, O_CREAT | O_APPEND | O_WRONLY | O_BINARY, mode); - if (fd == -1) - { - int errsv = errno; - - if (errsv == EINVAL) - /* This must be an invalid filename, on e.g. FAT */ - g_set_error_literal (error, G_IO_ERROR, - G_IO_ERROR_INVALID_FILENAME, - _("Invalid filename")); - else - { - char *display_name = g_filename_display_name (filename); - g_set_error (error, G_IO_ERROR, - g_io_error_from_errno (errsv), - _("Error opening file '%s': %s"), - display_name, g_strerror (errsv)); - g_free (display_name); - } - return NULL; - } - - stream = g_object_new (G_TYPE_LOCAL_FILE_OUTPUT_STREAM, NULL); - stream->priv->fd = fd; - - return G_FILE_OUTPUT_STREAM (stream); + return output_stream_open (filename, O_CREAT | O_APPEND | O_WRONLY | O_BINARY, mode, + cancellable, error); } static char *