This diff makes mg behave more like emacs by checking if the file about
to be written exists.
ok?
-lum
Index: file.c
===================================================================
RCS file: /cvs/src/usr.bin/mg/file.c,v
retrieving revision 1.76
diff -u -p -r1.76 file.c
--- file.c 31 Aug 2011 08:58:29 -0000 1.76
+++ file.c 10 Apr 2012 13:49:07 -0000
@@ -8,6 +8,8 @@
#include "def.h"
+#include <sys/stat.h>
+
#include <libgen.h>
size_t xdirname(char *, const char *, size_t);
@@ -491,8 +493,9 @@ cleanup:
int
filewrite(int f, int n)
{
+ struct stat statbuf;
int s;
- char fname[NFILEN], bn[NBUFN];
+ char fname[NFILEN], bn[NBUFN], tmp[NFILEN + 25];
char *adjfname, *bufp;
if (getbufcwd(fname, sizeof(fname)) != TRUE)
@@ -506,6 +509,15 @@ filewrite(int f, int n)
adjfname = adjustname(fname, TRUE);
if (adjfname == NULL)
return (FALSE);
+
+ /* Check if file exists; write checks done later */
+ if (stat(adjfname, &statbuf) == 0) {
+ snprintf(tmp, sizeof(tmp), "File `%s' exists; overwrite",
+ adjfname);
+ if ((s = eyorn(tmp)) != TRUE)
+ return (s);
+ }
+
/* old attributes are no longer current */
bzero(&curbp->b_fi, sizeof(curbp->b_fi));
if ((s = writeout(curbp, adjfname)) == TRUE) {