[gedit] Do not append the final endline for empty files



commit 85d532cf11637d2e5dedaef353971315f951d0d4
Author: Paolo Borelli <porelli gnome org>
Date:   Tue Jun 2 16:02:52 2009 +0200

    Do not append the final endline for empty files
---
 gedit/gedit-document-saver.c     |   67 ++++++++++++++++++++------------------
 gedit/gedit-gio-document-saver.c |    6 ++--
 2 files changed, 38 insertions(+), 35 deletions(-)

diff --git a/gedit/gedit-document-saver.c b/gedit/gedit-document-saver.c
index 26893be..3865ffb 100644
--- a/gedit/gedit-document-saver.c
+++ b/gedit/gedit-document-saver.c
@@ -341,47 +341,50 @@ gedit_document_saver_write_document_contents (GeditDocumentSaver  *saver,
 	}
 
 	/* Save the file content */
-	if (res)
+	if (len > 0)
 	{
-		const gchar *write_buffer = contents;
-		gssize to_write = len;
-
-		do
+		if (res)
 		{
-			written = write (fd, write_buffer, to_write);
-			if (written == -1)
+			const gchar *write_buffer = contents;
+			gssize to_write = len;
+
+			do
 			{
-				if (errno == EINTR)
-					continue;
+				written = write (fd, write_buffer, to_write);
+				if (written == -1)
+				{
+					if (errno == EINTR)
+						continue;
 
-				res = FALSE;
+					res = FALSE;
 
-				break;
-			}
+					break;
+				}
 
-			to_write -= written;
-			write_buffer += written;
+				to_write -= written;
+				write_buffer += written;
+			}
+			while (to_write > 0);
 		}
-		while (to_write > 0);
-	}
-
-	/* make sure files are always terminated with \n (see bug #95676). Note
-	   that we strip the trailing \n when loading the file */
-	if (res)
-	{
-		gchar *n_buf;
-		gsize n_len;
 
-		n_buf = gedit_document_saver_get_end_newline (saver, &n_len);
-		if (n_buf != NULL)
+		/* make sure files are always terminated with \n (see bug #95676). Note
+		   that we strip the trailing \n when loading the file */
+		if (res)
 		{
-			written = write (fd, n_buf, n_len);
-			res = (written != -1 && (gsize) written == n_len);
-			g_free (n_buf);
-		}
-		else
-		{
-			g_warning ("Cannot add '\\n' at the end of the file.");
+			gchar *n_buf;
+			gsize n_len;
+
+			n_buf = gedit_document_saver_get_end_newline (saver, &n_len);
+			if (n_buf != NULL)
+			{
+				written = write (fd, n_buf, n_len);
+				res = (written != -1 && (gsize) written == n_len);
+				g_free (n_buf);
+			}
+			else
+			{
+				g_warning ("Cannot add '\\n' at the end of the file.");
+			}
 		}
 	}
 
diff --git a/gedit/gedit-gio-document-saver.c b/gedit/gedit-gio-document-saver.c
index 1cb5c87..9f7cde7 100644
--- a/gedit/gedit-gio-document-saver.c
+++ b/gedit/gedit-gio-document-saver.c
@@ -534,13 +534,13 @@ begin_write (AsyncData *async)
 	 */
 	gvsaver = async->saver;
 	gchar *buffer = gedit_document_saver_get_document_contents (GEDIT_DOCUMENT_SAVER (gvsaver), &len, &error);
-	
-	if (buffer)
+
+	if (buffer != NULL && len > 0)
 	{
 		/* Append new line to buffer */
 		buffer = append_new_line (gvsaver, buffer, &len, &error);
 	}
-	
+
 	if (!buffer)
 	{
 		async_failed (async, error);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]