To:
[email protected]
Subject: Patch 6.3a.026 (extra)
Fcc: outbox
From: Bram Moolenaar <
[email protected]>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------
Patch 6.3a.026 (extra, after 6.3a.008)
Problem: Editing files on Windows 98 doesn't work when 'encoding' is
"utf-8" (Antoine Mechelynck)
Warning for missing function prototype.
Solution: For all wide functions check if it failed because it is not
implemented. Use ANSI function declaration for char_to_string().
Files: src/gui_w48.c, src/os_mswin.c, src/os_win32.c
*** ../vim-6.3a.025/src/gui_w48.c Thu May 13 14:36:40 2004
--- src/gui_w48.c Sat May 15 15:11:28 2004
***************
*** 480,489 ****
* Return the length.
*/
static int
! char_to_string(ch, string, slen)
! int ch;
! char_u *string;
! int slen;
{
int len;
int i;
--- 480,486 ----
* Return the length.
*/
static int
! char_to_string(int ch, char_u *string, int slen)
{
int len;
int i;
***************
*** 2711,2724 ****
if (title != NULL && enc_codepage >= 0 && enc_codepage != (int)GetACP())
{
WCHAR *wbuf;
/* Convert the title from 'encoding' to ucs2. */
wbuf = (WCHAR *)enc_to_ucs2(title, NULL);
if (wbuf != NULL)
{
! SetWindowTextW(s_hwnd, wbuf);
vim_free(wbuf);
! return;
}
}
#endif
--- 2708,2724 ----
if (title != NULL && enc_codepage >= 0 && enc_codepage != (int)GetACP())
{
WCHAR *wbuf;
+ int n;
/* Convert the title from 'encoding' to ucs2. */
wbuf = (WCHAR *)enc_to_ucs2(title, NULL);
if (wbuf != NULL)
{
! n = SetWindowTextW(s_hwnd, wbuf);
vim_free(wbuf);
! if (n != 0 || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
! return;
! /* Retry with non-wide function (for Windows 98). */
}
}
#endif
***************
*** 3128,3139 ****
for (i = 0; i < cFiles; ++i)
{
#ifdef FEAT_MBYTE
! DragQueryFileW(hDrop, i, szFile, BUFPATHLEN);
! fnames[i] = ucs2_to_enc(szFile, NULL);
! #else
! DragQueryFile(hDrop, i, szFile, BUFPATHLEN);
! fnames[i] = vim_strsave(szFile);
#endif
}
DragFinish(hDrop);
--- 3128,3141 ----
for (i = 0; i < cFiles; ++i)
{
#ifdef FEAT_MBYTE
! if (DragQueryFileW(hDrop, i, szFile, BUFPATHLEN) > 0)
! fnames[i] = ucs2_to_enc(szFile, NULL);
! else
#endif
+ {
+ DragQueryFile(hDrop, i, szFile, BUFPATHLEN);
+ fnames[i] = vim_strsave(szFile);
+ }
}
DragFinish(hDrop);
*** ../vim-6.3a.025/src/os_mswin.c Fri May 7 10:59:38 2004
--- src/os_mswin.c Sat May 15 15:17:39 2004
***************
*** 460,466 ****
{
n = _wstat(wp, (struct _stat *)stp);
vim_free(wp);
! return n;
}
}
#endif
--- 460,470 ----
{
n = _wstat(wp, (struct _stat *)stp);
vim_free(wp);
! if (n >= 0)
! return n;
! /* Retry with non-wide function (for Windows 98). Can't use
! * GetLastError() here and it's unclear what errno gets set to if
! * the _wstat() fails for missing wide functions. */
}
}
#endif
*** ../vim-6.3a.025/src/os_win32.c Tue May 11 17:54:06 2004
--- src/os_win32.c Sat May 15 15:17:49 2004
***************
*** 4366,4372 ****
vim_free(wn);
wn = NULL;
}
! (void)FindClose(hFile);
}
if (wn == NULL)
#endif
--- 4366,4373 ----
vim_free(wn);
wn = NULL;
}
! else
! (void)FindClose(hFile);
}
if (wn == NULL)
#endif
***************
*** 4469,4475 ****
{
f = _wopen(wn, flags, mode);
vim_free(wn);
! return f;
}
}
--- 4470,4480 ----
{
f = _wopen(wn, flags, mode);
vim_free(wn);
! if (f >= 0)
! return f;
! /* Retry with non-wide function (for Windows 98). Can't use
! * GetLastError() here and it's unclear what errno gets set to if
! * the _wopen() fails for missing wide functions. */
}
}
***************
*** 4483,4501 ****
mch_fopen(char *name, char *mode)
{
WCHAR *wn, *wm;
! FILE *f;
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
wn = enc_to_ucs2(name, NULL);
wm = enc_to_ucs2(mode, NULL);
if (wn != NULL && wm != NULL)
- {
f = _wfopen(wn, wm);
- return f;
- }
vim_free(wn);
vim_free(wm);
}
return fopen(name, mode);
--- 4488,4508 ----
mch_fopen(char *name, char *mode)
{
WCHAR *wn, *wm;
! FILE *f = NULL;
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
wn = enc_to_ucs2(name, NULL);
wm = enc_to_ucs2(mode, NULL);
if (wn != NULL && wm != NULL)
f = _wfopen(wn, wm);
vim_free(wn);
vim_free(wm);
+ if (f != NULL)
+ return f;
+ /* Retry with non-wide function (for Windows 98). Can't use
+ * GetLastError() here and it's unclear what errno gets set to if
+ * the _wfopen() fails for missing wide functions. */
}
return fopen(name, mode);
*** ../vim-6.3a.025/src/version.c Sat May 15 12:24:16 2004
--- src/version.c Sat May 15 17:07:50 2004
***************
*** 643,644 ****
--- 643,646 ----
{ /* Add new patch number below this line */
+ /**/
+ 26,
/**/
--
GUARD #1: Where'd you get the coconut?
ARTHUR: We found them.
GUARD #1: Found them? In Mercea? The coconut's tropical!
ARTHUR: What do you mean?
GUARD #1: Well, this is a temperate zone.
The Quest for the Holy Grail (Monty Python)
/// Bram Moolenaar --
[email protected] --
http://www.Moolenaar.net \\\
/// Sponsor Vim, vote for features --
http://www.Vim.org/sponsor/ \\\
\\\ Project leader for A-A-P --
http://www.A-A-P.org ///
\\\ Buy at Amazon and help AIDS victims --
http://ICCF.nl/click1.html ///