* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
@ 2013-03-08 17:18 Ken Brown
2013-03-08 19:42 ` Eli Zaretskii
0 siblings, 1 reply; 18+ messages in thread
From: Ken Brown @ 2013-03-08 17:18 UTC (permalink / raw)
To: 13907
Create a file "/tmp/Ü.txt". (In case my mailer mangles this, that's
<U-umlaut>.txt.) Now open Windows Explorer and drag this file into an
emacs frame. This results in the error message
dnd-open-local-file: Can not read file:///tmp/%20.txt
I think the problem occurs early in w32-handle-dropped-file (defined in
lisp/term/w32-win.el). That function starts with
(let ((f (if (eq system-type 'cygwin)
(cygwin-convert-file-name-from-windows file-name t)
At this point f should have the value "/tmp/Ü.txt". If I continue
manually carrying out the code in w32-handle-dropped-file as though f
had that value, everything is fine, as shown below. So
cygwin-convert-file-name-from-windows must be doing something wrong.
Here's a session in the *scratch* buffer, imitating what
w32-handle-dropped-file would do starting from the correct value of f:
(setq f "/tmp/Ü.txt")
"/tmp/Ü.txt"
(setq coding (or file-name-coding-system
default-file-name-coding-system))
utf-8-unix
(setq file-name
(mapconcat 'url-hexify-string
(split-string (encode-coding-string f coding)
"/")
"/"))
"/tmp/%C3%9C.txt"
(setq uri (concat
(if (eq system-type 'cygwin)
"file://"
"file:")
file-name))
"file:///tmp/%C3%9C.txt"
(dnd-get-local-file-name uri t)
"/tmp/Ü.txt"
In GNU Emacs 24.3.50.4 (i686-pc-cygwin)
of 2013-03-06 on fiona
Bzr revision: 111954 dmantipov@yandex.ru-20130306112630-ooq2zc4oq664z5zc
Windowing system distributor `Microsoft Corp.', version 6.1.7601
Configured using:
`configure --with-w32 CFLAGS=-g3 -O0'
Important settings:
value of $LANG: en_US.UTF-8
locale-coding-system: utf-8-unix
default enable-multibyte-characters: t
^ permalink raw reply [flat|nested] 18+ messages in thread
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
2013-03-08 17:18 bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name Ken Brown
@ 2013-03-08 19:42 ` Eli Zaretskii
2013-03-08 20:06 ` Eli Zaretskii
2013-03-08 20:33 ` Eli Zaretskii
0 siblings, 2 replies; 18+ messages in thread
From: Eli Zaretskii @ 2013-03-08 19:42 UTC (permalink / raw)
To: Ken Brown; +Cc: 13907
> Date: Fri, 08 Mar 2013 12:18:05 -0500
> From: Ken Brown <kbrown@cornell.edu>
>
> Create a file "/tmp/Ü.txt". (In case my mailer mangles this, that's
> <U-umlaut>.txt.) Now open Windows Explorer and drag this file into an
> emacs frame. This results in the error message
>
> dnd-open-local-file: Can not read file:///tmp/%20.txt
>
> I think the problem occurs early in w32-handle-dropped-file (defined in
> lisp/term/w32-win.el). That function starts with
>
> (let ((f (if (eq system-type 'cygwin)
> (cygwin-convert-file-name-from-windows file-name t)
>
> At this point f should have the value "/tmp/Ü.txt". If I continue
> manually carrying out the code in w32-handle-dropped-file as though f
> had that value, everything is fine, as shown below. So
> cygwin-convert-file-name-from-windows must be doing something wrong.
What do you get from cygwin-convert-file-name-from-windows with this
file name?
Also, what is the system codepage on this system?
^ permalink raw reply [flat|nested] 18+ messages in thread
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
2013-03-08 19:42 ` Eli Zaretskii
@ 2013-03-08 20:06 ` Eli Zaretskii
2013-03-08 20:33 ` Eli Zaretskii
1 sibling, 0 replies; 18+ messages in thread
From: Eli Zaretskii @ 2013-03-08 20:06 UTC (permalink / raw)
To: kbrown; +Cc: 13907
> Date: Fri, 08 Mar 2013 21:42:56 +0200
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: 13907@debbugs.gnu.org
>
> > Date: Fri, 08 Mar 2013 12:18:05 -0500
> > From: Ken Brown <kbrown@cornell.edu>
> >
> > Create a file "/tmp/Ü.txt". (In case my mailer mangles this, that's
> > <U-umlaut>.txt.) Now open Windows Explorer and drag this file into an
> > emacs frame. This results in the error message
> >
> > dnd-open-local-file: Can not read file:///tmp/%20.txt
> >
> > I think the problem occurs early in w32-handle-dropped-file (defined in
> > lisp/term/w32-win.el). That function starts with
> >
> > (let ((f (if (eq system-type 'cygwin)
> > (cygwin-convert-file-name-from-windows file-name t)
> >
> > At this point f should have the value "/tmp/Ü.txt". If I continue
> > manually carrying out the code in w32-handle-dropped-file as though f
> > had that value, everything is fine, as shown below. So
> > cygwin-convert-file-name-from-windows must be doing something wrong.
>
> What do you get from cygwin-convert-file-name-from-windows with this
> file name?
>
> Also, what is the system codepage on this system?
In addition, please describe how you created the "/tmp/Ü.txt" file --
what command did you use?
^ permalink raw reply [flat|nested] 18+ messages in thread
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
2013-03-08 19:42 ` Eli Zaretskii
2013-03-08 20:06 ` Eli Zaretskii
@ 2013-03-08 20:33 ` Eli Zaretskii
2013-03-08 20:53 ` Eli Zaretskii
1 sibling, 1 reply; 18+ messages in thread
From: Eli Zaretskii @ 2013-03-08 20:33 UTC (permalink / raw)
To: kbrown; +Cc: 13907
> Date: Fri, 08 Mar 2013 21:42:56 +0200
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: 13907@debbugs.gnu.org
>
> > Date: Fri, 08 Mar 2013 12:18:05 -0500
> > From: Ken Brown <kbrown@cornell.edu>
> >
> > Create a file "/tmp/Ü.txt". (In case my mailer mangles this, that's
> > <U-umlaut>.txt.) Now open Windows Explorer and drag this file into an
> > emacs frame. This results in the error message
> >
> > dnd-open-local-file: Can not read file:///tmp/%20.txt
> >
> > I think the problem occurs early in w32-handle-dropped-file (defined in
> > lisp/term/w32-win.el). That function starts with
> >
> > (let ((f (if (eq system-type 'cygwin)
> > (cygwin-convert-file-name-from-windows file-name t)
> >
> > At this point f should have the value "/tmp/Ü.txt". If I continue
> > manually carrying out the code in w32-handle-dropped-file as though f
> > had that value, everything is fine, as shown below. So
> > cygwin-convert-file-name-from-windows must be doing something wrong.
>
> What do you get from cygwin-convert-file-name-from-windows with this
> file name?
>
> Also, what is the system codepage on this system?
And one more question: what is the value of file-name _before_ it is
passed to cygwin-convert-file-name-from-windows? Does it perhaps
already have the U-umlaut replaced by a blank?
^ permalink raw reply [flat|nested] 18+ messages in thread
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
2013-03-08 20:33 ` Eli Zaretskii
@ 2013-03-08 20:53 ` Eli Zaretskii
2013-03-08 21:03 ` Ken Brown
2013-03-08 21:25 ` Daniel Colascione
0 siblings, 2 replies; 18+ messages in thread
From: Eli Zaretskii @ 2013-03-08 20:53 UTC (permalink / raw)
To: Daniel Colascione; +Cc: 13907
> Date: Fri, 08 Mar 2013 22:33:07 +0200
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: 13907@debbugs.gnu.org
>
> And one more question: what is the value of file-name _before_ it is
> passed to cygwin-convert-file-name-from-windows? Does it perhaps
> already have the U-umlaut replaced by a blank?
I think the problem is on the C level, not on the Lisp level. Take a
look at w32term.c:construct_drag_n_drop -- it uses ANSI version of
DragQueryFile to get the file name, then decodes it by DECODE_FILE.
But DECODE_FILE uses UTF-8 in the cygw32 build, so this is
inappropriate for decoding file names that come from Windows APIs.
Instead, in the cygw32 build, construct_drag_n_drop should use
DragQueryFileW and convert the file name to the internal Emacs
representation using from_unicode.
^ permalink raw reply [flat|nested] 18+ messages in thread
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
2013-03-08 20:53 ` Eli Zaretskii
@ 2013-03-08 21:03 ` Ken Brown
2013-03-09 8:09 ` Eli Zaretskii
2013-03-08 21:25 ` Daniel Colascione
1 sibling, 1 reply; 18+ messages in thread
From: Ken Brown @ 2013-03-08 21:03 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 13907
On 3/8/2013 3:53 PM, Eli Zaretskii wrote:
>> Date: Fri, 08 Mar 2013 22:33:07 +0200
>> From: Eli Zaretskii <eliz@gnu.org>
>> Cc: 13907@debbugs.gnu.org
>>
>> And one more question: what is the value of file-name _before_ it is
>> passed to cygwin-convert-file-name-from-windows? Does it perhaps
>> already have the U-umlaut replaced by a blank?
>
> I think the problem is on the C level, not on the Lisp level. Take a
> look at w32term.c:construct_drag_n_drop -- it uses ANSI version of
> DragQueryFile to get the file name, then decodes it by DECODE_FILE.
> But DECODE_FILE uses UTF-8 in the cygw32 build, so this is
> inappropriate for decoding file names that come from Windows APIs.
>
> Instead, in the cygw32 build, construct_drag_n_drop should use
> DragQueryFileW and convert the file name to the internal Emacs
> representation using from_unicode.
Thanks! You solved it while I was trying to get the answers to your
questions. For the record, here's what happens in my example:
The value of file-name that is passed to
cygwin-convert-file-name-from-windows is "C:\\cygwin\\tmp\\\334.txt".
The converted file name is then "/tmp/ .txt".
I'll leave it to Daniel to fix this, since it's his code.
Thanks again, Eli.
Ken
^ permalink raw reply [flat|nested] 18+ messages in thread
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
2013-03-08 20:53 ` Eli Zaretskii
2013-03-08 21:03 ` Ken Brown
@ 2013-03-08 21:25 ` Daniel Colascione
2013-03-09 3:03 ` Daniel Colascione
1 sibling, 1 reply; 18+ messages in thread
From: Daniel Colascione @ 2013-03-08 21:25 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 13907
[-- Attachment #1: Type: text/plain, Size: 1048 bytes --]
On 3/8/2013 12:53 PM, Eli Zaretskii wrote:
>> Date: Fri, 08 Mar 2013 22:33:07 +0200
>> From: Eli Zaretskii <eliz@gnu.org>
>> Cc: 13907@debbugs.gnu.org
>>
>> And one more question: what is the value of file-name _before_ it is
>> passed to cygwin-convert-file-name-from-windows? Does it perhaps
>> already have the U-umlaut replaced by a blank?
>
> I think the problem is on the C level, not on the Lisp level. Take a
> look at w32term.c:construct_drag_n_drop -- it uses ANSI version of
> DragQueryFile to get the file name, then decodes it by DECODE_FILE.
> But DECODE_FILE uses UTF-8 in the cygw32 build, so this is
> inappropriate for decoding file names that come from Windows APIs.
>
> Instead, in the cygw32 build, construct_drag_n_drop should use
> DragQueryFileW and convert the file name to the internal Emacs
> representation using from_unicode.
>
Thanks for finding that! I've been swamped this week, and I haven't been able to
do any investigation. I'll see whether I can come up with a fix this weekend.
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 260 bytes --]
^ permalink raw reply [flat|nested] 18+ messages in thread
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
2013-03-08 21:25 ` Daniel Colascione
@ 2013-03-09 3:03 ` Daniel Colascione
2013-03-09 3:03 ` Daniel Colascione
` (2 more replies)
0 siblings, 3 replies; 18+ messages in thread
From: Daniel Colascione @ 2013-03-09 3:03 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 13907
[-- Attachment #1: Type: text/plain, Size: 2184 bytes --]
On 3/8/2013 1:25 PM, Daniel Colascione wrote:
> On 3/8/2013 12:53 PM, Eli Zaretskii wrote:
>>> Date: Fri, 08 Mar 2013 22:33:07 +0200
>>> From: Eli Zaretskii <eliz@gnu.org>
>>> Cc: 13907@debbugs.gnu.org
>>>
>>> And one more question: what is the value of file-name _before_ it is
>>> passed to cygwin-convert-file-name-from-windows? Does it perhaps
>>> already have the U-umlaut replaced by a blank?
>>
>> I think the problem is on the C level, not on the Lisp level. Take a
>> look at w32term.c:construct_drag_n_drop -- it uses ANSI version of
>> DragQueryFile to get the file name, then decodes it by DECODE_FILE.
>> But DECODE_FILE uses UTF-8 in the cygw32 build, so this is
>> inappropriate for decoding file names that come from Windows APIs.
>>
>> Instead, in the cygw32 build, construct_drag_n_drop should use
>> DragQueryFileW and convert the file name to the internal Emacs
>> representation using from_unicode.
>>
>
>
> Thanks for finding that! I've been swamped this week, and I haven't been able to
> do any investigation. I'll see whether I can come up with a fix this weekend.
>
The patch below resolves the issue for me. Assuming it's acceptable, where
should I install it?
~/edev/trunk
$ bzr diff
=== modified file 'src/w32term.c'
--- src/w32term.c 2013-02-16 13:59:37 +0000
+++ src/w32term.c 2013-03-09 03:02:10 +0000
@@ -3186,12 +3186,27 @@
for (i = 0; i < num_files; i++)
{
+#ifdef NTGUI_UNICODE
+ len = DragQueryFileW (hdrop, i, NULL, 0);
+ if (len <= 0)
+ continue;
+
+ name = alloca ((len + 1) * sizeof (wchar_t));
+ DragQueryFileW (hdrop, i, (wchar_t *) name, len + 1);
+ files = Fcons (
+ from_unicode (make_unibyte_string(
+ name,
+ 1 + sizeof (wchar_t) * len)),
+ files);
+#else
len = DragQueryFile (hdrop, i, NULL, 0);
if (len <= 0)
continue;
+
name = alloca (len + 1);
DragQueryFile (hdrop, i, name, len + 1);
files = Fcons (DECODE_FILE (build_string (name)), files);
+#endif /* NTGUI_UNICODE */
}
DragFinish (hdrop);
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 260 bytes --]
^ permalink raw reply [flat|nested] 18+ messages in thread
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
2013-03-09 3:03 ` Daniel Colascione
@ 2013-03-09 3:03 ` Daniel Colascione
2013-03-09 8:32 ` Eli Zaretskii
2013-03-10 23:00 ` Daniel Colascione
2013-03-09 12:16 ` Ken Brown
2013-03-09 19:31 ` Glenn Morris
2 siblings, 2 replies; 18+ messages in thread
From: Daniel Colascione @ 2013-03-09 3:03 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 13907
[-- Attachment #1: Type: text/plain, Size: 2445 bytes --]
On 3/8/2013 7:03 PM, Daniel Colascione wrote:
> On 3/8/2013 1:25 PM, Daniel Colascione wrote:
>> On 3/8/2013 12:53 PM, Eli Zaretskii wrote:
>>>> Date: Fri, 08 Mar 2013 22:33:07 +0200
>>>> From: Eli Zaretskii <eliz@gnu.org>
>>>> Cc: 13907@debbugs.gnu.org
>>>>
>>>> And one more question: what is the value of file-name _before_ it is
>>>> passed to cygwin-convert-file-name-from-windows? Does it perhaps
>>>> already have the U-umlaut replaced by a blank?
>>>
>>> I think the problem is on the C level, not on the Lisp level. Take a
>>> look at w32term.c:construct_drag_n_drop -- it uses ANSI version of
>>> DragQueryFile to get the file name, then decodes it by DECODE_FILE.
>>> But DECODE_FILE uses UTF-8 in the cygw32 build, so this is
>>> inappropriate for decoding file names that come from Windows APIs.
>>>
>>> Instead, in the cygw32 build, construct_drag_n_drop should use
>>> DragQueryFileW and convert the file name to the internal Emacs
>>> representation using from_unicode.
>>>
>>
>>
>> Thanks for finding that! I've been swamped this week, and I haven't been able to
>> do any investigation. I'll see whether I can come up with a fix this weekend.
>>
>
> The patch below resolves the issue for me. Assuming it's acceptable, where
> should I install it?
>
> ~/edev/trunk
> $ bzr diff
> === modified file 'src/w32term.c'
> --- src/w32term.c 2013-02-16 13:59:37 +0000
> +++ src/w32term.c 2013-03-09 03:02:10 +0000
> @@ -3186,12 +3186,27 @@
>
> for (i = 0; i < num_files; i++)
> {
> +#ifdef NTGUI_UNICODE
> + len = DragQueryFileW (hdrop, i, NULL, 0);
> + if (len <= 0)
> + continue;
> +
> + name = alloca ((len + 1) * sizeof (wchar_t));
> + DragQueryFileW (hdrop, i, (wchar_t *) name, len + 1);
> + files = Fcons (
> + from_unicode (make_unibyte_string(
> + name,
> + 1 + sizeof (wchar_t) * len)),
> + files);
> +#else
> len = DragQueryFile (hdrop, i, NULL, 0);
> if (len <= 0)
> continue;
> +
> name = alloca (len + 1);
> DragQueryFile (hdrop, i, name, len + 1);
> files = Fcons (DECODE_FILE (build_string (name)), files);
> +#endif /* NTGUI_UNICODE */
> }
>
> DragFinish (hdrop);
By the way: shouldn't we have an unwind handler here so that we call DragFinish
even if our memory allocation fails?
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 260 bytes --]
^ permalink raw reply [flat|nested] 18+ messages in thread
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
2013-03-08 21:03 ` Ken Brown
@ 2013-03-09 8:09 ` Eli Zaretskii
0 siblings, 0 replies; 18+ messages in thread
From: Eli Zaretskii @ 2013-03-09 8:09 UTC (permalink / raw)
To: Ken Brown; +Cc: 13907
> Date: Fri, 08 Mar 2013 16:03:25 -0500
> From: Ken Brown <kbrown@cornell.edu>
> CC: Daniel Colascione <dancol@dancol.org>, 13907@debbugs.gnu.org
>
> The value of file-name that is passed to
> cygwin-convert-file-name-from-windows is "C:\\cygwin\\tmp\\\334.txt".
> The converted file name is then "/tmp/ .txt".
The appearance of a blank (or a question mark) instead of a character
is usually a tell-tale sign of a botched character conversion.
For example, when I drag-n-drop into a native w32 Emacs a file name
that includes characters not from the system codepage, I get this:
dnd-open-local-file: Can not read file:D%3A/gnu/ispell-3.3.02.w32/dictionaries/Tatar-Rus-%3Fngliz%20s%3Fzlege.htm
(%3F is the question mark.)
^ permalink raw reply [flat|nested] 18+ messages in thread
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
2013-03-09 3:03 ` Daniel Colascione
@ 2013-03-09 8:32 ` Eli Zaretskii
2013-03-09 8:37 ` Daniel Colascione
2013-03-09 8:37 ` Daniel Colascione
2013-03-10 23:00 ` Daniel Colascione
1 sibling, 2 replies; 18+ messages in thread
From: Eli Zaretskii @ 2013-03-09 8:32 UTC (permalink / raw)
To: Daniel Colascione; +Cc: 13907
> Date: Fri, 08 Mar 2013 19:03:58 -0800
> From: Daniel Colascione <dancol@dancol.org>
> CC: 13907@debbugs.gnu.org
>
> By the way: shouldn't we have an unwind handler here so that we call DragFinish
> even if our memory allocation fails?
What memory allocation? If you mean 'alloca', its failure is
generally a fatal exception, which means we are no longer in a
position to call anything ;-)
^ permalink raw reply [flat|nested] 18+ messages in thread
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
2013-03-09 8:32 ` Eli Zaretskii
@ 2013-03-09 8:37 ` Daniel Colascione
2013-03-09 8:51 ` Eli Zaretskii
2013-03-09 8:37 ` Daniel Colascione
1 sibling, 1 reply; 18+ messages in thread
From: Daniel Colascione @ 2013-03-09 8:37 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 13907
[-- Attachment #1: Type: text/plain, Size: 613 bytes --]
On 3/9/13 12:32 AM, Eli Zaretskii wrote:
>> Date: Fri, 08 Mar 2013 19:03:58 -0800
>> From: Daniel Colascione <dancol@dancol.org>
>> CC: 13907@debbugs.gnu.org
>>
>> By the way: shouldn't we have an unwind handler here so that we call DragFinish
>> even if our memory allocation fails?
>
> What memory allocation? If you mean 'alloca', its failure is
> generally a fatal exception, which means we are no longer in a
> position to call anything ;-)
>
We're consing, aren't we? If we can't cons, even after gc, we
longjmp out in memory_full, right? Granted, I haven't seen that
happen in years.
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 235 bytes --]
^ permalink raw reply [flat|nested] 18+ messages in thread
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
2013-03-09 8:32 ` Eli Zaretskii
2013-03-09 8:37 ` Daniel Colascione
@ 2013-03-09 8:37 ` Daniel Colascione
1 sibling, 0 replies; 18+ messages in thread
From: Daniel Colascione @ 2013-03-09 8:37 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 13907
[-- Attachment #1: Type: text/plain, Size: 613 bytes --]
On 3/9/13 12:32 AM, Eli Zaretskii wrote:
>> Date: Fri, 08 Mar 2013 19:03:58 -0800
>> From: Daniel Colascione <dancol@dancol.org>
>> CC: 13907@debbugs.gnu.org
>>
>> By the way: shouldn't we have an unwind handler here so that we call DragFinish
>> even if our memory allocation fails?
>
> What memory allocation? If you mean 'alloca', its failure is
> generally a fatal exception, which means we are no longer in a
> position to call anything ;-)
>
We're consing, aren't we? If we can't cons, even after gc, we
longjmp out in memory_full, right? Granted, I haven't seen that
happen in years.
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 235 bytes --]
^ permalink raw reply [flat|nested] 18+ messages in thread
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
2013-03-09 8:37 ` Daniel Colascione
@ 2013-03-09 8:51 ` Eli Zaretskii
0 siblings, 0 replies; 18+ messages in thread
From: Eli Zaretskii @ 2013-03-09 8:51 UTC (permalink / raw)
To: Daniel Colascione; +Cc: 13907
> Date: Sat, 09 Mar 2013 00:37:40 -0800
> From: Daniel Colascione <dancol@dancol.org>
> CC: 13907@debbugs.gnu.org
>
> On 3/9/13 12:32 AM, Eli Zaretskii wrote:
> >> Date: Fri, 08 Mar 2013 19:03:58 -0800
> >> From: Daniel Colascione <dancol@dancol.org>
> >> CC: 13907@debbugs.gnu.org
> >>
> >> By the way: shouldn't we have an unwind handler here so that we call DragFinish
> >> even if our memory allocation fails?
> >
> > What memory allocation? If you mean 'alloca', its failure is
> > generally a fatal exception, which means we are no longer in a
> > position to call anything ;-)
> >
>
> We're consing, aren't we? If we can't cons, even after gc, we
> longjmp out in memory_full, right?
Right.
Well, DragFinish just releases memory, so it's not terribly important
to make sure we call it if we end up in memory_full. But it might be
good for cleaner code, yes.
^ permalink raw reply [flat|nested] 18+ messages in thread
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
2013-03-09 3:03 ` Daniel Colascione
2013-03-09 3:03 ` Daniel Colascione
@ 2013-03-09 12:16 ` Ken Brown
2013-03-09 19:31 ` Glenn Morris
2 siblings, 0 replies; 18+ messages in thread
From: Ken Brown @ 2013-03-09 12:16 UTC (permalink / raw)
To: Daniel Colascione; +Cc: 13907
On 3/8/2013 10:03 PM, Daniel Colascione wrote:
> On 3/8/2013 1:25 PM, Daniel Colascione wrote:
>> On 3/8/2013 12:53 PM, Eli Zaretskii wrote:
>>>> Date: Fri, 08 Mar 2013 22:33:07 +0200
>>>> From: Eli Zaretskii <eliz@gnu.org>
>>>> Cc: 13907@debbugs.gnu.org
>>>>
>>>> And one more question: what is the value of file-name _before_ it is
>>>> passed to cygwin-convert-file-name-from-windows? Does it perhaps
>>>> already have the U-umlaut replaced by a blank?
>>>
>>> I think the problem is on the C level, not on the Lisp level. Take a
>>> look at w32term.c:construct_drag_n_drop -- it uses ANSI version of
>>> DragQueryFile to get the file name, then decodes it by DECODE_FILE.
>>> But DECODE_FILE uses UTF-8 in the cygw32 build, so this is
>>> inappropriate for decoding file names that come from Windows APIs.
>>>
>>> Instead, in the cygw32 build, construct_drag_n_drop should use
>>> DragQueryFileW and convert the file name to the internal Emacs
>>> representation using from_unicode.
>>>
>>
>>
>> Thanks for finding that! I've been swamped this week, and I haven't been able to
>> do any investigation. I'll see whether I can come up with a fix this weekend.
>>
>
> The patch below resolves the issue for me. Assuming it's acceptable, where
> should I install it?
It fixes it for me too. Thanks.
Ken
^ permalink raw reply [flat|nested] 18+ messages in thread
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
2013-03-09 3:03 ` Daniel Colascione
2013-03-09 3:03 ` Daniel Colascione
2013-03-09 12:16 ` Ken Brown
@ 2013-03-09 19:31 ` Glenn Morris
2 siblings, 0 replies; 18+ messages in thread
From: Glenn Morris @ 2013-03-09 19:31 UTC (permalink / raw)
To: Daniel Colascione; +Cc: 13907
Daniel Colascione wrote:
> The patch below resolves the issue for me. Assuming it's acceptable, where
> should I install it?
To trunk, IMO.
^ permalink raw reply [flat|nested] 18+ messages in thread
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
2013-03-09 3:03 ` Daniel Colascione
2013-03-09 8:32 ` Eli Zaretskii
@ 2013-03-10 23:00 ` Daniel Colascione
2013-03-11 9:51 ` Ken Brown
1 sibling, 1 reply; 18+ messages in thread
From: Daniel Colascione @ 2013-03-10 23:00 UTC (permalink / raw)
To: Eli Zaretskii, kbrown; +Cc: 13907
[-- Attachment #1: Type: text/plain, Size: 1632 bytes --]
On 3/8/2013 7:03 PM, Daniel Colascione wrote:
> On 3/8/2013 7:03 PM, Daniel Colascione wrote:
>> On 3/8/2013 1:25 PM, Daniel Colascione wrote:
>>> On 3/8/2013 12:53 PM, Eli Zaretskii wrote:
>>>>> Date: Fri, 08 Mar 2013 22:33:07 +0200
>>>>> From: Eli Zaretskii <eliz@gnu.org>
>>>>> Cc: 13907@debbugs.gnu.org
>>>>>
>>>>> And one more question: what is the value of file-name _before_ it is
>>>>> passed to cygwin-convert-file-name-from-windows? Does it perhaps
>>>>> already have the U-umlaut replaced by a blank?
>>>>
>>>> I think the problem is on the C level, not on the Lisp level. Take a
>>>> look at w32term.c:construct_drag_n_drop -- it uses ANSI version of
>>>> DragQueryFile to get the file name, then decodes it by DECODE_FILE.
>>>> But DECODE_FILE uses UTF-8 in the cygw32 build, so this is
>>>> inappropriate for decoding file names that come from Windows APIs.
>>>>
>>>> Instead, in the cygw32 build, construct_drag_n_drop should use
>>>> DragQueryFileW and convert the file name to the internal Emacs
>>>> representation using from_unicode.
>>>>
>>>
>>>
>>> Thanks for finding that! I've been swamped this week, and I haven't been able to
>>> do any investigation. I'll see whether I can come up with a fix this weekend.
>>>
>>
>> The patch below resolves the issue for me. Assuming it's acceptable, where
>> should I install it?
bzr trunk revision 111999 resolves this bug, the title-bar bug, and a few others
relating to mismatches between the Windows GUI encoding and the Cygwin system
encoding. Ken, it's probably this change that you want to backport to your
Cygwin package.
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 260 bytes --]
^ permalink raw reply [flat|nested] 18+ messages in thread
* bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name
2013-03-10 23:00 ` Daniel Colascione
@ 2013-03-11 9:51 ` Ken Brown
0 siblings, 0 replies; 18+ messages in thread
From: Ken Brown @ 2013-03-11 9:51 UTC (permalink / raw)
To: Daniel Colascione; +Cc: 13907-done
On 3/10/2013 7:00 PM, Daniel Colascione wrote:
> bzr trunk revision 111999 resolves this bug, the title-bar bug, and a few others
> relating to mismatches between the Windows GUI encoding and the Cygwin system
> encoding. Ken, it's probably this change that you want to backport to your
> Cygwin package.
Thanks, Daniel! I'm closing the bug.
Ken
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2013-03-11 9:51 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-08 17:18 bug#13907: 24.3.50; cygw32 build mishandles drag-n-dropped file with non-ASCII characters in name Ken Brown
2013-03-08 19:42 ` Eli Zaretskii
2013-03-08 20:06 ` Eli Zaretskii
2013-03-08 20:33 ` Eli Zaretskii
2013-03-08 20:53 ` Eli Zaretskii
2013-03-08 21:03 ` Ken Brown
2013-03-09 8:09 ` Eli Zaretskii
2013-03-08 21:25 ` Daniel Colascione
2013-03-09 3:03 ` Daniel Colascione
2013-03-09 3:03 ` Daniel Colascione
2013-03-09 8:32 ` Eli Zaretskii
2013-03-09 8:37 ` Daniel Colascione
2013-03-09 8:51 ` Eli Zaretskii
2013-03-09 8:37 ` Daniel Colascione
2013-03-10 23:00 ` Daniel Colascione
2013-03-11 9:51 ` Ken Brown
2013-03-09 12:16 ` Ken Brown
2013-03-09 19:31 ` Glenn Morris
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).