Fix for another dala loss bug
- From: Pavel Roskin <proski gnu org>
- To: <mc-devel gnome org>
- Subject: Fix for another dala loss bug
- Date: Wed, 1 Aug 2001 17:56:51 -0400 (EDT)
Hello!
"Safe save" and "Do backups" don't work on the remote VFS. Fixing it
properly is quite hard, because it requires on implementation of rename()
on VFS.
Editing files on VFS with those options on can cause loss of data. Such
bugs should have a very high priority for us.
I also replaced a tempnam() call with a call to mc_mkstemps(), so that the
last annoying linker warning on GNU/Linux is going away.
ChangeLog:
* editcmd.c (edit_save_file): Temporarily disable safe save
and backups on remote VFS because it doesn't work. Use
mc_mkstemps() instead of tempnam().
---------------------------------------------
--- editcmd.c
+++ editcmd.c
@@ -261,15 +261,27 @@ int edit_save_file (WEdit * edit, const
savename = (char *) strdup ((char *) filename);
- if ((fd = open (savename, O_WRONLY)) == -1) {
- this_save_mode = 0; /* the file does not exists yet, so no safe save or backup necessary */
+ if (vfs_file_is_local (filename)) {
+ if ((fd = open (savename, O_WRONLY)) == -1) {
+ /*
+ * The file does not exists yet, so no safe save or
+ * backup are necessary.
+ */
+ this_save_mode = 0;
+ } else {
+ close (fd);
+ this_save_mode = option_save_mode;
+ }
} else {
- close (fd);
- this_save_mode = option_save_mode;
+ /*
+ * FIXME - rename is not impemented in VFS, so only
+ * quick save is possible.
+ */
+ this_save_mode = 0;
}
if (this_save_mode > 0) {
- char *savedir, *slashpos;
+ char *savedir, *slashpos, *saveprefix;
savedir = (char *) strdup (".");
slashpos = strrchr (filename, '/');
if (slashpos) {
@@ -279,10 +291,17 @@ int edit_save_file (WEdit * edit, const
}
if (savename)
free (savename);
- savename = (char *) tempnam (savedir, "cooledit");
+ saveprefix = concat_dir_and_file (savedir, "cooledit");
+ fd = mc_mkstemps(&savename, saveprefix, NULL);
+ g_free (saveprefix);
free (savedir);
if (!savename)
return 0;
+ /*
+ * Close for now because it needs to be reopened by
+ * VFS-aware mc_open() and MY_O_TEXT should be used.
+ */
+ close (fd);
}
if ((fd = open (savename, O_CREAT | O_WRONLY | O_TRUNC | MY_O_TEXT,
---------------------------------------------
--
Regards,
Pavel Roskin
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]