commit be7c5c80209ddf2d17a133f2f12044caeb82c127 Author: Ross Lagerwall Date: 2014-10-26 Update NEWS for 1.23.1 release M NEWS commit 58db1bd073a8f5f0eaadd9cc56f57c952e43f49e Author: Ross Lagerwall Date: 2014-07-29 fuse: Pass the correct flags when reopening output stream If a file is open for reading and writing, ensure to pass the O_APPEND flag if necessary when reopening the output stream. This allows a write-read-write sequence to work properly if the file is opened for O_APPEND. The O_TRUNC flag is not passed since this would cause a write-read-write sequence to truncate the file on the second write. As it is, the second write fails with ENOTSUP since this kind of operation is not supported by GVFS. https://bugzilla.gnome.org/show_bug.cgi?id=632296 M client/gvfsfusedaemon.c commit 1ff4d6c13358ca3efbece1cf81298b44fdc8e855 Author: Ross Lagerwall Date: 2014-07-26 fuse: Close stream on release rather than flush Before, if an application created, dup()ed the fd and then closed it, the stream would be closed. When attempting to write to the original fd, reopening the stream would fail since it is an error to open an existing file without either truncating it or appending to it. Close the stream on release() rather than flush() to fix this since release() is called only once per open/create rather than for each close. Since g_output_stream_flush() is called after every write, flush() and fsync() are unnecessary. https://bugzilla.gnome.org/show_bug.cgi?id=632296 M client/gvfsfusedaemon.c commit 3800f5297b10f34a17502983ca11f89efae9ddea Author: Ross Lagerwall Date: 2014-07-26 fuse: Track the size of open files properly Previously, if a getattr() for an open file could not get the size information, the file position was returned as the size. This is incorrect if seek or ftruncate had previously been used on the stream. Instead, track the size of the open file and return this value. In addition, use this size in preference to the size returned by g_file_query_info() if a stream is open (this only happens if the stream doesn't support g_file_query_info_on_write()) since the tracked size is more likely to be correct due to implementing g_file_replace by writing to a temporary file. Tracking the size is only necessary for files which are created or opened with O_TRUNC since files opened with O_APPEND will be appended in-place. https://bugzilla.gnome.org/show_bug.cgi?id=632296 M client/gvfsfusedaemon.c commit 548ba46c2ba51c4ec5b0dd8442b476f3a2a7000b Author: Ross Lagerwall Date: 2014-07-26 fuse: Don't g_file_append_to unless O_APPEND is given Because g_file_append_to opens an output stream that can only append regardless of the seek position, only use g_file_append_to when O_APPEND is actually specified. This prevents file corruption when the mode is O_WRONLY or O_RDWR without O_APPEND. Note that this means opening a file with a bare O_WRONLY or O_RDWR returns ENOTSUP since there is no equivalent in gvfs. Furthermore, don't attempt to seek when the file mode is O_APPEND since this is unnecessary. https://bugzilla.gnome.org/show_bug.cgi?id=632296 M client/gvfsfusedaemon.c commit 8082321c9d2c8e1f8bb8a679219af1507f297b1a Author: Ross Lagerwall Date: 2014-07-26 http: Always set the file type to regular Always set the file type to regular so that querying the type of an input stream gives the expected result. https://bugzilla.gnome.org/show_bug.cgi?id=632296 M daemon/gvfsbackendhttp.c commit f6f99e22a8200adfc6011156231eec57af44027c Author: Ross Lagerwall Date: 2014-07-24 fuse: Truncate stream rather than path if possible When truncating, if a writable stream is open, truncate that rather than using g_file_replace on the path since that fails to have the desired effect if replace is implemented by writing to a temporary and then renaming. https://bugzilla.gnome.org/show_bug.cgi?id=632296 M client/gvfsfusedaemon.c commit 8dc5941cf17d2d82c8faf69b0ea88b7c66e0ccff Author: Ross Lagerwall Date: 2014-07-24 fuse: Use query_info_on_{read,write} if a stream is open If a stream is open and it supports query_info_on_{read,write}, use that in preference to querying the file using the path. This causes the correct information to be retrieved when g_file_replace is implemented by writing to a temporary file, rather than the information of the yet-to-be-replaced file. https://bugzilla.gnome.org/show_bug.cgi?id=632296 M client/gvfsfusedaemon.c commit 4512e0a2f6c43094ed8ac2a40c2bc6e453448b07 Author: Baurzhan Muftakhidinov Date: 2014-10-26 Updated Kazakh translation M po/kk.po commit 9c408fa27c770f78468b7aff5a4107967c49cc31 Author: Stas Solovey Date: 2014-10-24 Updated Russian translation M po/ru.po commit 09e2583e8e3630598208abad620e719df8fac4c3