emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r111602: w32.c (readlink): Support DB


From: Eli Zaretskii
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r111602: w32.c (readlink): Support DBCS codepages.
Date: Fri, 25 Jan 2013 12:27:16 +0200
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 111602
committer: Eli Zaretskii <address@hidden>
branch nick: trunk
timestamp: Fri 2013-01-25 12:27:16 +0200
message:
  w32.c (readlink): Support DBCS codepages.
modified:
  src/ChangeLog
  src/w32.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2013-01-25 09:39:47 +0000
+++ b/src/ChangeLog     2013-01-25 10:27:16 +0000
@@ -1,5 +1,7 @@
 2013-01-25  Eli Zaretskii  <address@hidden>
 
+       * w32.c (readlink): Support DBCS codepages.
+
        * w32notify.c (Fw32notify_add_watch): Doc fix.  (Bug#13540)
 
 2013-01-25  Dmitry Antipov  <address@hidden>

=== modified file 'src/w32.c'
--- a/src/w32.c 2013-01-25 04:41:39 +0000
+++ b/src/w32.c 2013-01-25 10:27:16 +0000
@@ -4639,18 +4639,34 @@
          else
            {
              size_t size_to_copy = buf_size;
-             BYTE *p = lname;
+             BYTE *p = lname, *p2;
              BYTE *pend = p + lname_len;
+             int dbcs_p = max_filename_mbslen () > 1;
 
              /* Normalize like dostounix_filename does, but we don't
                 want to assume that lname is null-terminated.  */
-             if (*p && p[1] == ':' && *p >= 'A' && *p <= 'Z')
-               *p += 'a' - 'A';
+             if (dbcs_p)
+               p2 = CharNextExA (file_name_codepage, p, 0);
+             else
+               p2 = p + 1;
+             if (*p && *p2 == ':' && *p >= 'A' && *p <= 'Z')
+               {
+                 *p += 'a' - 'A';
+                 p += 2;
+               }
              while (p <= pend)
                {
                  if (*p == '\\')
                    *p = '/';
-                 ++p;
+                 if (dbcs_p)
+                   {
+                     p = CharNextExA (file_name_codepage, p, 0);
+                     /* CharNextExA doesn't advance at null character.  */
+                     if (!*p)
+                       break;
+                   }
+                 else
+                   ++p;
                }
              /* Testing for null-terminated LNAME is paranoia:
                 WideCharToMultiByte should always return a


reply via email to

[Prev in Thread] Current Thread [Next in Thread]