svn commit: trunk/busybox/editors

pgf at busybox.net pgf at busybox.net
Sun Oct 9 14:43:24 UTC 2005


Author: pgf
Date: 2005-10-09 07:43:22 -0700 (Sun, 09 Oct 2005)
New Revision: 11817

Log:
catch and report errors from file_write()


Modified:
   trunk/busybox/editors/vi.c


Changeset:
Modified: trunk/busybox/editors/vi.c
===================================================================
--- trunk/busybox/editors/vi.c	2005-10-09 14:26:26 UTC (rev 11816)
+++ trunk/busybox/editors/vi.c	2005-10-09 14:43:22 UTC (rev 11817)
@@ -283,7 +283,6 @@
 
 static void Indicate_Error(void);       // use flash or beep to indicate error
 #define indicate_error(c) Indicate_Error()
-
 static void Hit_Return(void);
 
 #ifdef CONFIG_FEATURE_VI_SEARCH
@@ -1113,14 +1112,19 @@
 			// system(syscmd);
 			forced = FALSE;
 		}
-		psb("\"%s\" %dL, %dC", fn, li, l);
-		if (q == text && r == end - 1 && l == ch) {
-			file_modified = 0;
-			last_file_modified = -1;
+		if (l < 0) {
+			if (l == -1)
+				psbs("Write error: %s", strerror(errno));
+		} else {
+			psb("\"%s\" %dL, %dC", fn, li, l);
+			if (q == text && r == end - 1 && l == ch) {
+				file_modified = 0;
+				last_file_modified = -1;
+			}
+			if ((cmd[0] == 'x' || cmd[1] == 'q') && l == ch) {
+				editing = 0;
+			}
 		}
-		if ((cmd[0] == 'x' || cmd[1] == 'q') && l == ch) {
-			editing = 0;
-		}
 #ifdef CONFIG_FEATURE_VI_READONLY
 	  vc3:;
 #endif							/* CONFIG_FEATURE_VI_READONLY */
@@ -1147,6 +1151,7 @@
 	psb(":s expression missing delimiters");
 #endif
 }
+
 #endif							/* CONFIG_FEATURE_VI_COLON */
 
 static void Hit_Return(void)
@@ -2516,7 +2521,7 @@
 
 	if (fn == 0) {
 		psbs("No current filename");
-		return (-1);
+		return (-2);
 	}
 	charcnt = 0;
 	// FIXIT- use the correct umask()
@@ -3440,11 +3445,16 @@
 				   strncasecmp((char *) p, "wq", cnt) == 0 ||
 				   strncasecmp((char *) p, "x", cnt) == 0) {
 			cnt = file_write(cfn, text, end - 1);
-			file_modified = 0;
-			last_file_modified = -1;
-			psb("\"%s\" %dL, %dC", cfn, count_lines(text, end - 1), cnt);
-			if (p[0] == 'x' || p[1] == 'q') {
-				editing = 0;
+			if (cnt < 0) {
+				if (cnt == -1)
+					psbs("Write error: %s", strerror(errno));
+			} else {
+				file_modified = 0;
+				last_file_modified = -1;
+				psb("\"%s\" %dL, %dC", cfn, count_lines(text, end - 1), cnt);
+				if (p[0] == 'x' || p[1] == 'q') {
+					editing = 0;
+				}
 			}
 		} else if (strncasecmp((char *) p, "file", cnt) == 0 ) {
 			last_status_cksum = 0;	// force status update
@@ -3630,7 +3640,10 @@
 #endif							/* CONFIG_FEATURE_VI_READONLY */
 			) {
 			cnt = file_write(cfn, text, end - 1);
-			if (cnt == (end - 1 - text + 1)) {
+			if (cnt < 0) {
+				if (cnt == -1)
+					psbs("Write error: %s", strerror(errno));
+			} else if (cnt == (end - 1 - text + 1)) {
 				editing = 0;
 			}
 		} else {




More information about the busybox-cvs mailing list