[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/emacs-24 r111198: Support MS-Windows file n
From: |
Eli Zaretskii |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/emacs-24 r111198: Support MS-Windows file names encoded in multibyte encodings. |
Date: |
Fri, 25 Jan 2013 16:34:26 +0200 |
User-agent: |
Bazaar (2.5.0) |
------------------------------------------------------------
revno: 111198
committer: Eli Zaretskii <address@hidden>
branch nick: emacs-24
timestamp: Fri 2013-01-25 16:34:26 +0200
message:
Support MS-Windows file names encoded in multibyte encodings.
src/w32.c (w32_get_long_filename, init_environment, readlink):
Support file names encoded in DBCS codepages.
modified:
src/ChangeLog
src/w32.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2013-01-23 16:11:04 +0000
+++ b/src/ChangeLog 2013-01-25 14:34:26 +0000
@@ -1,3 +1,8 @@
+2013-01-25 Eli Zaretskii <address@hidden>
+
+ * w32.c (w32_get_long_filename, init_environment, readlink):
+ Support file names encoded in DBCS codepages.
+
2013-01-23 Eli Zaretskii <address@hidden>
* w32.c (max_filename_mbslen): New function.
=== modified file 'src/w32.c'
--- a/src/w32.c 2013-01-23 16:11:04 +0000
+++ b/src/w32.c 2013-01-25 14:34:26 +0000
@@ -37,7 +37,7 @@
/* must include CRT headers *before* config.h */
#include <config.h>
-#include <mbstring.h> /* for _mbspbrk and _mbslwr */
+#include <mbstring.h> /* for _mbspbrk, _mbslwr, _mbsrchr, ... */
#undef access
#undef chdir
@@ -1573,7 +1573,7 @@
while (p != NULL && *p)
{
q = p;
- p = strchr (q, '\\');
+ p = _mbschr (q, '\\');
if (p) *p = '\0';
len = get_long_basename (full, o, size);
if (len > 0)
@@ -1800,16 +1800,16 @@
if (!GetModuleFileName (NULL, modname, MAX_PATH))
emacs_abort ();
- if ((p = strrchr (modname, '\\')) == NULL)
+ if ((p = _mbsrchr (modname, '\\')) == NULL)
emacs_abort ();
*p = 0;
- if ((p = strrchr (modname, '\\')) && xstrcasecmp (p, "\\bin") == 0)
+ if ((p = _mbsrchr (modname, '\\')) && xstrcasecmp (p, "\\bin") == 0)
{
char buf[SET_ENV_BUF_SIZE];
*p = 0;
- for (p = modname; *p; p++)
+ for (p = modname; *p; p = CharNext (p))
if (*p == '\\') *p = '/';
_snprintf (buf, sizeof (buf)-1, "emacs_dir=%s", modname);
@@ -1824,17 +1824,17 @@
|| xstrcasecmp (p, "\\AMD64") == 0))
{
*p = 0;
- p = strrchr (modname, '\\');
+ p = _mbsrchr (modname, '\\');
if (p != NULL)
{
*p = 0;
- p = strrchr (modname, '\\');
+ p = _mbsrchr (modname, '\\');
if (p && xstrcasecmp (p, "\\src") == 0)
{
char buf[SET_ENV_BUF_SIZE];
*p = 0;
- for (p = modname; *p; p++)
+ for (p = modname; *p; p = CharNext (p))
if (*p == '\\') *p = '/';
_snprintf (buf, sizeof (buf)-1, "emacs_dir=%s", modname);
@@ -4340,18 +4340,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 (w32_ansi_code_page, 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 (w32_ansi_code_page, 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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/emacs-24 r111198: Support MS-Windows file names encoded in multibyte encodings.,
Eli Zaretskii <=