summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.1103
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.1103')
-rw-r--r--data/vim/patches/8.1.11034150
1 files changed, 0 insertions, 4150 deletions
diff --git a/data/vim/patches/8.1.1103 b/data/vim/patches/8.1.1103
deleted file mode 100644
index 7cdc909d0..000000000
--- a/data/vim/patches/8.1.1103
+++ /dev/null
@@ -1,4150 +0,0 @@
-To: vim_dev@googlegroups.com
-Subject: Patch 8.1.1103
-Fcc: outbox
-From: Bram Moolenaar <Bram@moolenaar.net>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 8.1.1103
-Problem: MS-Windows: old API calls are no longer needed.
-Solution: Always use the wide functions. (Ken Takata, closes #4199)
-Files: src/glbl_ime.cpp, src/globals.h, src/gui_w32.c, src/misc1.c,
- src/os_mswin.c, src/os_win32.c, src/vim.h
-
-
-*** ../vim-8.1.1102/src/glbl_ime.cpp 2019-02-17 17:44:36.207875527 +0100
---- src/glbl_ime.cpp 2019-04-02 22:04:17.785655516 +0200
-***************
-*** 133,146 ****
-
- if (pIApp == NULL || pIApp->OnDefWindowProc(hWnd, Msg,
- wParam, lParam, &lResult) != S_OK)
-! {
-! #if defined(MSWIN)
-! if (wide_WindowProc)
-! lResult = DefWindowProcW(hWnd, Msg, wParam, lParam);
-! else
-! #endif
-! lResult = DefWindowProc(hWnd, Msg, wParam, lParam);
-! }
- return lResult;
- }
-
---- 133,139 ----
-
- if (pIApp == NULL || pIApp->OnDefWindowProc(hWnd, Msg,
- wParam, lParam, &lResult) != S_OK)
-! lResult = DefWindowProcW(hWnd, Msg, wParam, lParam);
- return lResult;
- }
-
-*** ../vim-8.1.1102/src/globals.h 2019-03-30 13:53:26.170425120 +0100
---- src/globals.h 2019-04-02 22:04:17.785655516 +0200
-***************
-*** 822,831 ****
- #endif
- EXTERN int has_mbyte INIT(= 0); /* any multi-byte encoding */
-
-- #if defined(MSWIN)
-- EXTERN int wide_WindowProc INIT(= FALSE); /* use wide WindowProc() */
-- #endif
--
- /*
- * To speed up BYTELEN() we fill a table with the byte lengths whenever
- * enc_utf8 or enc_dbcs changes.
---- 822,827 ----
-*** ../vim-8.1.1102/src/gui_w32.c 2019-03-30 18:46:57.352077376 +0100
---- src/gui_w32.c 2019-04-02 22:10:34.450870828 +0200
-***************
-*** 313,324 ****
- static int destroying = FALSE; /* call DestroyWindow() ourselves */
-
- #ifdef MSWIN_FIND_REPLACE
-! static UINT s_findrep_msg = 0; /* set in gui_w[16/32].c */
-! static FINDREPLACE s_findrep_struct;
-! static FINDREPLACEW s_findrep_struct_w;
- static HWND s_findrep_hwnd = NULL;
-! static int s_findrep_is_find; /* TRUE for find dialog, FALSE
-! for find/replace dialog */
- #endif
-
- static HINSTANCE s_hinst = NULL;
---- 313,323 ----
- static int destroying = FALSE; /* call DestroyWindow() ourselves */
-
- #ifdef MSWIN_FIND_REPLACE
-! static UINT s_findrep_msg = 0; // set in gui_w[16/32].c
-! static FINDREPLACEW s_findrep_struct;
- static HWND s_findrep_hwnd = NULL;
-! static int s_findrep_is_find; // TRUE for find dialog, FALSE
-! // for find/replace dialog
- #endif
-
- static HINSTANCE s_hinst = NULL;
-***************
-*** 391,397 ****
- }
- #endif
-
-! /* use of WindowProc depends on wide_WindowProc */
- #define MyWindowProc vim_WindowProc
-
- extern int current_font_height; /* this is in os_mswin.c */
---- 390,396 ----
- }
- #endif
-
-! /* use of WindowProc depends on Global IME */
- #define MyWindowProc vim_WindowProc
-
- extern int current_font_height; /* this is in os_mswin.c */
-***************
-*** 1107,1149 ****
-
- #ifdef MSWIN_FIND_REPLACE
- /*
-- * copy useful data from structure LPFINDREPLACE to structure LPFINDREPLACEW
-- */
-- static void
-- findrep_atow(LPFINDREPLACEW lpfrw, LPFINDREPLACE lpfr)
-- {
-- WCHAR *wp;
--
-- lpfrw->hwndOwner = lpfr->hwndOwner;
-- lpfrw->Flags = lpfr->Flags;
--
-- wp = enc_to_utf16((char_u *)lpfr->lpstrFindWhat, NULL);
-- wcsncpy(lpfrw->lpstrFindWhat, wp, lpfrw->wFindWhatLen - 1);
-- vim_free(wp);
--
-- /* the field "lpstrReplaceWith" doesn't need to be copied */
-- }
--
-- /*
-- * copy useful data from structure LPFINDREPLACEW to structure LPFINDREPLACE
-- */
-- static void
-- findrep_wtoa(LPFINDREPLACE lpfr, LPFINDREPLACEW lpfrw)
-- {
-- char_u *p;
--
-- lpfr->Flags = lpfrw->Flags;
--
-- p = utf16_to_enc((short_u*)lpfrw->lpstrFindWhat, NULL);
-- vim_strncpy((char_u *)lpfr->lpstrFindWhat, p, lpfr->wFindWhatLen - 1);
-- vim_free(p);
--
-- p = utf16_to_enc((short_u*)lpfrw->lpstrReplaceWith, NULL);
-- vim_strncpy((char_u *)lpfr->lpstrReplaceWith, p, lpfr->wReplaceWithLen - 1);
-- vim_free(p);
-- }
--
-- /*
- * Handle a Find/Replace window message.
- */
- static void
---- 1106,1111 ----
-***************
-*** 1152,1162 ****
- int flags = 0;
- int down;
-
-- /* If the OS is Windows NT, and 'encoding' differs from active codepage:
-- * convert text from wide string. */
-- if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-- findrep_wtoa(&s_findrep_struct, &s_findrep_struct_w);
--
- if (s_findrep_struct.Flags & FR_DIALOGTERM)
- /* Give main window the focus back. */
- (void)SetFocus(s_hwnd);
---- 1114,1119 ----
-***************
-*** 1184,1197 ****
-
- if (flags != 0)
- {
- /* Call the generic GUI function to do the actual work. */
- if (s_findrep_struct.Flags & FR_WHOLEWORD)
- flags |= FRD_WHOLE_WORD;
- if (s_findrep_struct.Flags & FR_MATCHCASE)
- flags |= FRD_MATCH_CASE;
- down = (s_findrep_struct.Flags & FR_DOWN) != 0;
-! gui_do_findrepl(flags, (char_u *)s_findrep_struct.lpstrFindWhat,
-! (char_u *)s_findrep_struct.lpstrReplaceWith, down);
- }
- }
- #endif
---- 1141,1160 ----
-
- if (flags != 0)
- {
-+ char_u *p, *q;
-+
- /* Call the generic GUI function to do the actual work. */
- if (s_findrep_struct.Flags & FR_WHOLEWORD)
- flags |= FRD_WHOLE_WORD;
- if (s_findrep_struct.Flags & FR_MATCHCASE)
- flags |= FRD_MATCH_CASE;
- down = (s_findrep_struct.Flags & FR_DOWN) != 0;
-! p = utf16_to_enc(s_findrep_struct.lpstrFindWhat, NULL);
-! q = utf16_to_enc(s_findrep_struct.lpstrReplaceWith, NULL);
-! if (p != NULL && q != NULL)
-! gui_do_findrepl(flags, p, q, down);
-! vim_free(p);
-! vim_free(q);
- }
- }
- #endif
-***************
-*** 1310,1318 ****
- #ifdef GLOBAL_IME
- return global_ime_DefWindowProc(hwnd, message, wParam, lParam);
- #else
-! if (wide_WindowProc)
-! return DefWindowProcW(hwnd, message, wParam, lParam);
-! return DefWindowProc(hwnd, message, wParam, lParam);
- #endif
- }
-
---- 1273,1279 ----
- #ifdef GLOBAL_IME
- return global_ime_DefWindowProc(hwnd, message, wParam, lParam);
- #else
-! return DefWindowProcW(hwnd, message, wParam, lParam);
- #endif
- }
-
-***************
-*** 2332,2352 ****
- int n;
- int wlen = len;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! /* 'encoding' differs from active codepage: convert text and use wide
-! * function */
-! wstr = enc_to_utf16(str, &wlen);
-! if (wstr != NULL)
-! {
-! n = GetTextExtentPointW(hdc, wstr, wlen, &size);
-! vim_free(wstr);
-! if (n)
-! return size.cx;
-! }
-! }
-
-! return GetTextWidth(hdc, str, len);
- }
-
- static void get_work_area(RECT *spi_rect);
---- 2293,2307 ----
- int n;
- int wlen = len;
-
-! wstr = enc_to_utf16(str, &wlen);
-! if (wstr == NULL)
-! return 0;
-
-! n = GetTextExtentPointW(hdc, wstr, wlen, &size);
-! vim_free(wstr);
-! if (n)
-! return size.cx;
-! return 0;
- }
-
- static void get_work_area(RECT *spi_rect);
-***************
-*** 2423,2441 ****
- if (showit)
- {
- # ifndef TB_SETUNICODEFORMAT
-! /* For older compilers. We assume this never changes. */
- # define TB_SETUNICODEFORMAT 0x2005
- # endif
-! /* Enable/disable unicode support */
-! int uu = (enc_codepage >= 0 && (int)GetACP() != enc_codepage);
-! SendMessage(s_toolbarhwnd, TB_SETUNICODEFORMAT, (WPARAM)uu, (LPARAM)0);
- ShowWindow(s_toolbarhwnd, SW_SHOW);
- }
- else
- ShowWindow(s_toolbarhwnd, SW_HIDE);
- }
-
-! /* Then number of bitmaps is fixed. Exit is missing! */
- #define TOOLBAR_BITMAP_COUNT 31
-
- #endif
---- 2378,2396 ----
- if (showit)
- {
- # ifndef TB_SETUNICODEFORMAT
-! // For older compilers. We assume this never changes.
- # define TB_SETUNICODEFORMAT 0x2005
- # endif
-! // Enable unicode support
-! SendMessage(s_toolbarhwnd, TB_SETUNICODEFORMAT, (WPARAM)TRUE,
-! (LPARAM)0);
- ShowWindow(s_toolbarhwnd, SW_SHOW);
- }
- else
- ShowWindow(s_toolbarhwnd, SW_HIDE);
- }
-
-! /* The number of bitmaps is fixed. Exit is missing! */
- #define TOOLBAR_BITMAP_COUNT 31
-
- #endif
-***************
-*** 2444,2483 ****
- static void
- add_tabline_popup_menu_entry(HMENU pmenu, UINT item_id, char_u *item_text)
- {
-! WCHAR *wn = NULL;
-!
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! /* 'encoding' differs from active codepage: convert menu name
-! * and use wide function */
-! wn = enc_to_utf16(item_text, NULL);
-! if (wn != NULL)
-! {
-! MENUITEMINFOW infow;
-!
-! infow.cbSize = sizeof(infow);
-! infow.fMask = MIIM_TYPE | MIIM_ID;
-! infow.wID = item_id;
-! infow.fType = MFT_STRING;
-! infow.dwTypeData = wn;
-! infow.cch = (UINT)wcslen(wn);
-! InsertMenuItemW(pmenu, item_id, FALSE, &infow);
-! vim_free(wn);
-! }
-! }
-
- if (wn == NULL)
-! {
-! MENUITEMINFO info;
-
-! info.cbSize = sizeof(info);
-! info.fMask = MIIM_TYPE | MIIM_ID;
-! info.wID = item_id;
-! info.fType = MFT_STRING;
-! info.dwTypeData = (LPTSTR)item_text;
-! info.cch = (UINT)STRLEN(item_text);
-! InsertMenuItem(pmenu, item_id, FALSE, &info);
-! }
- }
-
- static void
---- 2399,2419 ----
- static void
- add_tabline_popup_menu_entry(HMENU pmenu, UINT item_id, char_u *item_text)
- {
-! WCHAR *wn;
-! MENUITEMINFOW infow;
-
-+ wn = enc_to_utf16(item_text, NULL);
- if (wn == NULL)
-! return;
-
-! infow.cbSize = sizeof(infow);
-! infow.fMask = MIIM_TYPE | MIIM_ID;
-! infow.wID = item_id;
-! infow.fType = MFT_STRING;
-! infow.dwTypeData = wn;
-! infow.cch = (UINT)wcslen(wn);
-! InsertMenuItemW(pmenu, item_id, FALSE, &infow);
-! vim_free(wn);
- }
-
- static void
-***************
-*** 2573,2580 ****
- int nr = 0;
- int curtabidx = 0;
- int tabadded = 0;
-- static int use_unicode = FALSE;
-- int uu;
- WCHAR *wstr = NULL;
-
- if (s_tabhwnd == NULL)
---- 2509,2514 ----
-***************
-*** 2584,2596 ****
- /* For older compilers. We assume this never changes. */
- # define CCM_SETUNICODEFORMAT 0x2005
- #endif
-! uu = (enc_codepage >= 0 && (int)GetACP() != enc_codepage);
-! if (uu != use_unicode)
-! {
-! /* Enable/disable unicode support */
-! SendMessage(s_tabhwnd, CCM_SETUNICODEFORMAT, (WPARAM)uu, (LPARAM)0);
-! use_unicode = uu;
-! }
-
- tie.mask = TCIF_TEXT;
- tie.iImage = -1;
---- 2518,2525 ----
- /* For older compilers. We assume this never changes. */
- # define CCM_SETUNICODEFORMAT 0x2005
- #endif
-! // Enable unicode support
-! SendMessage(s_tabhwnd, CCM_SETUNICODEFORMAT, (WPARAM)TRUE, (LPARAM)0);
-
- tie.mask = TCIF_TEXT;
- tie.iImage = -1;
-***************
-*** 2614,2637 ****
-
- get_tabline_label(tp, FALSE);
- tie.pszText = (LPSTR)NameBuff;
-! wstr = NULL;
-! if (use_unicode)
- {
-! /* Need to go through Unicode. */
-! wstr = enc_to_utf16(NameBuff, NULL);
-! if (wstr != NULL)
-! {
-! TCITEMW tiw;
-
-! tiw.mask = TCIF_TEXT;
-! tiw.iImage = -1;
-! tiw.pszText = wstr;
-! SendMessage(s_tabhwnd, TCM_SETITEMW, (WPARAM)nr, (LPARAM)&tiw);
-! vim_free(wstr);
-! }
- }
-- if (wstr == NULL)
-- TabCtrl_SetItem(s_tabhwnd, nr, &tie);
- }
-
- /* Remove any old labels. */
---- 2543,2560 ----
-
- get_tabline_label(tp, FALSE);
- tie.pszText = (LPSTR)NameBuff;
-!
-! wstr = enc_to_utf16(NameBuff, NULL);
-! if (wstr != NULL)
- {
-! TCITEMW tiw;
-
-! tiw.mask = TCIF_TEXT;
-! tiw.iImage = -1;
-! tiw.pszText = wstr;
-! SendMessage(s_tabhwnd, TCM_SETITEMW, (WPARAM)nr, (LPARAM)&tiw);
-! vim_free(wstr);
- }
- }
-
- /* Remove any old labels. */
-***************
-*** 2720,2727 ****
- if (wword)
- s_findrep_struct.Flags |= FR_WHOLEWORD;
- if (entry_text != NULL && *entry_text != NUL)
-! vim_strncpy((char_u *)s_findrep_struct.lpstrFindWhat, entry_text,
-! s_findrep_struct.wFindWhatLen - 1);
- vim_free(entry_text);
- }
- #endif
---- 2643,2659 ----
- if (wword)
- s_findrep_struct.Flags |= FR_WHOLEWORD;
- if (entry_text != NULL && *entry_text != NUL)
-! {
-! WCHAR *p = enc_to_utf16(entry_text, NULL);
-! if (p != NULL)
-! {
-! int len = s_findrep_struct.wFindWhatLen - 1;
-!
-! wcsncpy(s_findrep_struct.lpstrFindWhat, p, len);
-! s_findrep_struct.lpstrFindWhat[len] = NUL;
-! vim_free(p);
-! }
-! }
- vim_free(entry_text);
- }
- #endif
-***************
-*** 2729,2735 ****
- static void
- set_window_title(HWND hwnd, char *title)
- {
-! if (title != NULL && enc_codepage >= 0 && enc_codepage != (int)GetACP())
- {
- WCHAR *wbuf;
-
---- 2661,2667 ----
- static void
- set_window_title(HWND hwnd, char *title)
- {
-! if (title != NULL)
- {
- WCHAR *wbuf;
-
-***************
-*** 2740,2748 ****
- SetWindowTextW(hwnd, wbuf);
- vim_free(wbuf);
- }
-- return;
- }
-! (void)SetWindowText(hwnd, (LPCSTR)title);
- }
-
- void
---- 2672,2680 ----
- SetWindowTextW(hwnd, wbuf);
- vim_free(wbuf);
- }
- }
-! else
-! (void)SetWindowTextW(hwnd, NULL);
- }
-
- void
-***************
-*** 2757,2772 ****
- if (!IsWindow(s_findrep_hwnd))
- {
- initialise_findrep(eap->arg);
-! /* If the OS is Windows NT, and 'encoding' differs from active
-! * codepage: convert text and use wide function. */
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! findrep_atow(&s_findrep_struct_w, &s_findrep_struct);
-! s_findrep_hwnd = FindTextW(
-! (LPFINDREPLACEW) &s_findrep_struct_w);
-! }
-! else
-! s_findrep_hwnd = FindText((LPFINDREPLACE) &s_findrep_struct);
- }
-
- set_window_title(s_findrep_hwnd, _("Find string"));
---- 2689,2695 ----
- if (!IsWindow(s_findrep_hwnd))
- {
- initialise_findrep(eap->arg);
-! s_findrep_hwnd = FindTextW((LPFINDREPLACEW) &s_findrep_struct);
- }
-
- set_window_title(s_findrep_hwnd, _("Find string"));
-***************
-*** 2790,2804 ****
- if (!IsWindow(s_findrep_hwnd))
- {
- initialise_findrep(eap->arg);
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! findrep_atow(&s_findrep_struct_w, &s_findrep_struct);
-! s_findrep_hwnd = ReplaceTextW(
-! (LPFINDREPLACEW) &s_findrep_struct_w);
-! }
-! else
-! s_findrep_hwnd = ReplaceText(
-! (LPFINDREPLACE) &s_findrep_struct);
- }
-
- set_window_title(s_findrep_hwnd, _("Find & Replace"));
---- 2713,2719 ----
- if (!IsWindow(s_findrep_hwnd))
- {
- initialise_findrep(eap->arg);
-! s_findrep_hwnd = ReplaceTextW((LPFINDREPLACEW) &s_findrep_struct);
- }
-
- set_window_title(s_findrep_hwnd, _("Find & Replace"));
-***************
-*** 4147,4153 ****
- #define USE_SYSMENU_FONT
-
- #define VIM_NAME "vim"
-- #define VIM_CLASS "Vim"
- #define VIM_CLASSW L"Vim"
-
- /* Initial size for the dialog template. For gui_mch_dialog() it's fixed,
---- 4062,4067 ----
-***************
-*** 5021,5029 ****
- int
- gui_mch_init(void)
- {
-- const char szVimWndClass[] = VIM_CLASS;
-- const char szTextAreaClass[] = "VimTextArea";
-- WNDCLASS wndclass;
- const WCHAR szVimWndClassW[] = VIM_CLASSW;
- const WCHAR szTextAreaClassW[] = L"VimTextArea";
- WNDCLASSW wndclassw;
---- 4935,4940 ----
-***************
-*** 5073,5122 ****
- #endif
- RegisterClassW(&wndclassw)) == 0)
- return FAIL;
-- else
-- wide_WindowProc = TRUE;
- }
-
-- if (!wide_WindowProc)
-- if (GetClassInfo(s_hinst, szVimWndClass, &wndclass) == 0)
-- {
-- wndclass.style = CS_DBLCLKS;
-- wndclass.lpfnWndProc = _WndProc;
-- wndclass.cbClsExtra = 0;
-- wndclass.cbWndExtra = 0;
-- wndclass.hInstance = s_hinst;
-- wndclass.hIcon = LoadIcon(wndclass.hInstance, "IDR_VIM");
-- wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
-- wndclass.hbrBackground = s_brush;
-- wndclass.lpszMenuName = NULL;
-- wndclass.lpszClassName = szVimWndClass;
--
-- if ((
-- #ifdef GLOBAL_IME
-- atom =
-- #endif
-- RegisterClass(&wndclass)) == 0)
-- return FAIL;
-- }
--
- if (vim_parent_hwnd != NULL)
- {
- #ifdef HAVE_TRY_EXCEPT
- __try
- {
- #endif
-! /* Open inside the specified parent window.
-! * TODO: last argument should point to a CLIENTCREATESTRUCT
-! * structure. */
-! s_hwnd = CreateWindowEx(
- WS_EX_MDICHILD,
-! szVimWndClass, "Vim MSWindows GUI",
- WS_OVERLAPPEDWINDOW | WS_CHILD
- | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | 0xC000,
- gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
- gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
-! 100, /* Any value will do */
-! 100, /* Any value will do */
- vim_parent_hwnd, NULL,
- s_hinst, NULL);
- #ifdef HAVE_TRY_EXCEPT
---- 4984,5009 ----
- #endif
- RegisterClassW(&wndclassw)) == 0)
- return FAIL;
- }
-
- if (vim_parent_hwnd != NULL)
- {
- #ifdef HAVE_TRY_EXCEPT
- __try
- {
- #endif
-! // Open inside the specified parent window.
-! // TODO: last argument should point to a CLIENTCREATESTRUCT
-! // structure.
-! s_hwnd = CreateWindowExW(
- WS_EX_MDICHILD,
-! szVimWndClassW, L"Vim MSWindows GUI",
- WS_OVERLAPPEDWINDOW | WS_CHILD
- | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | 0xC000,
- gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
- gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
-! 100, // Any value will do
-! 100, // Any value will do
- vim_parent_hwnd, NULL,
- s_hinst, NULL);
- #ifdef HAVE_TRY_EXCEPT
-***************
-*** 5141,5148 ****
-
- /* Create a window. If win_socket_id is not zero without border and
- * titlebar, it will be reparented below. */
-! s_hwnd = CreateWindow(
-! szVimWndClass, "Vim MSWindows GUI",
- (win_socket_id == 0 ? WS_OVERLAPPEDWINDOW : WS_POPUP)
- | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
- gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
---- 5028,5035 ----
-
- /* Create a window. If win_socket_id is not zero without border and
- * titlebar, it will be reparented below. */
-! s_hwnd = CreateWindowW(
-! szVimWndClassW, L"Vim MSWindows GUI",
- (win_socket_id == 0 ? WS_OVERLAPPEDWINDOW : WS_POPUP)
- | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
- gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
-***************
-*** 5169,5228 ****
- #endif
-
- /* Create the text area window */
-! if (wide_WindowProc)
- {
-! if (GetClassInfoW(s_hinst, szTextAreaClassW, &wndclassw) == 0)
-! {
-! wndclassw.style = CS_OWNDC;
-! wndclassw.lpfnWndProc = _TextAreaWndProc;
-! wndclassw.cbClsExtra = 0;
-! wndclassw.cbWndExtra = 0;
-! wndclassw.hInstance = s_hinst;
-! wndclassw.hIcon = NULL;
-! wndclassw.hCursor = LoadCursor(NULL, IDC_ARROW);
-! wndclassw.hbrBackground = NULL;
-! wndclassw.lpszMenuName = NULL;
-! wndclassw.lpszClassName = szTextAreaClassW;
-!
-! if (RegisterClassW(&wndclassw) == 0)
-! return FAIL;
-! }
-!
-! s_textArea = CreateWindowExW(
-! 0,
-! szTextAreaClassW, L"Vim text area",
-! WS_CHILD | WS_VISIBLE, 0, 0,
-! 100, // Any value will do for now
-! 100, // Any value will do for now
-! s_hwnd, NULL,
-! s_hinst, NULL);
-! }
-! else if (GetClassInfo(s_hinst, szTextAreaClass, &wndclass) == 0)
-! {
-! wndclass.style = CS_OWNDC;
-! wndclass.lpfnWndProc = _TextAreaWndProc;
-! wndclass.cbClsExtra = 0;
-! wndclass.cbWndExtra = 0;
-! wndclass.hInstance = s_hinst;
-! wndclass.hIcon = NULL;
-! wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
-! wndclass.hbrBackground = NULL;
-! wndclass.lpszMenuName = NULL;
-! wndclass.lpszClassName = szTextAreaClass;
-
-! if (RegisterClass(&wndclass) == 0)
- return FAIL;
--
-- s_textArea = CreateWindowEx(
-- 0,
-- szTextAreaClass, "Vim text area",
-- WS_CHILD | WS_VISIBLE, 0, 0,
-- 100, // Any value will do for now
-- 100, // Any value will do for now
-- s_hwnd, NULL,
-- s_hinst, NULL);
- }
-
- if (s_textArea == NULL)
- return FAIL;
-
---- 5056,5087 ----
- #endif
-
- /* Create the text area window */
-! if (GetClassInfoW(s_hinst, szTextAreaClassW, &wndclassw) == 0)
- {
-! wndclassw.style = CS_OWNDC;
-! wndclassw.lpfnWndProc = _TextAreaWndProc;
-! wndclassw.cbClsExtra = 0;
-! wndclassw.cbWndExtra = 0;
-! wndclassw.hInstance = s_hinst;
-! wndclassw.hIcon = NULL;
-! wndclassw.hCursor = LoadCursor(NULL, IDC_ARROW);
-! wndclassw.hbrBackground = NULL;
-! wndclassw.lpszMenuName = NULL;
-! wndclassw.lpszClassName = szTextAreaClassW;
-
-! if (RegisterClassW(&wndclassw) == 0)
- return FAIL;
- }
-
-+ s_textArea = CreateWindowExW(
-+ 0,
-+ szTextAreaClassW, L"Vim text area",
-+ WS_CHILD | WS_VISIBLE, 0, 0,
-+ 100, // Any value will do for now
-+ 100, // Any value will do for now
-+ s_hwnd, NULL,
-+ s_hinst, NULL);
-+
- if (s_textArea == NULL)
- return FAIL;
-
-***************
-*** 5299,5319 ****
-
- /* Initialise the struct */
- s_findrep_struct.lStructSize = sizeof(s_findrep_struct);
-! s_findrep_struct.lpstrFindWhat = (LPSTR)alloc(MSWIN_FR_BUFSIZE);
- s_findrep_struct.lpstrFindWhat[0] = NUL;
-! s_findrep_struct.lpstrReplaceWith = (LPSTR)alloc(MSWIN_FR_BUFSIZE);
- s_findrep_struct.lpstrReplaceWith[0] = NUL;
- s_findrep_struct.wFindWhatLen = MSWIN_FR_BUFSIZE;
- s_findrep_struct.wReplaceWithLen = MSWIN_FR_BUFSIZE;
-- s_findrep_struct_w.lStructSize = sizeof(s_findrep_struct_w);
-- s_findrep_struct_w.lpstrFindWhat =
-- (LPWSTR)alloc(MSWIN_FR_BUFSIZE * sizeof(WCHAR));
-- s_findrep_struct_w.lpstrFindWhat[0] = NUL;
-- s_findrep_struct_w.lpstrReplaceWith =
-- (LPWSTR)alloc(MSWIN_FR_BUFSIZE * sizeof(WCHAR));
-- s_findrep_struct_w.lpstrReplaceWith[0] = NUL;
-- s_findrep_struct_w.wFindWhatLen = MSWIN_FR_BUFSIZE;
-- s_findrep_struct_w.wReplaceWithLen = MSWIN_FR_BUFSIZE;
- #endif
-
- #ifdef FEAT_EVAL
---- 5158,5171 ----
-
- /* Initialise the struct */
- s_findrep_struct.lStructSize = sizeof(s_findrep_struct);
-! s_findrep_struct.lpstrFindWhat =
-! (LPWSTR)alloc(MSWIN_FR_BUFSIZE * sizeof(WCHAR));
- s_findrep_struct.lpstrFindWhat[0] = NUL;
-! s_findrep_struct.lpstrReplaceWith =
-! (LPWSTR)alloc(MSWIN_FR_BUFSIZE * sizeof(WCHAR));
- s_findrep_struct.lpstrReplaceWith[0] = NUL;
- s_findrep_struct.wFindWhatLen = MSWIN_FR_BUFSIZE;
- s_findrep_struct.wReplaceWithLen = MSWIN_FR_BUFSIZE;
- #endif
-
- #ifdef FEAT_EVAL
-***************
-*** 6344,6392 ****
-
- if (menu_is_menubar(menu->name))
- {
-! WCHAR *wn = NULL;
-!
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! /* 'encoding' differs from active codepage: convert menu name
-! * and use wide function */
-! wn = enc_to_utf16(menu->name, NULL);
-! if (wn != NULL)
-! {
-! MENUITEMINFOW infow;
-!
-! infow.cbSize = sizeof(infow);
-! infow.fMask = MIIM_DATA | MIIM_TYPE | MIIM_ID
-! | MIIM_SUBMENU;
-! infow.dwItemData = (long_u)menu;
-! infow.wID = menu->id;
-! infow.fType = MFT_STRING;
-! infow.dwTypeData = wn;
-! infow.cch = (UINT)wcslen(wn);
-! infow.hSubMenu = menu->submenu_id;
-! InsertMenuItemW((parent == NULL)
-! ? s_menuBar : parent->submenu_id,
-! (UINT)pos, TRUE, &infow);
-! vim_free(wn);
-! }
-! }
-
- if (wn == NULL)
-! {
-! MENUITEMINFO info;
-
-! info.cbSize = sizeof(info);
-! info.fMask = MIIM_DATA | MIIM_TYPE | MIIM_ID | MIIM_SUBMENU;
-! info.dwItemData = (long_u)menu;
-! info.wID = menu->id;
-! info.fType = MFT_STRING;
-! info.dwTypeData = (LPTSTR)menu->name;
-! info.cch = (UINT)STRLEN(menu->name);
-! info.hSubMenu = menu->submenu_id;
-! InsertMenuItem((parent == NULL)
-! ? s_menuBar : parent->submenu_id,
-! (UINT)pos, TRUE, &info);
-! }
- }
-
- /* Fix window size if menu may have wrapped */
---- 6196,6221 ----
-
- if (menu_is_menubar(menu->name))
- {
-! WCHAR *wn;
-! MENUITEMINFOW infow;
-
-+ wn = enc_to_utf16(menu->name, NULL);
- if (wn == NULL)
-! return;
-
-! infow.cbSize = sizeof(infow);
-! infow.fMask = MIIM_DATA | MIIM_TYPE | MIIM_ID
-! | MIIM_SUBMENU;
-! infow.dwItemData = (long_u)menu;
-! infow.wID = menu->id;
-! infow.fType = MFT_STRING;
-! infow.dwTypeData = wn;
-! infow.cch = (UINT)wcslen(wn);
-! infow.hSubMenu = menu->submenu_id;
-! InsertMenuItemW((parent == NULL)
-! ? s_menuBar : parent->submenu_id,
-! (UINT)pos, TRUE, &infow);
-! vim_free(wn);
- }
-
- /* Fix window size if menu may have wrapped */
-***************
-*** 6499,6525 ****
- else
- #endif
- {
-! WCHAR *wn = NULL;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
- {
-! /* 'encoding' differs from active codepage: convert menu item name
-! * and use wide function */
-! wn = enc_to_utf16(menu->name, NULL);
-! if (wn != NULL)
-! {
-! InsertMenuW(parent->submenu_id, (UINT)idx,
-! (menu_is_separator(menu->name)
-! ? MF_SEPARATOR : MF_STRING) | MF_BYPOSITION,
-! (UINT)menu->id, wn);
-! vim_free(wn);
-! }
- }
-- if (wn == NULL)
-- InsertMenu(parent->submenu_id, (UINT)idx,
-- (menu_is_separator(menu->name) ? MF_SEPARATOR : MF_STRING)
-- | MF_BYPOSITION,
-- (UINT)menu->id, (LPCTSTR)menu->name);
- #ifdef FEAT_TEAROFF
- if (IsWindow(parent->tearoff_handle))
- rebuild_tearoff(parent);
---- 6328,6344 ----
- else
- #endif
- {
-! WCHAR *wn;
-
-! wn = enc_to_utf16(menu->name, NULL);
-! if (wn != NULL)
- {
-! InsertMenuW(parent->submenu_id, (UINT)idx,
-! (menu_is_separator(menu->name)
-! ? MF_SEPARATOR : MF_STRING) | MF_BYPOSITION,
-! (UINT)menu->id, wn);
-! vim_free(wn);
- }
- #ifdef FEAT_TEAROFF
- if (IsWindow(parent->tearoff_handle))
- rebuild_tearoff(parent);
-***************
-*** 6709,6730 ****
- /* If the edit box exists, copy the string. */
- if (s_textfield != NULL)
- {
-! /* If the OS is Windows NT, and 'encoding' differs from active
-! * codepage: use wide function and convert text. */
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! WCHAR *wp = (WCHAR *)alloc(IOSIZE * sizeof(WCHAR));
-! char_u *p;
-
-! GetDlgItemTextW(hwnd, DLG_NONBUTTON_CONTROL + 2, wp, IOSIZE);
-! p = utf16_to_enc(wp, NULL);
-! vim_strncpy(s_textfield, p, IOSIZE);
-! vim_free(p);
-! vim_free(wp);
-! }
-! else
-! GetDlgItemText(hwnd, DLG_NONBUTTON_CONTROL + 2,
-! (LPSTR)s_textfield, IOSIZE);
- }
-
- /*
---- 6528,6541 ----
- /* If the edit box exists, copy the string. */
- if (s_textfield != NULL)
- {
-! WCHAR *wp = (WCHAR *)alloc(IOSIZE * sizeof(WCHAR));
-! char_u *p;
-
-! GetDlgItemTextW(hwnd, DLG_NONBUTTON_CONTROL + 2, wp, IOSIZE);
-! p = utf16_to_enc(wp, NULL);
-! vim_strncpy(s_textfield, p, IOSIZE);
-! vim_free(p);
-! vim_free(wp);
- }
-
- /*
-***************
-*** 8411,8417 ****
- }
-
- static void
-! make_tooltipw(BalloonEval *beval, char *text, POINT pt)
- {
- TOOLINFOW *pti;
- int ToolInfoSize;
---- 8222,8228 ----
- }
-
- static void
-! make_tooltip(BalloonEval *beval, char *text, POINT pt)
- {
- TOOLINFOW *pti;
- int ToolInfoSize;
-***************
-*** 8473,8549 ****
- /*
- * HACK: force tooltip to appear, because it'll not appear until
- * first mouse move. D*mn M$
-- * Amazingly moving (2, 2) and then (-1, -1) the mouse doesn't move.
-- */
-- mouse_event(MOUSEEVENTF_MOVE, 2, 2, 0, 0);
-- mouse_event(MOUSEEVENTF_MOVE, (DWORD)-1, (DWORD)-1, 0, 0);
-- vim_free(pti);
-- }
--
-- static void
-- make_tooltip(BalloonEval *beval, char *text, POINT pt)
-- {
-- TOOLINFO *pti;
-- int ToolInfoSize;
--
-- if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-- {
-- make_tooltipw(beval, text, pt);
-- return;
-- }
--
-- if (multiline_balloon_available() == TRUE)
-- ToolInfoSize = sizeof(TOOLINFO_NEW);
-- else
-- ToolInfoSize = sizeof(TOOLINFO);
--
-- pti = (TOOLINFO *)alloc(ToolInfoSize);
-- if (pti == NULL)
-- return;
--
-- beval->balloon = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS,
-- NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
-- CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
-- beval->target, NULL, s_hinst, NULL);
--
-- SetWindowPos(beval->balloon, HWND_TOPMOST, 0, 0, 0, 0,
-- SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
--
-- pti->cbSize = ToolInfoSize;
-- pti->uFlags = TTF_SUBCLASS;
-- pti->hwnd = beval->target;
-- pti->hinst = 0; /* Don't use string resources */
-- pti->uId = ID_BEVAL_TOOLTIP;
--
-- if (multiline_balloon_available() == TRUE)
-- {
-- RECT rect;
-- TOOLINFO_NEW *ptin = (TOOLINFO_NEW *)pti;
-- pti->lpszText = LPSTR_TEXTCALLBACK;
-- beval->tofree = vim_strsave((char_u*)text);
-- ptin->lParam = (LPARAM)beval->tofree;
-- if (GetClientRect(s_textArea, &rect)) /* switch multiline tooltips on */
-- SendMessage(beval->balloon, TTM_SETMAXTIPWIDTH, 0,
-- (LPARAM)rect.right);
-- }
-- else
-- pti->lpszText = text; /* do this old way */
--
-- /* Limit ballooneval bounding rect to CursorPos neighbourhood */
-- pti->rect.left = pt.x - 3;
-- pti->rect.top = pt.y - 3;
-- pti->rect.right = pt.x + 3;
-- pti->rect.bottom = pt.y + 3;
--
-- SendMessage(beval->balloon, TTM_ADDTOOL, 0, (LPARAM)pti);
-- /* Make tooltip appear sooner */
-- SendMessage(beval->balloon, TTM_SETDELAYTIME, TTDT_INITIAL, 10);
-- /* I've performed some tests and it seems the longest possible life time
-- * of tooltip is 30 seconds */
-- SendMessage(beval->balloon, TTM_SETDELAYTIME, TTDT_AUTOPOP, 30000);
-- /*
-- * HACK: force tooltip to appear, because it'll not appear until
-- * first mouse move. D*mn M$
- * Amazingly moving (2, 2) and then (-1, -1) the mouse doesn't move.
- */
- mouse_event(MOUSEEVENTF_MOVE, 2, 2, 0, 0);
---- 8284,8289 ----
-*** ../vim-8.1.1102/src/misc1.c 2019-03-30 20:11:45.749471761 +0100
---- src/misc1.c 2019-04-02 22:11:36.386340616 +0200
-***************
-*** 5670,5680 ****
- int matches;
- int len;
- int starstar = FALSE;
-! static int stardepth = 0; /* depth for "**" expansion */
-! WIN32_FIND_DATA fb;
-! HANDLE hFind = (HANDLE)0;
- WIN32_FIND_DATAW wfb;
-! WCHAR *wn = NULL; /* UCS-2 name, NULL when not used. */
- char_u *matchname;
- int ok;
-
---- 5670,5679 ----
- int matches;
- int len;
- int starstar = FALSE;
-! static int stardepth = 0; // depth for "**" expansion
-! HANDLE hFind = INVALID_HANDLE_VALUE;
- WIN32_FIND_DATAW wfb;
-! WCHAR *wn = NULL; // UCS-2 name, NULL when not used.
- char_u *matchname;
- int ok;
-
-***************
-*** 5783,5815 ****
-
- /* Scan all files in the directory with "dir/ *.*" */
- STRCPY(s, "*.*");
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! /* The active codepage differs from 'encoding'. Attempt using the
-! * wide function. If it fails because it is not implemented fall back
-! * to the non-wide version (for Windows 98) */
-! wn = enc_to_utf16(buf, NULL);
-! if (wn != NULL)
-! {
-! hFind = FindFirstFileW(wn, &wfb);
-! if (hFind == INVALID_HANDLE_VALUE
-! && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
-! VIM_CLEAR(wn);
-! }
-! }
-!
-! if (wn == NULL)
-! hFind = FindFirstFile((LPCSTR)buf, &fb);
- ok = (hFind != INVALID_HANDLE_VALUE);
-
- while (ok)
- {
-! if (wn != NULL)
-! p = utf16_to_enc(wfb.cFileName, NULL); /* p is allocated here */
-! else
-! p = (char_u *)fb.cFileName;
-! /* Ignore entries starting with a dot, unless when asked for. Accept
-! * all entries found with "matchname". */
- if ((p[0] != '.' || starts_with_dot
- || ((flags & EW_DODOT)
- && p[1] != NUL && (p[1] != '.' || p[2] != NUL)))
---- 5782,5797 ----
-
- /* Scan all files in the directory with "dir/ *.*" */
- STRCPY(s, "*.*");
-! wn = enc_to_utf16(buf, NULL);
-! if (wn != NULL)
-! hFind = FindFirstFileW(wn, &wfb);
- ok = (hFind != INVALID_HANDLE_VALUE);
-
- while (ok)
- {
-! p = utf16_to_enc(wfb.cFileName, NULL); // p is allocated here
-! // Ignore entries starting with a dot, unless when asked for. Accept
-! // all entries found with "matchname".
- if ((p[0] != '.' || starts_with_dot
- || ((flags & EW_DODOT)
- && p[1] != NUL && (p[1] != '.' || p[2] != NUL)))
-***************
-*** 5851,5863 ****
- }
- }
-
-! if (wn != NULL)
-! {
-! vim_free(p);
-! ok = FindNextFileW(hFind, &wfb);
-! }
-! else
-! ok = FindNextFile(hFind, &fb);
-
- /* If no more matches and no match was used, try expanding the name
- * itself. Finds the long name of a short filename. */
---- 5833,5840 ----
- }
- }
-
-! vim_free(p);
-! ok = FindNextFileW(hFind, &wfb);
-
- /* If no more matches and no match was used, try expanding the name
- * itself. Finds the long name of a short filename. */
-***************
-*** 5865,5879 ****
- {
- STRCPY(s, matchname);
- FindClose(hFind);
- if (wn != NULL)
-! {
-! vim_free(wn);
-! wn = enc_to_utf16(buf, NULL);
-! if (wn != NULL)
-! hFind = FindFirstFileW(wn, &wfb);
-! }
-! if (wn == NULL)
-! hFind = FindFirstFile((LPCSTR)buf, &fb);
- ok = (hFind != INVALID_HANDLE_VALUE);
- VIM_CLEAR(matchname);
- }
---- 5842,5853 ----
- {
- STRCPY(s, matchname);
- FindClose(hFind);
-+ vim_free(wn);
-+ wn = enc_to_utf16(buf, NULL);
- if (wn != NULL)
-! hFind = FindFirstFileW(wn, &wfb);
-! else
-! hFind = INVALID_HANDLE_VALUE;
- ok = (hFind != INVALID_HANDLE_VALUE);
- VIM_CLEAR(matchname);
- }
-*** ../vim-8.1.1102/src/os_mswin.c 2019-03-30 18:46:57.360077328 +0100
---- src/os_mswin.c 2019-04-02 22:04:17.789655489 +0200
-***************
-*** 105,111 ****
- typedef int MOUSE_EVENT_RECORD;
- typedef int NEWTEXTMETRICW;
- typedef int PACL;
-! typedef int PRINTDLG;
- typedef int PSECURITY_DESCRIPTOR;
- typedef int PSID;
- typedef int SECURITY_INFORMATION;
---- 105,111 ----
- typedef int MOUSE_EVENT_RECORD;
- typedef int NEWTEXTMETRICW;
- typedef int PACL;
-! typedef int PRINTDLGW;
- typedef int PSECURITY_DESCRIPTOR;
- typedef int PSID;
- typedef int SECURITY_INFORMATION;
-***************
-*** 282,300 ****
- # else
- if (title != NULL)
- {
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! /* Convert the title from 'encoding' to the active codepage. */
-! WCHAR *wp = enc_to_utf16(title, NULL);
-
-! if (wp != NULL)
-! {
-! SetConsoleTitleW(wp);
-! vim_free(wp);
-! return;
-! }
-! }
-! SetConsoleTitle((LPCSTR)title);
- }
- # endif
- }
---- 282,295 ----
- # else
- if (title != NULL)
- {
-! WCHAR *wp = enc_to_utf16(title, NULL);
-
-! if (wp == NULL)
-! return;
-!
-! SetConsoleTitleW(wp);
-! vim_free(wp);
-! return;
- }
- # endif
- }
-***************
-*** 359,398 ****
- else
- #endif
- {
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! WCHAR *wname;
-! WCHAR wbuf[MAX_PATH];
-! char_u *cname = NULL;
-!
-! /* Use the wide function:
-! * - convert the fname from 'encoding' to UCS2.
-! * - invoke _wfullpath()
-! * - convert the result from UCS2 to 'encoding'.
-! */
-! wname = enc_to_utf16(fname, NULL);
-! if (wname != NULL && _wfullpath(wbuf, wname, MAX_PATH) != NULL)
-! {
-! cname = utf16_to_enc((short_u *)wbuf, NULL);
-! if (cname != NULL)
-! {
-! vim_strncpy(buf, cname, len - 1);
-! nResult = OK;
-! }
-! }
-! vim_free(wname);
-! vim_free(cname);
-! }
-! if (nResult == FAIL) /* fall back to non-wide function */
- {
-! if (_fullpath((char *)buf, (const char *)fname, len - 1) == NULL)
- {
-! /* failed, use relative path name */
-! vim_strncpy(buf, fname, len - 1);
-! }
-! else
- nResult = OK;
- }
- }
-
- #ifdef USE_FNAME_CASE
---- 354,375 ----
- else
- #endif
- {
-! WCHAR *wname;
-! WCHAR wbuf[MAX_PATH];
-! char_u *cname = NULL;
-!
-! wname = enc_to_utf16(fname, NULL);
-! if (wname != NULL && _wfullpath(wbuf, wname, MAX_PATH) != NULL)
- {
-! cname = utf16_to_enc((short_u *)wbuf, NULL);
-! if (cname != NULL)
- {
-! vim_strncpy(buf, cname, len - 1);
- nResult = OK;
-+ }
- }
-+ vim_free(wname);
-+ vim_free(cname);
- }
-
- #ifdef USE_FNAME_CASE
-***************
-*** 480,536 ****
- #endif
-
- static int
-- stat_symlink_aware(const char *name, stat_T *stp)
-- {
-- #if (defined(_MSC_VER) && (_MSC_VER < 1900)) || defined(__MINGW32__)
-- /* Work around for VC12 or earlier (and MinGW). stat() can't handle
-- * symlinks properly.
-- * VC9 or earlier: stat() doesn't support a symlink at all. It retrieves
-- * status of a symlink itself.
-- * VC10: stat() supports a symlink to a normal file, but it doesn't support
-- * a symlink to a directory (always returns an error).
-- * VC11 and VC12: stat() doesn't return an error for a symlink to a
-- * directory, but it doesn't set S_IFDIR flag.
-- * MinGW: Same as VC9. */
-- WIN32_FIND_DATA findData;
-- HANDLE hFind, h;
-- DWORD attr = 0;
-- BOOL is_symlink = FALSE;
--
-- hFind = FindFirstFile(name, &findData);
-- if (hFind != INVALID_HANDLE_VALUE)
-- {
-- attr = findData.dwFileAttributes;
-- if ((attr & FILE_ATTRIBUTE_REPARSE_POINT)
-- && (findData.dwReserved0 == IO_REPARSE_TAG_SYMLINK))
-- is_symlink = TRUE;
-- FindClose(hFind);
-- }
-- if (is_symlink)
-- {
-- h = CreateFile(name, FILE_READ_ATTRIBUTES,
-- FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
-- OPEN_EXISTING,
-- (attr & FILE_ATTRIBUTE_DIRECTORY)
-- ? FILE_FLAG_BACKUP_SEMANTICS : 0,
-- NULL);
-- if (h != INVALID_HANDLE_VALUE)
-- {
-- int fd, n;
--
-- fd = _open_osfhandle((OPEN_OH_ARGTYPE)h, _O_RDONLY);
-- n = _fstat(fd, (struct _stat *)stp);
-- if ((n == 0) && (attr & FILE_ATTRIBUTE_DIRECTORY))
-- stp->st_mode = (stp->st_mode & ~S_IFREG) | S_IFDIR;
-- _close(fd);
-- return n;
-- }
-- }
-- #endif
-- return stat(name, stp);
-- }
--
-- static int
- wstat_symlink_aware(const WCHAR *name, stat_T *stp)
- {
- #if (defined(_MSC_VER) && (_MSC_VER < 1900)) || defined(__MINGW32__)
---- 457,462 ----
-***************
-*** 593,598 ****
---- 519,526 ----
- * UTF-8. */
- char_u buf[_MAX_PATH * 3 + 1];
- char_u *p;
-+ WCHAR *wp;
-+ int n;
-
- vim_strncpy((char_u *)buf, (char_u *)name, sizeof(buf) - 1);
- p = buf + STRLEN(buf);
-***************
-*** 614,632 ****
- STRCAT(buf, "\\");
- }
- }
-- if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-- {
-- WCHAR *wp = enc_to_utf16(buf, NULL);
-- int n;
-
-! if (wp != NULL)
-! {
-! n = wstat_symlink_aware(wp, stp);
-! vim_free(wp);
-! return n;
-! }
-! }
-! return stat_symlink_aware((char *)buf, stp);
- }
-
- #if defined(FEAT_GUI_MSWIN) || defined(PROTO)
---- 542,555 ----
- STRCAT(buf, "\\");
- }
- }
-
-! wp = enc_to_utf16(buf, NULL);
-! if (wp == NULL)
-! return -1;
-!
-! n = wstat_symlink_aware(wp, stp);
-! vim_free(wp);
-! return n;
- }
-
- #if defined(FEAT_GUI_MSWIN) || defined(PROTO)
-***************
-*** 758,763 ****
---- 681,689 ----
- int
- mch_chdir(char *path)
- {
-+ WCHAR *p;
-+ int n;
-+
- if (path[0] == NUL) /* just checking... */
- return -1;
-
-***************
-*** 779,798 ****
- if (*path == NUL) /* drive name only */
- return 0;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! WCHAR *p = enc_to_utf16((char_u *)path, NULL);
-! int n;
-!
-! if (p != NULL)
-! {
-! n = _wchdir(p);
-! vim_free(p);
-! return n;
-! }
-! }
-
-! return chdir(path); /* let the normal chdir() do the rest */
- }
-
-
---- 705,717 ----
- if (*path == NUL) /* drive name only */
- return 0;
-
-! p = enc_to_utf16((char_u *)path, NULL);
-! if (p == NULL)
-! return -1;
-
-! n = _wchdir(p);
-! vim_free(p);
-! return n;
- }
-
-
-***************
-*** 1097,1103 ****
- */
-
- static HFONT prt_font_handles[2][2][2];
-! static PRINTDLG prt_dlg;
- static const int boldface[2] = {FW_REGULAR, FW_BOLD};
- static TEXTMETRIC prt_tm;
- static int prt_line_height;
---- 1016,1022 ----
- */
-
- static HFONT prt_font_handles[2][2][2];
-! static PRINTDLGW prt_dlg;
- static const int boldface[2] = {FW_REGULAR, FW_BOLD};
- static TEXTMETRIC prt_tm;
- static int prt_line_height;
-***************
-*** 1119,1136 ****
- static BOOL
- vimSetDlgItemText(HWND hDlg, int nIDDlgItem, char_u *s)
- {
-! WCHAR *wp = NULL;
- BOOL ret;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! wp = enc_to_utf16(s, NULL);
-! if (wp != NULL)
-! {
-! ret = SetDlgItemTextW(hDlg, nIDDlgItem, wp);
-! vim_free(wp);
-! return ret;
-! }
-! return SetDlgItemText(hDlg, nIDDlgItem, (LPCSTR)s);
- }
-
- /*
---- 1038,1053 ----
- static BOOL
- vimSetDlgItemText(HWND hDlg, int nIDDlgItem, char_u *s)
- {
-! WCHAR *wp;
- BOOL ret;
-
-! wp = enc_to_utf16(s, NULL);
-! if (wp == NULL)
-! return FALSE;
-!
-! ret = SetDlgItemTextW(hDlg, nIDDlgItem, wp);
-! vim_free(wp);
-! return ret;
- }
-
- /*
-***************
-*** 1248,1254 ****
- {
- HWND hwndOwner;
- RECT rc, rcDlg, rcOwner;
-! PRINTDLG *pPD;
-
- if (uiMsg == WM_INITDIALOG)
- {
---- 1165,1171 ----
- {
- HWND hwndOwner;
- RECT rc, rcDlg, rcOwner;
-! PRINTDLGW *pPD;
-
- if (uiMsg == WM_INITDIALOG)
- {
-***************
-*** 1280,1286 ****
- SWP_NOSIZE);
-
- /* tackle the printdlg copiesctrl problem */
-! pPD = (PRINTDLG *)lParam;
- pPD->nCopies = (WORD)pPD->lCustData;
- SetDlgItemInt( hDlg, edt3, pPD->nCopies, FALSE );
- /* Bring the window to top */
---- 1197,1203 ----
- SWP_NOSIZE);
-
- /* tackle the printdlg copiesctrl problem */
-! pPD = (PRINTDLGW *)lParam;
- pPD->nCopies = (WORD)pPD->lCustData;
- SetDlgItemInt( hDlg, edt3, pPD->nCopies, FALSE );
- /* Bring the window to top */
-***************
-*** 1423,1435 ****
- int pifBold;
- int pifUnderline;
-
-! DEVMODE *mem;
- DEVNAMES *devname;
- int i;
-
- bUserAbort = &(psettings->user_abort);
-! vim_memset(&prt_dlg, 0, sizeof(PRINTDLG));
-! prt_dlg.lStructSize = sizeof(PRINTDLG);
- #ifndef FEAT_GUI
- GetConsoleHwnd(); /* get value of s_hwnd */
- #endif
---- 1340,1352 ----
- int pifBold;
- int pifUnderline;
-
-! DEVMODEW *mem;
- DEVNAMES *devname;
- int i;
-
- bUserAbort = &(psettings->user_abort);
-! vim_memset(&prt_dlg, 0, sizeof(PRINTDLGW));
-! prt_dlg.lStructSize = sizeof(PRINTDLGW);
- #ifndef FEAT_GUI
- GetConsoleHwnd(); /* get value of s_hwnd */
- #endif
-***************
-*** 1470,1480 ****
- else
- {
- prt_dlg.Flags |= PD_RETURNDEFAULT;
-! if (PrintDlg(&prt_dlg) == 0)
- goto init_fail_dlg;
- }
- }
-! else if (PrintDlg(&prt_dlg) == 0)
- goto init_fail_dlg;
- else
- {
---- 1387,1397 ----
- else
- {
- prt_dlg.Flags |= PD_RETURNDEFAULT;
-! if (PrintDlgW(&prt_dlg) == 0)
- goto init_fail_dlg;
- }
- }
-! else if (PrintDlgW(&prt_dlg) == 0)
- goto init_fail_dlg;
- else
- {
-***************
-*** 1510,1516 ****
- * passed back correctly. It must be retrieved from the
- * hDevMode struct.
- */
-! mem = (DEVMODE *)GlobalLock(prt_dlg.hDevMode);
- if (mem != NULL)
- {
- if (mem->dmCopies != 1)
---- 1427,1433 ----
- * passed back correctly. It must be retrieved from the
- * hDevMode struct.
- */
-! mem = (DEVMODEW *)GlobalLock(prt_dlg.hDevMode);
- if (mem != NULL)
- {
- if (mem->dmCopies != 1)
-***************
-*** 1525,1558 ****
- devname = (DEVNAMES *)GlobalLock(prt_dlg.hDevNames);
- if (devname != 0)
- {
-! char_u *printer_name = (char_u *)devname + devname->wDeviceOffset;
-! char_u *port_name = (char_u *)devname +devname->wOutputOffset;
- char_u *text = (char_u *)_("to %s on %s");
-! char_u *printer_name_orig = printer_name;
-! char_u *port_name_orig = port_name;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! char_u *to_free = NULL;
-! int maxlen;
-!
-! acp_to_enc(printer_name, (int)STRLEN(printer_name), &to_free,
-! &maxlen);
-! if (to_free != NULL)
-! printer_name = to_free;
-! acp_to_enc(port_name, (int)STRLEN(port_name), &to_free, &maxlen);
-! if (to_free != NULL)
-! port_name = to_free;
-! }
-! prt_name = alloc((unsigned)(STRLEN(printer_name) + STRLEN(port_name)
-! + STRLEN(text)));
- if (prt_name != NULL)
- wsprintf((char *)prt_name, (const char *)text,
- printer_name, port_name);
-! if (printer_name != printer_name_orig)
-! vim_free(printer_name);
-! if (port_name != port_name_orig)
-! vim_free(port_name);
- }
- GlobalUnlock(prt_dlg.hDevNames);
-
---- 1442,1461 ----
- devname = (DEVNAMES *)GlobalLock(prt_dlg.hDevNames);
- if (devname != 0)
- {
-! WCHAR *wprinter_name = (WCHAR *)devname + devname->wDeviceOffset;
-! WCHAR *wport_name = (WCHAR *)devname + devname->wOutputOffset;
- char_u *text = (char_u *)_("to %s on %s");
-! char_u *printer_name = utf16_to_enc(wprinter_name, NULL);
-! char_u *port_name = utf16_to_enc(wport_name, NULL);
-
-! if (printer_name != NULL && port_name != NULL)
-! prt_name = alloc((unsigned)(STRLEN(printer_name)
-! + STRLEN(port_name) + STRLEN(text)));
- if (prt_name != NULL)
- wsprintf((char *)prt_name, (const char *)text,
- printer_name, port_name);
-! vim_free(printer_name);
-! vim_free(port_name);
- }
- GlobalUnlock(prt_dlg.hDevNames);
-
-***************
-*** 1639,1647 ****
- int
- mch_print_begin(prt_settings_T *psettings)
- {
-! int ret;
- char szBuffer[300];
-! WCHAR *wp = NULL;
-
- hDlgPrint = CreateDialog(GetModuleHandle(NULL), TEXT("PrintDlgBox"),
- prt_dlg.hwndOwner, PrintDlgProc);
---- 1542,1550 ----
- int
- mch_print_begin(prt_settings_T *psettings)
- {
-! int ret = 0;
- char szBuffer[300];
-! WCHAR *wp;
-
- hDlgPrint = CreateDialog(GetModuleHandle(NULL), TEXT("PrintDlgBox"),
- prt_dlg.hwndOwner, PrintDlgProc);
-***************
-*** 1649,1656 ****
- wsprintf(szBuffer, _("Printing '%s'"), gettail(psettings->jobname));
- vimSetDlgItemText(hDlgPrint, IDC_PRINTTEXT1, (char_u *)szBuffer);
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! wp = enc_to_utf16(psettings->jobname, NULL);
- if (wp != NULL)
- {
- DOCINFOW di;
---- 1552,1558 ----
- wsprintf(szBuffer, _("Printing '%s'"), gettail(psettings->jobname));
- vimSetDlgItemText(hDlgPrint, IDC_PRINTTEXT1, (char_u *)szBuffer);
-
-! wp = enc_to_utf16(psettings->jobname, NULL);
- if (wp != NULL)
- {
- DOCINFOW di;
-***************
-*** 1661,1675 ****
- ret = StartDocW(prt_dlg.hDC, &di);
- vim_free(wp);
- }
-- else
-- {
-- DOCINFO di;
--
-- vim_memset(&di, 0, sizeof(di));
-- di.cbSize = sizeof(di);
-- di.lpszDocName = (LPCSTR)psettings->jobname;
-- ret = StartDoc(prt_dlg.hDC, &di);
-- }
-
- #ifdef FEAT_GUI
- /* Give focus back to main window (when using MDI). */
---- 1563,1568 ----
-***************
-*** 1725,1774 ****
- mch_print_text_out(char_u *p, int len)
- {
- SIZE sz;
-! WCHAR *wp = NULL;
- int wlen = len;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! wp = enc_to_utf16(p, &wlen);
-! if (wp != NULL)
-! {
-! int ret = FALSE;
-
-! TextOutW(prt_dlg.hDC, prt_pos_x + prt_left_margin,
-! prt_pos_y + prt_top_margin, wp, wlen);
-! GetTextExtentPoint32W(prt_dlg.hDC, wp, wlen, &sz);
-! vim_free(wp);
-! prt_pos_x += (sz.cx - prt_tm.tmOverhang);
-! /* This is wrong when printing spaces for a TAB. */
-! if (p[len] != NUL)
- {
-! wlen = MB_PTR2LEN(p + len);
-! wp = enc_to_utf16(p + len, &wlen);
-! if (wp != NULL)
-! {
-! GetTextExtentPoint32W(prt_dlg.hDC, wp, 1, &sz);
-! ret = (prt_pos_x + prt_left_margin + sz.cx > prt_right_margin);
-! vim_free(wp);
-! }
- }
-- return ret;
- }
-! TextOut(prt_dlg.hDC, prt_pos_x + prt_left_margin,
-! prt_pos_y + prt_top_margin,
-! (LPCSTR)p, len);
-! #ifndef FEAT_PROPORTIONAL_FONTS
-! prt_pos_x += len * prt_tm.tmAveCharWidth;
-! return (prt_pos_x + prt_left_margin + prt_tm.tmAveCharWidth
-! + prt_tm.tmOverhang > prt_right_margin);
-! #else
-! GetTextExtentPoint32(prt_dlg.hDC, (LPCSTR)p, len, &sz);
-! prt_pos_x += (sz.cx - prt_tm.tmOverhang);
-! /* This is wrong when printing spaces for a TAB. */
-! if (p[len] == NUL)
-! return FALSE;
-! GetTextExtentPoint32(prt_dlg.hDC, p + len, 1, &sz);
-! return (prt_pos_x + prt_left_margin + sz.cx > prt_right_margin);
-! #endif
- }
-
- void
---- 1618,1649 ----
- mch_print_text_out(char_u *p, int len)
- {
- SIZE sz;
-! WCHAR *wp;
- int wlen = len;
-+ int ret = FALSE;
-
-! wp = enc_to_utf16(p, &wlen);
-! if (wp == NULL)
-! return FALSE;
-
-! TextOutW(prt_dlg.hDC, prt_pos_x + prt_left_margin,
-! prt_pos_y + prt_top_margin, wp, wlen);
-! GetTextExtentPoint32W(prt_dlg.hDC, wp, wlen, &sz);
-! vim_free(wp);
-! prt_pos_x += (sz.cx - prt_tm.tmOverhang);
-! /* This is wrong when printing spaces for a TAB. */
-! if (p[len] != NUL)
-! {
-! wlen = MB_PTR2LEN(p + len);
-! wp = enc_to_utf16(p + len, &wlen);
-! if (wp != NULL)
- {
-! GetTextExtentPoint32W(prt_dlg.hDC, wp, 1, &sz);
-! ret = (prt_pos_x + prt_left_margin + sz.cx > prt_right_margin);
-! vim_free(wp);
- }
- }
-! return ret;
- }
-
- void
-***************
-*** 1863,1868 ****
---- 1738,1744 ----
- {
- HANDLE h = INVALID_HANDLE_VALUE;
- DWORD size;
-+ WCHAR *p;
- char_u *rfname = NULL;
- FILE_NAME_INFO_ *nameinfo = NULL;
- WCHAR buff[MAX_PATH], *volnames = NULL;
-***************
-*** 1887,1919 ****
- return NULL;
- }
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! WCHAR *p;
-!
-! p = enc_to_utf16(fname, NULL);
-! if (p == NULL)
-! goto fail;
-!
-! if ((GetFileAttributesW(p) & FILE_ATTRIBUTE_REPARSE_POINT) == 0)
-! {
-! vim_free(p);
-! goto fail;
-! }
-
-! h = CreateFileW(p, 0, 0, NULL, OPEN_EXISTING,
-! FILE_FLAG_BACKUP_SEMANTICS, NULL);
- vim_free(p);
- }
-- else
-- {
-- if ((GetFileAttributes((char*) fname) &
-- FILE_ATTRIBUTE_REPARSE_POINT) == 0)
-- goto fail;
-
-! h = CreateFile((char*) fname, 0, 0, NULL, OPEN_EXISTING,
-! FILE_FLAG_BACKUP_SEMANTICS, NULL);
-! }
-
- if (h == INVALID_HANDLE_VALUE)
- goto fail;
---- 1763,1781 ----
- return NULL;
- }
-
-! p = enc_to_utf16(fname, NULL);
-! if (p == NULL)
-! goto fail;
-
-! if ((GetFileAttributesW(p) & FILE_ATTRIBUTE_REPARSE_POINT) == 0)
-! {
- vim_free(p);
-+ goto fail;
- }
-
-! h = CreateFileW(p, 0, 0, NULL, OPEN_EXISTING,
-! FILE_FLAG_BACKUP_SEMANTICS, NULL);
-! vim_free(p);
-
- if (h == INVALID_HANDLE_VALUE)
- goto fail;
-***************
-*** 1988,1995 ****
- IShellLink *psl = NULL;
- IPersistFile *ppf = NULL;
- OLECHAR wsz[MAX_PATH];
-- WIN32_FIND_DATA ffd; // we get those free of charge
-- CHAR buf[MAX_PATH]; // could have simply reused 'wsz'...
- char_u *rfname = NULL;
- int len;
- IShellLinkW *pslw = NULL;
---- 1850,1855 ----
-***************
-*** 2005,2084 ****
-
- CoInitialize(NULL);
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
- {
-! // create a link manager object and request its interface
-! hr = CoCreateInstance(
-! &CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
-! &IID_IShellLinkW, (void**)&pslw);
-! if (hr == S_OK)
-! {
-! WCHAR *p = enc_to_utf16(fname, NULL);
-
-! if (p != NULL)
-! {
-! // Get a pointer to the IPersistFile interface.
-! hr = pslw->lpVtbl->QueryInterface(
-! pslw, &IID_IPersistFile, (void**)&ppf);
-! if (hr != S_OK)
-! goto shortcut_errorw;
-!
-! // "load" the name and resolve the link
-! hr = ppf->lpVtbl->Load(ppf, p, STGM_READ);
-! if (hr != S_OK)
-! goto shortcut_errorw;
-! # if 0 // This makes Vim wait a long time if the target does not exist.
-! hr = pslw->lpVtbl->Resolve(pslw, NULL, SLR_NO_UI);
-! if (hr != S_OK)
-! goto shortcut_errorw;
-! # endif
-
-! // Get the path to the link target.
-! ZeroMemory(wsz, MAX_PATH * sizeof(WCHAR));
-! hr = pslw->lpVtbl->GetPath(pslw, wsz, MAX_PATH, &ffdw, 0);
-! if (hr == S_OK && wsz[0] != NUL)
-! rfname = utf16_to_enc(wsz, NULL);
-
- shortcut_errorw:
-! vim_free(p);
-! goto shortcut_end;
-! }
- }
-- goto shortcut_end;
- }
-- // create a link manager object and request its interface
-- hr = CoCreateInstance(
-- &CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
-- &IID_IShellLink, (void**)&psl);
-- if (hr != S_OK)
-- goto shortcut_end;
--
-- // Get a pointer to the IPersistFile interface.
-- hr = psl->lpVtbl->QueryInterface(
-- psl, &IID_IPersistFile, (void**)&ppf);
-- if (hr != S_OK)
-- goto shortcut_end;
--
-- // full path string must be in Unicode.
-- MultiByteToWideChar(CP_ACP, 0, (LPCSTR)fname, -1, wsz, MAX_PATH);
--
-- // "load" the name and resolve the link
-- hr = ppf->lpVtbl->Load(ppf, wsz, STGM_READ);
-- if (hr != S_OK)
-- goto shortcut_end;
-- # if 0 // This makes Vim wait a long time if the target doesn't exist.
-- hr = psl->lpVtbl->Resolve(psl, NULL, SLR_NO_UI);
-- if (hr != S_OK)
-- goto shortcut_end;
-- # endif
--
-- // Get the path to the link target.
-- ZeroMemory(buf, MAX_PATH);
-- hr = psl->lpVtbl->GetPath(psl, buf, MAX_PATH, &ffd, 0);
-- if (hr == S_OK && buf[0] != NUL)
-- rfname = vim_strsave((char_u *)buf);
-
-- shortcut_end:
- // Release all interface pointers (both belong to the same object)
- if (ppf != NULL)
- ppf->lpVtbl->Release(ppf);
---- 1865,1907 ----
-
- CoInitialize(NULL);
-
-! // create a link manager object and request its interface
-! hr = CoCreateInstance(
-! &CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
-! &IID_IShellLinkW, (void**)&pslw);
-! if (hr == S_OK)
- {
-! WCHAR *p = enc_to_utf16(fname, NULL);
-
-! if (p != NULL)
-! {
-! // Get a pointer to the IPersistFile interface.
-! hr = pslw->lpVtbl->QueryInterface(
-! pslw, &IID_IPersistFile, (void**)&ppf);
-! if (hr != S_OK)
-! goto shortcut_errorw;
-!
-! // "load" the name and resolve the link
-! hr = ppf->lpVtbl->Load(ppf, p, STGM_READ);
-! if (hr != S_OK)
-! goto shortcut_errorw;
-! # if 0 // This makes Vim wait a long time if the target does not exist.
-! hr = pslw->lpVtbl->Resolve(pslw, NULL, SLR_NO_UI);
-! if (hr != S_OK)
-! goto shortcut_errorw;
-! # endif
-
-! // Get the path to the link target.
-! ZeroMemory(wsz, MAX_PATH * sizeof(WCHAR));
-! hr = pslw->lpVtbl->GetPath(pslw, wsz, MAX_PATH, &ffdw, 0);
-! if (hr == S_OK && wsz[0] != NUL)
-! rfname = utf16_to_enc(wsz, NULL);
-
- shortcut_errorw:
-! vim_free(p);
- }
- }
-
- // Release all interface pointers (both belong to the same object)
- if (ppf != NULL)
- ppf->lpVtbl->Release(ppf);
-*** ../vim-8.1.1102/src/os_win32.c 2019-03-30 22:11:17.534968563 +0100
---- src/os_win32.c 2019-04-02 22:14:38.712846295 +0200
-***************
-*** 586,592 ****
- static char *null_libintl_textdomain(const char *);
- static char *null_libintl_bindtextdomain(const char *, const char *);
- static char *null_libintl_bind_textdomain_codeset(const char *, const char *);
-- static int null_libintl_putenv(const char *);
- static int null_libintl_wputenv(const wchar_t *);
-
- static HINSTANCE hLibintlDLL = NULL;
---- 586,591 ----
-***************
-*** 598,604 ****
- = null_libintl_bindtextdomain;
- char *(*dyn_libintl_bind_textdomain_codeset)(const char *, const char *)
- = null_libintl_bind_textdomain_codeset;
-- int (*dyn_libintl_putenv)(const char *) = null_libintl_putenv;
- int (*dyn_libintl_wputenv)(const wchar_t *) = null_libintl_wputenv;
-
- int
---- 597,602 ----
-***************
-*** 666,680 ****
- dyn_libintl_bind_textdomain_codeset =
- null_libintl_bind_textdomain_codeset;
-
-! /* _putenv() function for the libintl.dll is optional. */
- hmsvcrt = find_imported_module_by_funcname(hLibintlDLL, "getenv");
- if (hmsvcrt != NULL)
-- {
-- dyn_libintl_putenv = (void *)GetProcAddress(hmsvcrt, "_putenv");
- dyn_libintl_wputenv = (void *)GetProcAddress(hmsvcrt, "_wputenv");
-- }
-- if (dyn_libintl_putenv == NULL || dyn_libintl_putenv == _putenv)
-- dyn_libintl_putenv = null_libintl_putenv;
- if (dyn_libintl_wputenv == NULL || dyn_libintl_wputenv == _wputenv)
- dyn_libintl_wputenv = null_libintl_wputenv;
-
---- 664,673 ----
- dyn_libintl_bind_textdomain_codeset =
- null_libintl_bind_textdomain_codeset;
-
-! /* _wputenv() function for the libintl.dll is optional. */
- hmsvcrt = find_imported_module_by_funcname(hLibintlDLL, "getenv");
- if (hmsvcrt != NULL)
- dyn_libintl_wputenv = (void *)GetProcAddress(hmsvcrt, "_wputenv");
- if (dyn_libintl_wputenv == NULL || dyn_libintl_wputenv == _wputenv)
- dyn_libintl_wputenv = null_libintl_wputenv;
-
-***************
-*** 692,698 ****
- dyn_libintl_textdomain = null_libintl_textdomain;
- dyn_libintl_bindtextdomain = null_libintl_bindtextdomain;
- dyn_libintl_bind_textdomain_codeset = null_libintl_bind_textdomain_codeset;
-- dyn_libintl_putenv = null_libintl_putenv;
- dyn_libintl_wputenv = null_libintl_wputenv;
- }
-
---- 685,690 ----
-***************
-*** 734,745 ****
- }
-
- static int
-- null_libintl_putenv(const char *envstring UNUSED)
-- {
-- return 0;
-- }
--
-- static int
- null_libintl_wputenv(const wchar_t *envstring UNUSED)
- {
- return 0;
---- 726,731 ----
-***************
-*** 2027,2035 ****
- static int
- executable_exists(char *name, char_u **path, int use_path)
- {
-! char *dum;
-! char fname[_MAX_PATH];
-! char *curpath, *newpath;
- long n;
-
- if (!use_path)
---- 2013,2022 ----
- static int
- executable_exists(char *name, char_u **path, int use_path)
- {
-! WCHAR *p;
-! WCHAR fnamew[_MAX_PATH];
-! WCHAR *dumw;
-! WCHAR *wcurpath, *wnewpath;
- long n;
-
- if (!use_path)
-***************
-*** 2048,2096 ****
- return FALSE;
- }
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! WCHAR *p = enc_to_utf16((char_u *)name, NULL);
-! WCHAR fnamew[_MAX_PATH];
-! WCHAR *dumw;
-! WCHAR *wcurpath, *wnewpath;
-!
-! if (p != NULL)
-! {
-! wcurpath = _wgetenv(L"PATH");
-! wnewpath = (WCHAR*)alloc((unsigned)(wcslen(wcurpath) + 3)
-! * sizeof(WCHAR));
-! if (wnewpath == NULL)
-! return FALSE;
-! wcscpy(wnewpath, L".;");
-! wcscat(wnewpath, wcurpath);
-! n = (long)SearchPathW(wnewpath, p, NULL, _MAX_PATH, fnamew, &dumw);
-! vim_free(wnewpath);
-! vim_free(p);
-! if (n == 0)
-! return FALSE;
-! if (GetFileAttributesW(fnamew) & FILE_ATTRIBUTE_DIRECTORY)
-! return FALSE;
-! if (path != NULL)
-! *path = utf16_to_enc(fnamew, NULL);
-! return TRUE;
-! }
-! }
-
-! curpath = getenv("PATH");
-! newpath = (char*)alloc((unsigned)(STRLEN(curpath) + 3));
-! if (newpath == NULL)
- return FALSE;
-! STRCPY(newpath, ".;");
-! STRCAT(newpath, curpath);
-! n = (long)SearchPath(newpath, name, NULL, _MAX_PATH, fname, &dum);
-! vim_free(newpath);
- if (n == 0)
- return FALSE;
-! if (mch_isdir((char_u *)fname))
- return FALSE;
- if (path != NULL)
-! *path = vim_strsave((char_u *)fname);
- return TRUE;
- }
-
---- 2035,2060 ----
- return FALSE;
- }
-
-! p = enc_to_utf16((char_u *)name, NULL);
-! if (p == NULL)
-! return FALSE;
-
-! wcurpath = _wgetenv(L"PATH");
-! wnewpath = (WCHAR*)alloc((unsigned)(wcslen(wcurpath) + 3)
-! * sizeof(WCHAR));
-! if (wnewpath == NULL)
- return FALSE;
-! wcscpy(wnewpath, L".;");
-! wcscat(wnewpath, wcurpath);
-! n = (long)SearchPathW(wnewpath, p, NULL, _MAX_PATH, fnamew, &dumw);
-! vim_free(wnewpath);
-! vim_free(p);
- if (n == 0)
- return FALSE;
-! if (GetFileAttributesW(fnamew) & FILE_ATTRIBUTE_DIRECTORY)
- return FALSE;
- if (path != NULL)
-! *path = utf16_to_enc(fnamew, NULL);
- return TRUE;
- }
-
-***************
-*** 2812,2842 ****
- char_u *s,
- int len)
- {
-! char szUserName[256 + 1]; /* UNLEN is 256 */
-! DWORD cch = sizeof szUserName;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
- {
-! WCHAR wszUserName[256 + 1]; /* UNLEN is 256 */
-! DWORD wcch = sizeof(wszUserName) / sizeof(WCHAR);
-
-! if (GetUserNameW(wszUserName, &wcch))
- {
-! char_u *p = utf16_to_enc(wszUserName, NULL);
-!
-! if (p != NULL)
-! {
-! vim_strncpy(s, p, len - 1);
-! vim_free(p);
-! return OK;
-! }
- }
- }
-- if (GetUserName(szUserName, &cch))
-- {
-- vim_strncpy(s, (char_u *)szUserName, len - 1);
-- return OK;
-- }
- s[0] = NUL;
- return FAIL;
- }
---- 2776,2795 ----
- char_u *s,
- int len)
- {
-! WCHAR wszUserName[256 + 1]; /* UNLEN is 256 */
-! DWORD wcch = sizeof(wszUserName) / sizeof(WCHAR);
-
-! if (GetUserNameW(wszUserName, &wcch))
- {
-! char_u *p = utf16_to_enc(wszUserName, NULL);
-
-! if (p != NULL)
- {
-! vim_strncpy(s, p, len - 1);
-! vim_free(p);
-! return OK;
- }
- }
- s[0] = NUL;
- return FAIL;
- }
-***************
-*** 2850,2876 ****
- char_u *s,
- int len)
- {
-! DWORD cch = len;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
- {
-! WCHAR wszHostName[256 + 1];
-! DWORD wcch = sizeof(wszHostName) / sizeof(WCHAR);
-
-! if (GetComputerNameW(wszHostName, &wcch))
- {
-! char_u *p = utf16_to_enc(wszHostName, NULL);
-!
-! if (p != NULL)
-! {
-! vim_strncpy(s, p, len - 1);
-! vim_free(p);
-! return;
-! }
- }
- }
-- if (!GetComputerName((LPSTR)s, &cch))
-- vim_strncpy(s, (char_u *)"PC (Win32 Vim)", len - 1);
- }
-
-
---- 2803,2822 ----
- char_u *s,
- int len)
- {
-! WCHAR wszHostName[256 + 1];
-! DWORD wcch = sizeof(wszHostName) / sizeof(WCHAR);
-
-! if (GetComputerNameW(wszHostName, &wcch))
- {
-! char_u *p = utf16_to_enc(wszHostName, NULL);
-
-! if (p != NULL)
- {
-! vim_strncpy(s, p, len - 1);
-! vim_free(p);
-! return;
- }
- }
- }
-
-
-***************
-*** 2893,2900 ****
- char_u *buf,
- int len)
- {
-! char_u abuf[_MAX_PATH + 1];
-! DWORD lfnlen;
-
- /*
- * Originally this was:
---- 2839,2845 ----
- char_u *buf,
- int len)
- {
-! WCHAR wbuf[_MAX_PATH + 1];
-
- /*
- * Originally this was:
-***************
-*** 2902,2948 ****
- * But the Win32s known bug list says that getcwd() doesn't work
- * so use the Win32 system call instead. <Negri>
- */
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
- {
-! WCHAR wbuf[_MAX_PATH + 1];
-
-! if (GetCurrentDirectoryW(_MAX_PATH, wbuf) != 0)
- {
-! WCHAR wcbuf[_MAX_PATH + 1];
-! char_u *p = NULL;
-!
-! if (GetLongPathNameW(wbuf, wcbuf, _MAX_PATH) != 0)
-! {
-! p = utf16_to_enc(wcbuf, NULL);
-! if (STRLEN(p) >= (size_t)len)
-! {
-! // long path name is too long, fall back to short one
-! vim_free(p);
-! p = NULL;
-! }
-! }
-! if (p == NULL)
-! p = utf16_to_enc(wbuf, NULL);
-!
-! if (p != NULL)
- {
-! vim_strncpy(buf, p, len - 1);
- vim_free(p);
-! return OK;
- }
- }
-! return FAIL;
-! }
-! if (GetCurrentDirectory(len, (LPSTR)buf) == 0)
-! return FAIL;
-! lfnlen = GetLongPathNameA((LPCSTR)buf, (LPSTR)abuf, _MAX_PATH);
-! if (lfnlen == 0 || lfnlen >= (DWORD)len)
-! // Failed to get long path name or it's too long: fall back to the
-! // short path name.
-! return OK;
-
-! STRCPY(buf, abuf);
-! return OK;
- }
-
- /*
---- 2847,2878 ----
- * But the Win32s known bug list says that getcwd() doesn't work
- * so use the Win32 system call instead. <Negri>
- */
-! if (GetCurrentDirectoryW(_MAX_PATH, wbuf) != 0)
- {
-! WCHAR wcbuf[_MAX_PATH + 1];
-! char_u *p = NULL;
-
-! if (GetLongPathNameW(wbuf, wcbuf, _MAX_PATH) != 0)
- {
-! p = utf16_to_enc(wcbuf, NULL);
-! if (STRLEN(p) >= (size_t)len)
- {
-! // long path name is too long, fall back to short one
- vim_free(p);
-! p = NULL;
- }
- }
-! if (p == NULL)
-! p = utf16_to_enc(wbuf, NULL);
-
-! if (p != NULL)
-! {
-! vim_strncpy(buf, p, len - 1);
-! vim_free(p);
-! return OK;
-! }
-! }
-! return FAIL;
- }
-
- /*
-***************
-*** 2968,2989 ****
- int
- mch_setperm(char_u *name, long perm)
- {
-! long n = -1;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! WCHAR *p = enc_to_utf16(name, NULL);
-
-! if (p != NULL)
-! {
-! n = _wchmod(p, perm);
-! vim_free(p);
-! if (n == -1)
-! return FAIL;
-! }
-! }
-! if (n == -1)
-! n = _chmod((const char *)name, perm);
- if (n == -1)
- return FAIL;
-
---- 2898,2912 ----
- int
- mch_setperm(char_u *name, long perm)
- {
-! long n;
-! WCHAR *p;
-
-! p = enc_to_utf16(name, NULL);
-! if (p == NULL)
-! return FAIL;
-
-! n = _wchmod(p, perm);
-! vim_free(p);
- if (n == -1)
- return FAIL;
-
-***************
-*** 3053,3071 ****
- int
- mch_mkdir(char_u *name)
- {
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! WCHAR *p;
-! int retval;
-
-! p = enc_to_utf16(name, NULL);
-! if (p == NULL)
-! return -1;
-! retval = _wmkdir(p);
-! vim_free(p);
-! return retval;
-! }
-! return _mkdir((const char *)name);
- }
-
- /*
---- 2976,2990 ----
- int
- mch_mkdir(char_u *name)
- {
-! WCHAR *p;
-! int retval;
-
-! p = enc_to_utf16(name, NULL);
-! if (p == NULL)
-! return -1;
-! retval = _wmkdir(p);
-! vim_free(p);
-! return retval;
- }
-
- /*
-***************
-*** 3075,3093 ****
- int
- mch_rmdir(char_u *name)
- {
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! WCHAR *p;
-! int retval;
-
-! p = enc_to_utf16(name, NULL);
-! if (p == NULL)
-! return -1;
-! retval = _wrmdir(p);
-! vim_free(p);
-! return retval;
-! }
-! return _rmdir((const char *)name);
- }
-
- /*
---- 2994,3008 ----
- int
- mch_rmdir(char_u *name)
- {
-! WCHAR *p;
-! int retval;
-
-! p = enc_to_utf16(name, NULL);
-! if (p == NULL)
-! return -1;
-! retval = _wrmdir(p);
-! vim_free(p);
-! return retval;
- }
-
- /*
-***************
-*** 3110,3144 ****
- {
- HANDLE hFind;
- int res = FALSE;
-- WIN32_FIND_DATAA findDataA;
- DWORD fileFlags = 0, reparseTag = 0;
-! WCHAR *wn = NULL;
- WIN32_FIND_DATAW findDataW;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! wn = enc_to_utf16(name, NULL);
-! if (wn != NULL)
-! {
-! hFind = FindFirstFileW(wn, &findDataW);
-! vim_free(wn);
-! if (hFind != INVALID_HANDLE_VALUE)
-! {
-! fileFlags = findDataW.dwFileAttributes;
-! reparseTag = findDataW.dwReserved0;
-! }
-! }
-! else
-! {
-! hFind = FindFirstFile((LPCSTR)name, &findDataA);
-! if (hFind != INVALID_HANDLE_VALUE)
-! {
-! fileFlags = findDataA.dwFileAttributes;
-! reparseTag = findDataA.dwReserved0;
-! }
-! }
-
- if (hFind != INVALID_HANDLE_VALUE)
- FindClose(hFind);
-
- if ((fileFlags & FILE_ATTRIBUTE_REPARSE_POINT)
- && (reparseTag == IO_REPARSE_TAG_SYMLINK
---- 3025,3046 ----
- {
- HANDLE hFind;
- int res = FALSE;
- DWORD fileFlags = 0, reparseTag = 0;
-! WCHAR *wn;
- WIN32_FIND_DATAW findDataW;
-
-! wn = enc_to_utf16(name, NULL);
-! if (wn == NULL)
-! return FALSE;
-
-+ hFind = FindFirstFileW(wn, &findDataW);
-+ vim_free(wn);
- if (hFind != INVALID_HANDLE_VALUE)
-+ {
-+ fileFlags = findDataW.dwFileAttributes;
-+ reparseTag = findDataW.dwReserved0;
- FindClose(hFind);
-+ }
-
- if ((fileFlags & FILE_ATTRIBUTE_REPARSE_POINT)
- && (reparseTag == IO_REPARSE_TAG_SYMLINK
-***************
-*** 3172,3204 ****
- {
- HANDLE hFile;
- int res = FILEINFO_READ_FAIL;
-! WCHAR *wn = NULL;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! wn = enc_to_utf16(fname, NULL);
-! if (wn == NULL)
-! return FILEINFO_ENC_FAIL;
-! }
-! if (wn != NULL)
-! {
-! hFile = CreateFileW(wn, /* file name */
-! GENERIC_READ, /* access mode */
-! FILE_SHARE_READ | FILE_SHARE_WRITE, /* share mode */
-! NULL, /* security descriptor */
-! OPEN_EXISTING, /* creation disposition */
-! FILE_FLAG_BACKUP_SEMANTICS, /* file attributes */
-! NULL); /* handle to template file */
-! vim_free(wn);
-! }
-! else
-! hFile = CreateFile((LPCSTR)fname, /* file name */
-! GENERIC_READ, /* access mode */
-! FILE_SHARE_READ | FILE_SHARE_WRITE, /* share mode */
-! NULL, /* security descriptor */
-! OPEN_EXISTING, /* creation disposition */
-! FILE_FLAG_BACKUP_SEMANTICS, /* file attributes */
-! NULL); /* handle to template file */
-
- if (hFile != INVALID_HANDLE_VALUE)
- {
---- 3074,3093 ----
- {
- HANDLE hFile;
- int res = FILEINFO_READ_FAIL;
-! WCHAR *wn;
-
-! wn = enc_to_utf16(fname, NULL);
-! if (wn == NULL)
-! return FILEINFO_ENC_FAIL;
-!
-! hFile = CreateFileW(wn, // file name
-! GENERIC_READ, // access mode
-! FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
-! NULL, // security descriptor
-! OPEN_EXISTING, // creation disposition
-! FILE_FLAG_BACKUP_SEMANTICS, // file attributes
-! NULL); // handle to template file
-! vim_free(wn);
-
- if (hFile != INVALID_HANDLE_VALUE)
- {
-***************
-*** 3221,3238 ****
- win32_getattrs(char_u *name)
- {
- int attr;
-! WCHAR *p = NULL;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! p = enc_to_utf16(name, NULL);
-
-! if (p != NULL)
-! {
-! attr = GetFileAttributesW(p);
-! vim_free(p);
-! }
-! else
-! attr = GetFileAttributes((char *)name);
-
- return attr;
- }
---- 3110,3123 ----
- win32_getattrs(char_u *name)
- {
- int attr;
-! WCHAR *p;
-
-! p = enc_to_utf16(name, NULL);
-! if (p == NULL)
-! return INVALID_FILE_ATTRIBUTES;
-
-! attr = GetFileAttributesW(p);
-! vim_free(p);
-
- return attr;
- }
-***************
-*** 3245,3263 ****
- static int
- win32_setattrs(char_u *name, int attrs)
- {
-! int res;
-! WCHAR *p = NULL;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! p = enc_to_utf16(name, NULL);
-
-! if (p != NULL)
-! {
-! res = SetFileAttributesW(p, attrs);
-! vim_free(p);
-! }
-! else
-! res = SetFileAttributes((char *)name, attrs);
-
- return res ? 0 : -1;
- }
---- 3130,3144 ----
- static int
- win32_setattrs(char_u *name, int attrs)
- {
-! int res;
-! WCHAR *p;
-
-! p = enc_to_utf16(name, NULL);
-! if (p == NULL)
-! return -1;
-
-! res = SetFileAttributesW(p, attrs);
-! vim_free(p);
-
- return res ? 0 : -1;
- }
-***************
-*** 3375,3381 ****
- {
- HANDLE hFile;
- int type;
-! WCHAR *wn = NULL;
-
- /* We can't open a file with a name "\\.\con" or "\\.\prn" and trying to
- * read from it later will cause Vim to hang. Thus return NODE_WRITABLE
---- 3256,3262 ----
- {
- HANDLE hFile;
- int type;
-! WCHAR *wn;
-
- /* We can't open a file with a name "\\.\con" or "\\.\prn" and trying to
- * read from it later will cause Vim to hang. Thus return NODE_WRITABLE
-***************
-*** 3383,3411 ****
- if (STRNCMP(name, "\\\\.\\", 4) == 0)
- return NODE_WRITABLE;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! wn = enc_to_utf16(name, NULL);
-!
-! if (wn != NULL)
-! {
-! hFile = CreateFileW(wn, /* file name */
-! GENERIC_WRITE, /* access mode */
-! 0, /* share mode */
-! NULL, /* security descriptor */
-! OPEN_EXISTING, /* creation disposition */
-! 0, /* file attributes */
-! NULL); /* handle to template file */
-! vim_free(wn);
-! }
-! else
-! hFile = CreateFile((LPCSTR)name, /* file name */
-! GENERIC_WRITE, /* access mode */
-! 0, /* share mode */
-! NULL, /* security descriptor */
-! OPEN_EXISTING, /* creation disposition */
-! 0, /* file attributes */
-! NULL); /* handle to template file */
-
- if (hFile == INVALID_HANDLE_VALUE)
- return NODE_NORMAL;
-
---- 3264,3281 ----
- if (STRNCMP(name, "\\\\.\\", 4) == 0)
- return NODE_WRITABLE;
-
-! wn = enc_to_utf16(name, NULL);
-! if (wn == NULL)
-! return NODE_NORMAL;
-
-+ hFile = CreateFileW(wn, // file name
-+ GENERIC_WRITE, // access mode
-+ 0, // share mode
-+ NULL, // security descriptor
-+ OPEN_EXISTING, // creation disposition
-+ 0, // file attributes
-+ NULL); // handle to template file
-+ vim_free(wn);
- if (hFile == INVALID_HANDLE_VALUE)
- return NODE_NORMAL;
-
-***************
-*** 3445,3525 ****
- p = (struct my_acl *)alloc_clear((unsigned)sizeof(struct my_acl));
- if (p != NULL)
- {
-! WCHAR *wn = NULL;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! wn = enc_to_utf16(fname, NULL);
-! if (wn != NULL)
-! {
-! /* Try to retrieve the entire security descriptor. */
-! err = GetNamedSecurityInfoW(
-! wn, // Abstract filename
-! SE_FILE_OBJECT, // File Object
-! OWNER_SECURITY_INFORMATION |
-! GROUP_SECURITY_INFORMATION |
-! DACL_SECURITY_INFORMATION |
-! SACL_SECURITY_INFORMATION,
-! &p->pSidOwner, // Ownership information.
-! &p->pSidGroup, // Group membership.
-! &p->pDacl, // Discretionary information.
-! &p->pSacl, // For auditing purposes.
- &p->pSecurityDescriptor);
-- if (err == ERROR_ACCESS_DENIED ||
-- err == ERROR_PRIVILEGE_NOT_HELD)
-- {
-- /* Retrieve only DACL. */
-- (void)GetNamedSecurityInfoW(
-- wn,
-- SE_FILE_OBJECT,
-- DACL_SECURITY_INFORMATION,
-- NULL,
-- NULL,
-- &p->pDacl,
-- NULL,
-- &p->pSecurityDescriptor);
-- }
-- if (p->pSecurityDescriptor == NULL)
-- {
-- mch_free_acl((vim_acl_T)p);
-- p = NULL;
-- }
-- vim_free(wn);
- }
-! else
- {
-! /* Try to retrieve the entire security descriptor. */
-! err = GetNamedSecurityInfo(
-! (LPSTR)fname, // Abstract filename
-! SE_FILE_OBJECT, // File Object
-! OWNER_SECURITY_INFORMATION |
-! GROUP_SECURITY_INFORMATION |
-! DACL_SECURITY_INFORMATION |
-! SACL_SECURITY_INFORMATION,
-! &p->pSidOwner, // Ownership information.
-! &p->pSidGroup, // Group membership.
-! &p->pDacl, // Discretionary information.
-! &p->pSacl, // For auditing purposes.
-! &p->pSecurityDescriptor);
-! if (err == ERROR_ACCESS_DENIED ||
-! err == ERROR_PRIVILEGE_NOT_HELD)
-! {
-! /* Retrieve only DACL. */
-! (void)GetNamedSecurityInfo(
-! (LPSTR)fname,
-! SE_FILE_OBJECT,
-! DACL_SECURITY_INFORMATION,
-! NULL,
-! NULL,
-! &p->pDacl,
-! NULL,
-! &p->pSecurityDescriptor);
-! }
-! if (p->pSecurityDescriptor == NULL)
-! {
-! mch_free_acl((vim_acl_T)p);
-! p = NULL;
-! }
- }
- }
-
- return (vim_acl_T)p;
---- 3315,3359 ----
- p = (struct my_acl *)alloc_clear((unsigned)sizeof(struct my_acl));
- if (p != NULL)
- {
-! WCHAR *wn;
-!
-! wn = enc_to_utf16(fname, NULL);
-! if (wn == NULL)
-! return NULL;
-
-! // Try to retrieve the entire security descriptor.
-! err = GetNamedSecurityInfoW(
-! wn, // Abstract filename
-! SE_FILE_OBJECT, // File Object
-! OWNER_SECURITY_INFORMATION |
-! GROUP_SECURITY_INFORMATION |
-! DACL_SECURITY_INFORMATION |
-! SACL_SECURITY_INFORMATION,
-! &p->pSidOwner, // Ownership information.
-! &p->pSidGroup, // Group membership.
-! &p->pDacl, // Discretionary information.
-! &p->pSacl, // For auditing purposes.
-! &p->pSecurityDescriptor);
-! if (err == ERROR_ACCESS_DENIED ||
-! err == ERROR_PRIVILEGE_NOT_HELD)
-! {
-! // Retrieve only DACL.
-! (void)GetNamedSecurityInfoW(
-! wn,
-! SE_FILE_OBJECT,
-! DACL_SECURITY_INFORMATION,
-! NULL,
-! NULL,
-! &p->pDacl,
-! NULL,
- &p->pSecurityDescriptor);
- }
-! if (p->pSecurityDescriptor == NULL)
- {
-! mch_free_acl((vim_acl_T)p);
-! p = NULL;
- }
-+ vim_free(wn);
- }
-
- return (vim_acl_T)p;
-***************
-*** 3560,3615 ****
- #ifdef HAVE_ACL
- struct my_acl *p = (struct my_acl *)acl;
- SECURITY_INFORMATION sec_info = 0;
-
-! if (p != NULL)
-! {
-! WCHAR *wn = NULL;
-
-! /* Set security flags */
-! if (p->pSidOwner)
-! sec_info |= OWNER_SECURITY_INFORMATION;
-! if (p->pSidGroup)
-! sec_info |= GROUP_SECURITY_INFORMATION;
-! if (p->pDacl)
-! {
-! sec_info |= DACL_SECURITY_INFORMATION;
-! /* Do not inherit its parent's DACL.
-! * If the DACL is inherited, Cygwin permissions would be changed.
-! */
-! if (!is_acl_inherited(p->pDacl))
-! sec_info |= PROTECTED_DACL_SECURITY_INFORMATION;
-! }
-! if (p->pSacl)
-! sec_info |= SACL_SECURITY_INFORMATION;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! wn = enc_to_utf16(fname, NULL);
-! if (wn != NULL)
-! {
-! (void)SetNamedSecurityInfoW(
-! wn, // Abstract filename
-! SE_FILE_OBJECT, // File Object
-! sec_info,
-! p->pSidOwner, // Ownership information.
-! p->pSidGroup, // Group membership.
-! p->pDacl, // Discretionary information.
-! p->pSacl // For auditing purposes.
-! );
-! vim_free(wn);
-! }
-! else
-! {
-! (void)SetNamedSecurityInfo(
-! (LPSTR)fname, // Abstract filename
-! SE_FILE_OBJECT, // File Object
-! sec_info,
-! p->pSidOwner, // Ownership information.
-! p->pSidGroup, // Group membership.
-! p->pDacl, // Discretionary information.
-! p->pSacl // For auditing purposes.
-! );
-! }
-! }
- #endif
- }
-
---- 3394,3434 ----
- #ifdef HAVE_ACL
- struct my_acl *p = (struct my_acl *)acl;
- SECURITY_INFORMATION sec_info = 0;
-+ WCHAR *wn;
-
-! if (p == NULL)
-! return;
-
-! wn = enc_to_utf16(fname, NULL);
-! if (wn == NULL)
-! return;
-
-! // Set security flags
-! if (p->pSidOwner)
-! sec_info |= OWNER_SECURITY_INFORMATION;
-! if (p->pSidGroup)
-! sec_info |= GROUP_SECURITY_INFORMATION;
-! if (p->pDacl)
-! {
-! sec_info |= DACL_SECURITY_INFORMATION;
-! // Do not inherit its parent's DACL.
-! // If the DACL is inherited, Cygwin permissions would be changed.
-! if (!is_acl_inherited(p->pDacl))
-! sec_info |= PROTECTED_DACL_SECURITY_INFORMATION;
-! }
-! if (p->pSacl)
-! sec_info |= SACL_SECURITY_INFORMATION;
-!
-! (void)SetNamedSecurityInfoW(
-! wn, // Abstract filename
-! SE_FILE_OBJECT, // File Object
-! sec_info,
-! p->pSidOwner, // Ownership information.
-! p->pSidGroup, // Group membership.
-! p->pDacl, // Discretionary information.
-! p->pSacl // For auditing purposes.
-! );
-! vim_free(wn);
- #endif
- }
-
-***************
-*** 3955,4005 ****
- LPVOID *env,
- char *cwd)
- {
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! BOOL ret;
-! WCHAR *wcmd, *wcwd = NULL;
-
-! wcmd = enc_to_utf16((char_u *)cmd, NULL);
-! if (wcmd == NULL)
-! goto fallback;
-! if (cwd != NULL)
-! {
-! wcwd = enc_to_utf16((char_u *)cwd, NULL);
-! if (wcwd == NULL)
-! {
-! vim_free(wcmd);
-! goto fallback;
-! }
-! }
-!
-! ret = CreateProcessW(
-! NULL, /* Executable name */
-! wcmd, /* Command to execute */
-! NULL, /* Process security attributes */
-! NULL, /* Thread security attributes */
-! inherit_handles, /* Inherit handles */
-! flags, /* Creation flags */
-! env, /* Environment */
-! wcwd, /* Current directory */
-! (LPSTARTUPINFOW)si, /* Startup information */
-! pi); /* Process information */
-! vim_free(wcmd);
-! vim_free(wcwd);
-! return ret;
-! }
-! fallback:
-! return CreateProcess(
-! NULL, /* Executable name */
-! cmd, /* Command to execute */
-! NULL, /* Process security attributes */
-! NULL, /* Thread security attributes */
-! inherit_handles, /* Inherit handles */
-! flags, /* Creation flags */
-! env, /* Environment */
-! cwd, /* Current directory */
-! si, /* Startup information */
-! pi); /* Process information */
- }
-
-
---- 3774,3807 ----
- LPVOID *env,
- char *cwd)
- {
-! BOOL ret = FALSE;
-! WCHAR *wcmd, *wcwd = NULL;
-
-! wcmd = enc_to_utf16((char_u *)cmd, NULL);
-! if (wcmd == NULL)
-! return FALSE;
-! if (cwd != NULL)
-! {
-! wcwd = enc_to_utf16((char_u *)cwd, NULL);
-! if (wcwd == NULL)
-! goto theend;
-! }
-!
-! ret = CreateProcessW(
-! NULL, // Executable name
-! wcmd, // Command to execute
-! NULL, // Process security attributes
-! NULL, // Thread security attributes
-! inherit_handles, // Inherit handles
-! flags, // Creation flags
-! env, // Environment
-! wcwd, // Current directory
-! (LPSTARTUPINFOW)si, // Startup information
-! pi); // Process information
-! theend:
-! vim_free(wcmd);
-! vim_free(wcwd);
-! return ret;
- }
-
-
-***************
-*** 4008,4025 ****
- char *cmd,
- INT n_show_cmd)
- {
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! WCHAR *wcmd = enc_to_utf16((char_u *)cmd, NULL);
-! if (wcmd != NULL)
-! {
-! HINSTANCE ret;
-! ret = ShellExecuteW(NULL, NULL, wcmd, NULL, NULL, n_show_cmd);
-! vim_free(wcmd);
-! return ret;
-! }
-! }
-! return ShellExecute(NULL, NULL, cmd, NULL, NULL, n_show_cmd);
- }
-
-
---- 3810,3825 ----
- char *cmd,
- INT n_show_cmd)
- {
-! HINSTANCE ret;
-! WCHAR *wcmd;
-!
-! wcmd = enc_to_utf16((char_u *)cmd, NULL);
-! if (wcmd == NULL)
-! return (HINSTANCE) 0;
-!
-! ret = ShellExecuteW(NULL, NULL, wcmd, NULL, NULL, n_show_cmd);
-! vim_free(wcmd);
-! return ret;
- }
-
-
-***************
-*** 4582,4598 ****
- static int
- mch_system(char *cmd, int options)
- {
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! WCHAR *wcmd = enc_to_utf16((char_u *)cmd, NULL);
-! if (wcmd != NULL)
-! {
-! int ret = _wsystem(wcmd);
-! vim_free(wcmd);
-! return ret;
-! }
-! }
-! return system(cmd);
- }
-
- #endif
---- 4382,4397 ----
- static int
- mch_system(char *cmd, int options)
- {
-! int ret;
-! WCHAR *wcmd;
-!
-! wcmd = enc_to_utf16((char_u *)cmd, NULL);
-! if (wcmd == NULL)
-! return -1;
-!
-! ret = _wsystem(wcmd);
-! vim_free(wcmd);
-! return ret;
- }
-
- #endif
-***************
-*** 4692,4742 ****
- int x = 0;
- int tmode = cur_tmode;
- #ifdef FEAT_TITLE
-! char szShellTitle[512];
-! int did_set_title = FALSE;
-
- /* Change the title to reflect that we are in a subshell. */
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
- {
-! WCHAR szShellTitle[512];
-!
-! if (GetConsoleTitleW(szShellTitle,
-! sizeof(szShellTitle)/sizeof(WCHAR) - 4) > 0)
- {
-! if (cmd == NULL)
-! wcscat(szShellTitle, L" :sh");
-! else
-! {
-! WCHAR *wn = enc_to_utf16((char_u *)cmd, NULL);
-
-! if (wn != NULL)
-! {
-! wcscat(szShellTitle, L" - !");
-! if ((wcslen(szShellTitle) + wcslen(wn) <
-! sizeof(szShellTitle)/sizeof(WCHAR)))
-! wcscat(szShellTitle, wn);
-! SetConsoleTitleW(szShellTitle);
-! vim_free(wn);
-! did_set_title = TRUE;
-! }
-! }
-! }
-! }
-! if (!did_set_title)
-! /* Change the title to reflect that we are in a subshell. */
-! if (GetConsoleTitle(szShellTitle, sizeof(szShellTitle) - 4) > 0)
-! {
-! if (cmd == NULL)
-! strcat(szShellTitle, " :sh");
-! else
- {
-! strcat(szShellTitle, " - !");
-! if ((strlen(szShellTitle) + strlen((char *)cmd)
-! < sizeof(szShellTitle)))
-! strcat(szShellTitle, (char *)cmd);
- }
-- SetConsoleTitle(szShellTitle);
- }
- #endif
-
- out_flush();
---- 4491,4519 ----
- int x = 0;
- int tmode = cur_tmode;
- #ifdef FEAT_TITLE
-! WCHAR szShellTitle[512];
-
- /* Change the title to reflect that we are in a subshell. */
-! if (GetConsoleTitleW(szShellTitle,
-! sizeof(szShellTitle)/sizeof(WCHAR) - 4) > 0)
- {
-! if (cmd == NULL)
-! wcscat(szShellTitle, L" :sh");
-! else
- {
-! WCHAR *wn = enc_to_utf16((char_u *)cmd, NULL);
-
-! if (wn != NULL)
- {
-! wcscat(szShellTitle, L" - !");
-! if ((wcslen(szShellTitle) + wcslen(wn) <
-! sizeof(szShellTitle)/sizeof(WCHAR)))
-! wcscat(szShellTitle, wn);
-! SetConsoleTitleW(szShellTitle);
-! vim_free(wn);
- }
- }
-+ }
- #endif
-
- out_flush();
-***************
-*** 4936,4953 ****
- "External commands will not pause after completion.\n"
- "See :help win32-vimrun for more information.");
- char *title = _("Vim Warning");
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! WCHAR *wmsg = enc_to_utf16((char_u *)msg, NULL);
-! WCHAR *wtitle = enc_to_utf16((char_u *)title, NULL);
-
-! if (wmsg != NULL && wtitle != NULL)
-! MessageBoxW(NULL, wmsg, wtitle, MB_ICONWARNING);
-! vim_free(wmsg);
-! vim_free(wtitle);
-! }
-! else
-! MessageBox(NULL, msg, title, MB_ICONWARNING);
- need_vimrun_warning = FALSE;
- }
- if (!s_dont_use_vimrun && p_stmp)
---- 4713,4725 ----
- "External commands will not pause after completion.\n"
- "See :help win32-vimrun for more information.");
- char *title = _("Vim Warning");
-! WCHAR *wmsg = enc_to_utf16((char_u *)msg, NULL);
-! WCHAR *wtitle = enc_to_utf16((char_u *)title, NULL);
-
-! if (wmsg != NULL && wtitle != NULL)
-! MessageBoxW(NULL, wmsg, wtitle, MB_ICONWARNING);
-! vim_free(wmsg);
-! vim_free(wtitle);
- need_vimrun_warning = FALSE;
- }
- if (!s_dont_use_vimrun && p_stmp)
-***************
-*** 5011,5033 ****
- DWORD dwFlagsAndAttributes)
- {
- HANDLE h;
-! WCHAR *wn = NULL;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! wn = enc_to_utf16(fname, NULL);
-! if (wn != NULL)
-! {
-! h = CreateFileW(wn, dwDesiredAccess, dwShareMode,
-! lpSecurityAttributes, dwCreationDisposition,
-! dwFlagsAndAttributes, NULL);
-! vim_free(wn);
-! }
-! }
- if (wn == NULL)
-! h = CreateFile((LPCSTR)fname, dwDesiredAccess, dwShareMode,
-! lpSecurityAttributes, dwCreationDisposition,
-! dwFlagsAndAttributes, NULL);
- return h;
- }
-
---- 4783,4798 ----
- DWORD dwFlagsAndAttributes)
- {
- HANDLE h;
-! WCHAR *wn;
-
-! wn = enc_to_utf16(fname, NULL);
- if (wn == NULL)
-! return INVALID_HANDLE_VALUE;
-!
-! h = CreateFileW(wn, dwDesiredAccess, dwShareMode,
-! lpSecurityAttributes, dwCreationDisposition,
-! dwFlagsAndAttributes, NULL);
-! vim_free(wn);
- return h;
- }
-
-***************
-*** 6085,6165 ****
- char_u *pchBuf,
- DWORD cbToWrite)
- {
-! COORD coord = g_coord;
-! DWORD written;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
- {
-! static WCHAR *unicodebuf = NULL;
-! static int unibuflen = 0;
-! int length;
-! DWORD n, cchwritten, cells;
-!
-! length = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)pchBuf, cbToWrite, 0, 0);
-! if (unicodebuf == NULL || length > unibuflen)
-! {
-! vim_free(unicodebuf);
-! unicodebuf = (WCHAR *)lalloc(length * sizeof(WCHAR), FALSE);
-! unibuflen = length;
-! }
-! MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)pchBuf, cbToWrite,
-! unicodebuf, unibuflen);
-!
-! cells = mb_string2cells(pchBuf, cbToWrite);
-!
-! if (!USE_VTP)
-! {
-! FillConsoleOutputAttribute(g_hConOut, g_attrCurrent, cells,
-! coord, &written);
-! /* When writing fails or didn't write a single character, pretend one
-! * character was written, otherwise we get stuck. */
-! if (WriteConsoleOutputCharacterW(g_hConOut, unicodebuf, length,
-! coord, &cchwritten) == 0
-! || cchwritten == 0 || cchwritten == (DWORD)-1)
-! cchwritten = 1;
-! }
-! else
-! {
-! if (WriteConsoleW(g_hConOut, unicodebuf, length, &cchwritten,
- NULL) == 0 || cchwritten == 0)
-! cchwritten = 1;
-! }
-
-! if (cchwritten == length)
-! {
-! written = cbToWrite;
-! g_coord.X += (SHORT)cells;
-! }
-! else
-! {
-! char_u *p = pchBuf;
-! for (n = 0; n < cchwritten; n++)
-! MB_CPTR_ADV(p);
-! written = p - pchBuf;
-! g_coord.X += (SHORT)mb_string2cells(pchBuf, written);
-! }
- }
- else
- {
-! if (!USE_VTP)
-! {
-! FillConsoleOutputAttribute(g_hConOut, g_attrCurrent, cbToWrite,
-! coord, &written);
-! /* When writing fails or didn't write a single character, pretend one
-! * character was written, otherwise we get stuck. */
-! if (WriteConsoleOutputCharacter(g_hConOut, (LPCSTR)pchBuf, cbToWrite,
-! coord, &written) == 0
-! || written == 0 || written == (DWORD)-1)
-! written = 1;
-! }
-! else
-! {
-! if (WriteConsole(g_hConOut, (LPCSTR)pchBuf, cbToWrite, &written,
-! NULL) == 0 || written == 0)
-! written = 1;
-! }
-!
-! g_coord.X += (SHORT) written;
- }
-
- while (g_coord.X > g_srScrollRegion.Right)
---- 5850,5905 ----
- char_u *pchBuf,
- DWORD cbToWrite)
- {
-! COORD coord = g_coord;
-! DWORD written;
-! DWORD n, cchwritten, cells;
-! static WCHAR *unicodebuf = NULL;
-! static int unibuflen = 0;
-! int length;
-! int cp = enc_utf8 ? CP_UTF8 : enc_codepage;
-!
-! length = MultiByteToWideChar(cp, 0, (LPCSTR)pchBuf, cbToWrite, 0, 0);
-! if (unicodebuf == NULL || length > unibuflen)
-! {
-! vim_free(unicodebuf);
-! unicodebuf = (WCHAR *)lalloc(length * sizeof(WCHAR), FALSE);
-! unibuflen = length;
-! }
-! MultiByteToWideChar(cp, 0, (LPCSTR)pchBuf, cbToWrite,
-! unicodebuf, unibuflen);
-!
-! cells = mb_string2cells(pchBuf, cbToWrite);
-
-! if (!USE_VTP)
- {
-! FillConsoleOutputAttribute(g_hConOut, g_attrCurrent, cells,
-! coord, &written);
-! // When writing fails or didn't write a single character, pretend one
-! // character was written, otherwise we get stuck.
-! if (WriteConsoleOutputCharacterW(g_hConOut, unicodebuf, length,
-! coord, &cchwritten) == 0
-! || cchwritten == 0 || cchwritten == (DWORD)-1)
-! cchwritten = 1;
-! }
-! else
-! {
-! if (WriteConsoleW(g_hConOut, unicodebuf, length, &cchwritten,
- NULL) == 0 || cchwritten == 0)
-! cchwritten = 1;
-! }
-
-! if (cchwritten == length)
-! {
-! written = cbToWrite;
-! g_coord.X += (SHORT)cells;
- }
- else
- {
-! char_u *p = pchBuf;
-! for (n = 0; n < cchwritten; n++)
-! MB_CPTR_ADV(p);
-! written = p - pchBuf;
-! g_coord.X += (SHORT)mb_string2cells(pchBuf, written);
- }
-
- while (g_coord.X > g_srScrollRegion.Right)
-***************
-*** 6518,6524 ****
- int
- mch_remove(char_u *name)
- {
-! WCHAR *wn = NULL;
- int n;
-
- /*
---- 6258,6264 ----
- int
- mch_remove(char_u *name)
- {
-! WCHAR *wn;
- int n;
-
- /*
-***************
-*** 6530,6546 ****
-
- win32_setattrs(name, FILE_ATTRIBUTE_NORMAL);
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! wn = enc_to_utf16(name, NULL);
-! if (wn != NULL)
-! {
-! n = DeleteFileW(wn) ? 0 : -1;
-! vim_free(wn);
-! return n;
-! }
-! }
-! return DeleteFile((LPCSTR)name) ? 0 : -1;
- }
-
-
---- 6270,6282 ----
-
- win32_setattrs(name, FILE_ATTRIBUTE_NORMAL);
-
-! wn = enc_to_utf16(name, NULL);
-! if (wn == NULL)
-! return -1;
-!
-! n = DeleteFileW(wn) ? 0 : -1;
-! vim_free(wn);
-! return n;
- }
-
-
-***************
-*** 6590,6597 ****
- }
-
- /*
-! * Same code as below, but with wide functions and no comments.
-! * Return 0 for success, non-zero for failure.
- */
- int
- mch_wrename(WCHAR *wold, WCHAR *wnew)
---- 6326,6348 ----
- }
-
- /*
-! * mch_wrename() works around a bug in rename (aka MoveFile) in
-! * Windows 95: rename("foo.bar", "foo.bar~") will generate a
-! * file whose short file name is "FOO.BAR" (its long file name will
-! * be correct: "foo.bar~"). Because a file can be accessed by
-! * either its SFN or its LFN, "foo.bar" has effectively been
-! * renamed to "foo.bar", which is not at all what was wanted. This
-! * seems to happen only when renaming files with three-character
-! * extensions by appending a suffix that does not include ".".
-! * Windows NT gets it right, however, with an SFN of "FOO~1.BAR".
-! *
-! * There is another problem, which isn't really a bug but isn't right either:
-! * When renaming "abcdef~1.txt" to "abcdef~1.txt~", the short name can be
-! * "abcdef~1.txt" again. This has been reported on Windows NT 4.0 with
-! * service pack 6. Doesn't seem to happen on Windows 98.
-! *
-! * Like rename(), returns 0 upon success, non-zero upon failure.
-! * Should probably set errno appropriately when errors occur.
- */
- int
- mch_wrename(WCHAR *wold, WCHAR *wnew)
-***************
-*** 6602,6607 ****
---- 6353,6360 ----
- WCHAR szNewPath[_MAX_PATH + 1];
- HANDLE hf;
-
-+ // No need to play tricks unless the file name contains a "~" as the
-+ // seventh character.
- p = wold;
- for (i = 0; wold[i] != NUL; ++i)
- if ((wold[i] == '/' || wold[i] == '\\' || wold[i] == ':')
-***************
-*** 6610,6642 ****
---- 6363,6414 ----
- if ((int)(wold + i - p) < 8 || p[6] != '~')
- return (MoveFileW(wold, wnew) == 0);
-
-+ // Get base path of new file name. Undocumented feature: If pszNewFile is
-+ // a directory, no error is returned and pszFilePart will be NULL.
- if (GetFullPathNameW(wnew, _MAX_PATH, szNewPath, &p) == 0 || p == NULL)
- return -1;
- *p = NUL;
-
-+ // Get (and create) a unique temporary file name in directory of new file
- if (GetTempFileNameW(szNewPath, L"VIM", 0, szTempFile) == 0)
- return -2;
-
-+ // blow the temp file away
- if (!DeleteFileW(szTempFile))
- return -3;
-
-+ // rename old file to the temp file
- if (!MoveFileW(wold, szTempFile))
- return -4;
-
-+ // now create an empty file called pszOldFile; this prevents the operating
-+ // system using pszOldFile as an alias (SFN) if we're renaming within the
-+ // same directory. For example, we're editing a file called
-+ // filename.asc.txt by its SFN, filena~1.txt. If we rename filena~1.txt
-+ // to filena~1.txt~ (i.e., we're making a backup while writing it), the
-+ // SFN for filena~1.txt~ will be filena~1.txt, by default, which will
-+ // cause all sorts of problems later in buf_write(). So, we create an
-+ // empty file called filena~1.txt and the system will have to find some
-+ // other SFN for filena~1.txt~, such as filena~2.txt
- if ((hf = CreateFileW(wold, GENERIC_WRITE, 0, NULL, CREATE_NEW,
- FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE)
- return -5;
- if (!CloseHandle(hf))
- return -6;
-
-+ // rename the temp file to the new file
- if (!MoveFileW(szTempFile, wnew))
- {
-+ // Renaming failed. Rename the file back to its old name, so that it
-+ // looks like nothing happened.
- (void)MoveFileW(szTempFile, wold);
- return -7;
- }
-
-+ // Seems to be left around on Novell filesystems
- DeleteFileW(szTempFile);
-
-+ // finally, remove the empty old file
- if (!DeleteFileW(wold))
- return -8;
-
-***************
-*** 6645,6753 ****
-
-
- /*
-! * mch_rename() works around a bug in rename (aka MoveFile) in
-! * Windows 95: rename("foo.bar", "foo.bar~") will generate a
-! * file whose short file name is "FOO.BAR" (its long file name will
-! * be correct: "foo.bar~"). Because a file can be accessed by
-! * either its SFN or its LFN, "foo.bar" has effectively been
-! * renamed to "foo.bar", which is not at all what was wanted. This
-! * seems to happen only when renaming files with three-character
-! * extensions by appending a suffix that does not include ".".
-! * Windows NT gets it right, however, with an SFN of "FOO~1.BAR".
-! *
-! * There is another problem, which isn't really a bug but isn't right either:
-! * When renaming "abcdef~1.txt" to "abcdef~1.txt~", the short name can be
-! * "abcdef~1.txt" again. This has been reported on Windows NT 4.0 with
-! * service pack 6. Doesn't seem to happen on Windows 98.
-! *
- * Like rename(), returns 0 upon success, non-zero upon failure.
-- * Should probably set errno appropriately when errors occur.
- */
- int
- mch_rename(
- const char *pszOldFile,
- const char *pszNewFile)
- {
-- char szTempFile[_MAX_PATH+1];
-- char szNewPath[_MAX_PATH+1];
-- char *pszFilePart;
-- HANDLE hf;
- WCHAR *wold = NULL;
- WCHAR *wnew = NULL;
- int retval = -1;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! wold = enc_to_utf16((char_u *)pszOldFile, NULL);
-! wnew = enc_to_utf16((char_u *)pszNewFile, NULL);
-! if (wold != NULL && wnew != NULL)
-! retval = mch_wrename(wold, wnew);
-! vim_free(wold);
-! vim_free(wnew);
-! return retval;
-! }
-!
-! /*
-! * No need to play tricks unless the file name contains a "~" as the
-! * seventh character.
-! */
-! pszFilePart = (char *)gettail((char_u *)pszOldFile);
-! if (STRLEN(pszFilePart) < 8 || pszFilePart[6] != '~')
-! return rename(pszOldFile, pszNewFile);
-!
-! /* Get base path of new file name. Undocumented feature: If pszNewFile is
-! * a directory, no error is returned and pszFilePart will be NULL. */
-! if (GetFullPathName(pszNewFile, _MAX_PATH, szNewPath, &pszFilePart) == 0
-! || pszFilePart == NULL)
-! return -1;
-! *pszFilePart = NUL;
-!
-! /* Get (and create) a unique temporary file name in directory of new file */
-! if (GetTempFileName(szNewPath, "VIM", 0, szTempFile) == 0)
-! return -2;
-!
-! /* blow the temp file away */
-! if (!DeleteFile(szTempFile))
-! return -3;
-!
-! /* rename old file to the temp file */
-! if (!MoveFile(pszOldFile, szTempFile))
-! return -4;
-!
-! /* now create an empty file called pszOldFile; this prevents the operating
-! * system using pszOldFile as an alias (SFN) if we're renaming within the
-! * same directory. For example, we're editing a file called
-! * filename.asc.txt by its SFN, filena~1.txt. If we rename filena~1.txt
-! * to filena~1.txt~ (i.e., we're making a backup while writing it), the
-! * SFN for filena~1.txt~ will be filena~1.txt, by default, which will
-! * cause all sorts of problems later in buf_write(). So, we create an
-! * empty file called filena~1.txt and the system will have to find some
-! * other SFN for filena~1.txt~, such as filena~2.txt
-! */
-! if ((hf = CreateFile(pszOldFile, GENERIC_WRITE, 0, NULL, CREATE_NEW,
-! FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE)
-! return -5;
-! if (!CloseHandle(hf))
-! return -6;
-!
-! /* rename the temp file to the new file */
-! if (!MoveFile(szTempFile, pszNewFile))
-! {
-! /* Renaming failed. Rename the file back to its old name, so that it
-! * looks like nothing happened. */
-! (void)MoveFile(szTempFile, pszOldFile);
-!
-! return -7;
-! }
-!
-! /* Seems to be left around on Novell filesystems */
-! DeleteFile(szTempFile);
-!
-! /* finally, remove the empty old file */
-! if (!DeleteFile(pszOldFile))
-! return -8;
-!
-! return 0; /* success */
- }
-
- /*
---- 6417,6441 ----
-
-
- /*
-! * Converts the filenames to UTF-16, then call mch_wrename().
- * Like rename(), returns 0 upon success, non-zero upon failure.
- */
- int
- mch_rename(
- const char *pszOldFile,
- const char *pszNewFile)
- {
- WCHAR *wold = NULL;
- WCHAR *wnew = NULL;
- int retval = -1;
-
-! wold = enc_to_utf16((char_u *)pszOldFile, NULL);
-! wnew = enc_to_utf16((char_u *)pszNewFile, NULL);
-! if (wold != NULL && wnew != NULL)
-! retval = mch_wrename(wold, wnew);
-! vim_free(wold);
-! vim_free(wnew);
-! return retval;
- }
-
- /*
-***************
-*** 6768,6822 ****
- {
- HANDLE hFile;
- int retval = -1; /* default: fail */
-! WCHAR *wn = NULL;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! wn = enc_to_utf16((char_u *)n, NULL);
-
- if (mch_isdir((char_u *)n))
- {
-- char TempName[_MAX_PATH + 16] = "";
- WCHAR TempNameW[_MAX_PATH + 16] = L"";
-
- if (p & R_OK)
- {
- /* Read check is performed by seeing if we can do a find file on
- * the directory for any file. */
-! if (wn != NULL)
-! {
-! int i;
-! WIN32_FIND_DATAW d;
-
-! for (i = 0; i < _MAX_PATH && wn[i] != 0; ++i)
-! TempNameW[i] = wn[i];
-! if (TempNameW[i - 1] != '\\' && TempNameW[i - 1] != '/')
-! TempNameW[i++] = '\\';
-! TempNameW[i++] = '*';
-! TempNameW[i++] = 0;
-!
-! hFile = FindFirstFileW(TempNameW, &d);
-! if (hFile == INVALID_HANDLE_VALUE)
-! goto getout;
-! else
-! (void)FindClose(hFile);
-! }
- else
-- {
-- char *pch;
-- WIN32_FIND_DATA d;
--
-- vim_strncpy((char_u *)TempName, (char_u *)n, _MAX_PATH);
-- pch = TempName + STRLEN(TempName) - 1;
-- if (*pch != '\\' && *pch != '/')
-- *++pch = '\\';
-- *++pch = '*';
-- *++pch = NUL;
--
-- hFile = FindFirstFile(TempName, &d);
-- if (hFile == INVALID_HANDLE_VALUE)
-- goto getout;
- (void)FindClose(hFile);
-- }
- }
-
- if (p & W_OK)
---- 6456,6490 ----
- {
- HANDLE hFile;
- int retval = -1; /* default: fail */
-! WCHAR *wn;
-
-! wn = enc_to_utf16((char_u *)n, NULL);
-! if (wn == NULL)
-! return -1;
-
- if (mch_isdir((char_u *)n))
- {
- WCHAR TempNameW[_MAX_PATH + 16] = L"";
-
- if (p & R_OK)
- {
- /* Read check is performed by seeing if we can do a find file on
- * the directory for any file. */
-! int i;
-! WIN32_FIND_DATAW d;
-
-! for (i = 0; i < _MAX_PATH && wn[i] != 0; ++i)
-! TempNameW[i] = wn[i];
-! if (TempNameW[i - 1] != '\\' && TempNameW[i - 1] != '/')
-! TempNameW[i++] = '\\';
-! TempNameW[i++] = '*';
-! TempNameW[i++] = 0;
-!
-! hFile = FindFirstFileW(TempNameW, &d);
-! if (hFile == INVALID_HANDLE_VALUE)
-! goto getout;
- else
- (void)FindClose(hFile);
- }
-
- if (p & W_OK)
-***************
-*** 6825,6843 ****
- * directories on read-only network shares. However, in
- * directories whose ACL allows writes but denies deletes will end
- * up keeping the temporary file :-(. */
-! if (wn != NULL)
-! {
-! if (!GetTempFileNameW(wn, L"VIM", 0, TempNameW))
-! goto getout;
-! else
-! DeleteFileW(TempNameW);
-! }
- else
-! {
-! if (!GetTempFileName(n, "VIM", 0, TempName))
-! goto getout;
-! mch_remove((char_u *)TempName);
-! }
- }
- }
- else
---- 6493,6502 ----
- * directories on read-only network shares. However, in
- * directories whose ACL allows writes but denies deletes will end
- * up keeping the temporary file :-(. */
-! if (!GetTempFileNameW(wn, L"VIM", 0, TempNameW))
-! goto getout;
- else
-! DeleteFileW(TempNameW);
- }
- }
- else
-***************
-*** 6850,6861 ****
- DWORD access_mode = ((p & W_OK) ? GENERIC_WRITE : 0)
- | ((p & R_OK) ? GENERIC_READ : 0);
-
-! if (wn != NULL)
-! hFile = CreateFileW(wn, access_mode, share_mode,
-! NULL, OPEN_EXISTING, 0, NULL);
-! else
-! hFile = CreateFile(n, access_mode, share_mode,
-! NULL, OPEN_EXISTING, 0, NULL);
- if (hFile == INVALID_HANDLE_VALUE)
- goto getout;
- CloseHandle(hFile);
---- 6509,6516 ----
- DWORD access_mode = ((p & W_OK) ? GENERIC_WRITE : 0)
- | ((p & R_OK) ? GENERIC_READ : 0);
-
-! hFile = CreateFileW(wn, access_mode, share_mode,
-! NULL, OPEN_EXISTING, 0, NULL);
- if (hFile == INVALID_HANDLE_VALUE)
- goto getout;
- CloseHandle(hFile);
-***************
-*** 6878,6895 ****
- WCHAR *wn;
- int f;
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! wn = enc_to_utf16((char_u *)name, NULL);
-! if (wn != NULL)
-! {
-! f = _wopen(wn, flags, mode);
-! vim_free(wn);
-! return f;
-! }
-! }
-! #endif
-
- /* open() can open a file which name is longer than _MAX_PATH bytes
- * and shorter than _MAX_PATH characters successfully, but sometimes it
- * causes unexpected error in another part. We make it an error explicitly
---- 6533,6546 ----
- WCHAR *wn;
- int f;
-
-! wn = enc_to_utf16((char_u *)name, NULL);
-! if (wn == NULL)
-! return -1;
-
-+ f = _wopen(wn, flags, mode);
-+ vim_free(wn);
-+ return f;
-+ #else
- /* open() can open a file which name is longer than _MAX_PATH bytes
- * and shorter than _MAX_PATH characters successfully, but sometimes it
- * causes unexpected error in another part. We make it an error explicitly
-***************
-*** 6898,6907 ****
- return -1;
-
- return open(name, flags, mode);
- }
-
- /*
-! * Version of fopen() that may use UTF-16 file name.
- */
- FILE *
- mch_fopen(const char *name, const char *mode)
---- 6549,6559 ----
- return -1;
-
- return open(name, flags, mode);
-+ #endif
- }
-
- /*
-! * Version of fopen() that uses UTF-16 file name.
- */
- FILE *
- mch_fopen(const char *name, const char *mode)
-***************
-*** 6909,6949 ****
- WCHAR *wn, *wm;
- FILE *f = NULL;
-
-- if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-- {
- #if defined(DEBUG) && _MSC_VER >= 1400
-! /* Work around an annoying assertion in the Microsoft debug CRT
-! * when mode's text/binary setting doesn't match _get_fmode(). */
-! char newMode = mode[strlen(mode) - 1];
-! int oldMode = 0;
-!
-! _get_fmode(&oldMode);
-! if (newMode == 't')
-! _set_fmode(_O_TEXT);
-! else if (newMode == 'b')
-! _set_fmode(_O_BINARY);
-! #endif
-! wn = enc_to_utf16((char_u *)name, NULL);
-! wm = enc_to_utf16((char_u *)mode, NULL);
-! if (wn != NULL && wm != NULL)
-! f = _wfopen(wn, wm);
-! vim_free(wn);
-! vim_free(wm);
-
- #if defined(DEBUG) && _MSC_VER >= 1400
-! _set_fmode(oldMode);
- #endif
-! return f;
-! }
-!
-! /* fopen() can open a file which name is longer than _MAX_PATH bytes
-! * and shorter than _MAX_PATH characters successfully, but sometimes it
-! * causes unexpected error in another part. We make it an error explicitly
-! * here. */
-! if (strlen(name) >= _MAX_PATH)
-! return NULL;
-!
-! return fopen(name, mode);
- }
-
- /*
---- 6561,6589 ----
- WCHAR *wn, *wm;
- FILE *f = NULL;
-
- #if defined(DEBUG) && _MSC_VER >= 1400
-! /* Work around an annoying assertion in the Microsoft debug CRT
-! * when mode's text/binary setting doesn't match _get_fmode(). */
-! char newMode = mode[strlen(mode) - 1];
-! int oldMode = 0;
-!
-! _get_fmode(&oldMode);
-! if (newMode == 't')
-! _set_fmode(_O_TEXT);
-! else if (newMode == 'b')
-! _set_fmode(_O_BINARY);
-! #endif
-! wn = enc_to_utf16((char_u *)name, NULL);
-! wm = enc_to_utf16((char_u *)mode, NULL);
-! if (wn != NULL && wm != NULL)
-! f = _wfopen(wn, wm);
-! vim_free(wn);
-! vim_free(wm);
-
- #if defined(DEBUG) && _MSC_VER >= 1400
-! _set_fmode(oldMode);
- #endif
-! return f;
- }
-
- /*
-***************
-*** 7418,7423 ****
---- 7058,7064 ----
- mch_setenv(char *var, char *value, int x)
- {
- char_u *envbuf;
-+ WCHAR *p;
-
- envbuf = alloc((unsigned)(STRLEN(var) + STRLEN(value) + 2));
- if (envbuf == NULL)
-***************
-*** 7425,7453 ****
-
- sprintf((char *)envbuf, "%s=%s", var, value);
-
-! if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-! {
-! WCHAR *p = enc_to_utf16(envbuf, NULL);
-
-! vim_free(envbuf);
-! if (p == NULL)
-! return -1;
-! _wputenv(p);
- #ifdef libintl_wputenv
-! libintl_wputenv(p);
- #endif
-! /* Unlike Un*x systems, we can free the string for _wputenv(). */
-! vim_free(p);
-! }
-! else
-! {
-! _putenv((char *)envbuf);
-! #ifdef libintl_putenv
-! libintl_putenv((char *)envbuf);
-! #endif
-! /* Unlike Un*x systems, we can free the string for _putenv(). */
-! vim_free(envbuf);
-! }
-
- return 0;
- }
---- 7066,7082 ----
-
- sprintf((char *)envbuf, "%s=%s", var, value);
-
-! p = enc_to_utf16(envbuf, NULL);
-
-! vim_free(envbuf);
-! if (p == NULL)
-! return -1;
-! _wputenv(p);
- #ifdef libintl_wputenv
-! libintl_wputenv(p);
- #endif
-! // Unlike Un*x systems, we can free the string for _wputenv().
-! vim_free(p);
-
- return 0;
- }
-*** ../vim-8.1.1102/src/vim.h 2019-02-19 21:24:50.559543423 +0100
---- src/vim.h 2019-04-02 22:04:17.789655489 +0200
-***************
-*** 536,542 ****
- extern char *(*dyn_libintl_bindtextdomain)(const char *domainname, const char *dirname);
- extern char *(*dyn_libintl_bind_textdomain_codeset)(const char *domainname, const char *codeset);
- extern char *(*dyn_libintl_textdomain)(const char *domainname);
-! extern int (*dyn_libintl_putenv)(const char *envstring);
- #endif
-
-
---- 536,542 ----
- extern char *(*dyn_libintl_bindtextdomain)(const char *domainname, const char *dirname);
- extern char *(*dyn_libintl_bind_textdomain_codeset)(const char *domainname, const char *codeset);
- extern char *(*dyn_libintl_textdomain)(const char *domainname);
-! extern int (*dyn_libintl_wputenv)(const wchar_t *envstring);
- #endif
-
-
-***************
-*** 559,565 ****
- # define HAVE_BIND_TEXTDOMAIN_CODESET 1
- # endif
- # define textdomain(domain) (*dyn_libintl_textdomain)(domain)
-- # define libintl_putenv(envstring) (*dyn_libintl_putenv)(envstring)
- # define libintl_wputenv(envstring) (*dyn_libintl_wputenv)(envstring)
- # else
- # include <libintl.h>
---- 559,564 ----
-*** ../vim-8.1.1102/src/version.c 2019-04-02 22:02:28.606347252 +0200
---- src/version.c 2019-04-02 22:05:50.325066421 +0200
-***************
-*** 773,774 ****
---- 773,776 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 1103,
- /**/
-
---
-hundred-and-one symptoms of being an internet addict:
-183. You move your coffeemaker next to your computer.
-
- /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
-/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\ an exciting new programming language -- http://www.Zimbu.org ///
- \\\ help me help AIDS victims -- http://ICCF-Holland.org ///