GNU bug report logs -
#22795
25.0.91; Can't write read only file on w32
Previous Next
Reported by: "Ota, Takaaki" <Takaaki.Ota <at> am.sony.com>
Date: Wed, 24 Feb 2016 18:18:02 UTC
Severity: normal
Tags: moreinfo
Found in version 25.0.91
Done: Glenn Morris <rgm <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
Message #31 received at 22795 <at> debbugs.gnu.org (full text, mbox):
I think this is something to do with my mingw. I cannot remember when
I updated mingw last time. Here is the comparison between trace in
emacs-24.5 and emacs-25.0.91. The difference is in the open system
call. Both pass the same set of parameters to open but emacs-24.5
gets 3 and emacs-25.0.91 gets -1. Both emacs were built using mingw
but I cannot guarantee they are the same version of mingw. Can you
think of any other reason than they were built with different mingw to
explain the difference of the open() behavior?
-Tak
================================ emacs-25.0.91
[New Thread 10664.0x2714]
4707 bool file_locked = 0;
(gdb)
4801 if (open_and_close_file && !auto_saving)
(gdb)
4803 lock_file (lockname);
(gdb)
4804 file_locked = 1;
(gdb)
4807 encoded_filename = ENCODE_FILE (filename);
(gdb)
4808 fn = SSDATA (encoded_filename);
(gdb)
4810 open_flags |= EQ (mustbenew, Qexcl) ? O_EXCL : !NILP (append) ? 0 : O_TRUNC;
(gdb)
4811 if (NUMBERP (append))
(gdb)
4810 open_flags |= EQ (mustbenew, Qexcl) ? O_EXCL : !NILP (append) ? 0 : O_TRUNC;
(gdb)
4821 if (open_and_close_file)
(gdb)
4823 desc = emacs_open (fn, open_flags, mode);
(gdb) s
emacs_open (file=file <at> entry=0x829692c "c:/d/ota/memo",
oflags=oflags <at> entry=33537, mode=mode <at> entry=384) at sysdep.c:2260
2260 {
(gdb) n
2263 oflags |= O_BINARY;
(gdb)
2264 oflags |= O_CLOEXEC;
(gdb)
2265 while ((fd = open (file, oflags, mode)) < 0 && errno == EINTR)
(gdb) p file
$10 = 0x829692c "c:/d/ota/memo"
(gdb) p oflags
$11 = 33665
(gdb) p mode
$12 = 384
(gdb) n
2270 }
(gdb) p fd
$13 = -1
================================ emacs-24.5
[New Thread 3264.0xa38]
4708 bool file_locked = 0;
(gdb)
4809 if (open_and_close_file && !auto_saving)
(gdb)
4811 lock_file (lockname);
(gdb)
4812 file_locked = 1;
(gdb)
4816 encoded_filename = ENCODE_FILE (filename);
(gdb)
4817 fn = SSDATA (encoded_filename);
(gdb)
4819 open_flags |= EQ (mustbenew, Qexcl) ? O_EXCL : !NILP (append) ? 0 : O_TRUNC;
(gdb)
4820 if (NUMBERP (append))
(gdb)
4823 open_flags |= O_APPEND;
(gdb)
4830 if (open_and_close_file)
(gdb)
4832 desc = emacs_open (fn, open_flags, mode);
(gdb) s
emacs_open (file=file <at> entry=0x5d8aec8 "c:/d/ota/memo",
oflags=oflags <at> entry=33537, mode=mode <at> entry=384) at sysdep.c:2143
2143 {
(gdb) n
2145 oflags |= O_CLOEXEC;
(gdb)
2146 while ((fd = open (file, oflags, mode)) < 0 && errno == EINTR)
(gdb) p file
$1 = 0x5d8aec8 "c:/d/ota/memo"
(gdb) p oflags
$2 = 33665
(gdb) p mode
$3 = 384
(gdb) n
[New Thread 3264.0x4f0]
[New Thread 3264.0x12a0]
2151 }
(gdb) p fd
$4 = 3
Thu, 25 Feb 2016 20:09:34 +0200: Eli Zaretskii <eliz <at> gnu.org> wrote:
> > Date: Thu, 25 Feb 2016 09:08:38 -0800
> > CC: <22795 <at> debbugs.gnu.org>
> > From: "Ota, Takaaki" <Takaaki.Ota <at> am.sony.com>
> >
> > Yes, I own and have full permission of the directory. I noticed one
> > thing when I tried other than C: drive. An external USB drive with
> > NTFS file system exhibits the same problem as C: drive. A flash drive
> > with FAT32 doesn't show the same problem. Have you tried with NTFS?
>
> I tried only with NTFS.
>
> > I tried "emacs -Q" (actually "./runemacs -Q") and the result is the
> > same. On FAT32 the writing succeeds. On NTFS the writing fails by
> > Permission denied error.
>
> Very strange. I guess the only way forward is for you to step with
> Edebug through save-buffer and its subroutines in files.el, and tell
> what fails there and why. Can you do that? (Since this works on
> FAT32, I suspect some issue with NT security, although 24.5 also used
> ACLs...)
>
> Thanks.
>
This bug report was last modified 8 years and 163 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.