X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fglocalfileoutputstream.c;h=520f771abdc799b4078d316e3757c6d146963da6;hb=5e65cd4e5153b340a25a8ffb580cf5f23f54d649;hp=22fefc4baf5bd9003c98ca10bdcee58c30741c84;hpb=49030c8797d5a415e2cb94a3c658f67206cb8bf5;p=platform%2Fupstream%2Fglib.git 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 *