To: vim_dev@googlegroups.com Subject: Patch 9.0.1560 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 9.0.1560 Problem: Win32: When 'encoding' is set $PATH has duplicate entries. Solution: Only append the directory if it is not there yet. (Ken Takata, closes #12400, closes #12372) Files: src/os_win32.c *** ../vim-9.0.1559/src/os_win32.c 2023-05-11 22:25:37.681434047 +0100 --- src/os_win32.c 2023-05-15 16:39:34.819978611 +0100 *************** *** 466,475 **** mch_get_exe_name(void) { // Maximum length of $PATH is more than MAXPATHL. 8191 is often mentioned ! // as the maximum length that works (plus a NUL byte). ! #define MAX_ENV_PATH_LEN 8192 ! char temp[MAX_ENV_PATH_LEN]; ! char_u *p; WCHAR buf[MAX_PATH]; int updated = FALSE; static int enc_prev = -1; --- 466,475 ---- mch_get_exe_name(void) { // Maximum length of $PATH is more than MAXPATHL. 8191 is often mentioned ! // as the maximum length that works. Add 1 for a NUL byte and 5 for ! // "PATH=". ! #define MAX_ENV_PATH_LEN (8191 + 1 + 5) ! WCHAR temp[MAX_ENV_PATH_LEN]; WCHAR buf[MAX_PATH]; int updated = FALSE; static int enc_prev = -1; *************** *** 482,497 **** { if (enc_codepage == -1) enc_codepage = GetACP(); ! if (exe_name != NULL) ! vim_free(exe_name); exe_name = utf16_to_enc(buf, NULL); enc_prev = enc_codepage; WCHAR *wp = wcsrchr(buf, '\\'); if (wp != NULL) *wp = NUL; ! if (exe_pathw != NULL) ! vim_free(exe_pathw); exe_pathw = _wcsdup(buf); updated = TRUE; } --- 482,495 ---- { if (enc_codepage == -1) enc_codepage = GetACP(); ! vim_free(exe_name); exe_name = utf16_to_enc(buf, NULL); enc_prev = enc_codepage; WCHAR *wp = wcsrchr(buf, '\\'); if (wp != NULL) *wp = NUL; ! vim_free(exe_pathw); exe_pathw = _wcsdup(buf); updated = TRUE; } *************** *** 500,527 **** if (exe_pathw == NULL || !updated) return; - char_u *exe_path = utf16_to_enc(exe_pathw, NULL); - if (exe_path == NULL) - return; - // Append our starting directory to $PATH, so that when doing // "!xxd" it's found in our starting directory. Needed because // SearchPath() also looks there. ! p = mch_getenv("PATH"); ! if (p == NULL ! || STRLEN(p) + STRLEN(exe_path) + 2 < MAX_ENV_PATH_LEN) { if (p == NULL || *p == NUL) ! temp[0] = NUL; else { ! STRCPY(temp, p); ! STRCAT(temp, ";"); } ! STRCAT(temp, exe_path); ! vim_setenv((char_u *)"PATH", (char_u *)temp); } - vim_free(exe_path); } /* --- 498,533 ---- if (exe_pathw == NULL || !updated) return; // Append our starting directory to $PATH, so that when doing // "!xxd" it's found in our starting directory. Needed because // SearchPath() also looks there. ! WCHAR *p = _wgetenv(L"PATH"); ! if (p == NULL || wcslen(p) + wcslen(exe_pathw) + 2 + 5 < MAX_ENV_PATH_LEN) { + wcscpy(temp, L"PATH="); + if (p == NULL || *p == NUL) ! wcscat(temp, exe_pathw); else { ! wcscat(temp, p); ! ! // Check if exe_path is already included in $PATH. ! if (wcsstr(temp, exe_pathw) == NULL) ! { ! // Append ';' if $PATH doesn't end with it. ! size_t len = wcslen(temp); ! if (temp[len - 1] != L';') ! wcscat(temp, L";"); ! ! wcscat(temp, exe_pathw); ! } } ! _wputenv(temp); ! #ifdef libintl_wputenv ! libintl_wputenv(temp); ! #endif } } /* *************** *** 558,567 **** // NOTE: Do not use mch_dirname() and mch_chdir() here, they may call // vimLoadLib() recursively, which causes a stack overflow. if (exe_pathw == NULL) mch_get_exe_name(); ! ! if (exe_pathw == NULL) ! return NULL; WCHAR old_dirw[MAXPATHL]; --- 564,574 ---- // NOTE: Do not use mch_dirname() and mch_chdir() here, they may call // vimLoadLib() recursively, which causes a stack overflow. if (exe_pathw == NULL) + { mch_get_exe_name(); ! if (exe_pathw == NULL) ! return NULL; ! } WCHAR old_dirw[MAXPATHL]; *** ../vim-9.0.1559/src/version.c 2023-05-15 16:22:34.403075980 +0100 --- src/version.c 2023-05-15 16:41:07.460038919 +0100 *************** *** 697,698 **** --- 697,700 ---- { /* Add new patch number below this line */ + /**/ + 1560, /**/ -- hundred-and-one symptoms of being an internet addict: 36. You miss more than five meals a week downloading the latest games from Apogee. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///