To: vim_dev@googlegroups.com Subject: Patch 8.1.0361 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.1.0361 Problem: Remote user not used for completion. (Stucki) Solution: Use $USER too. (Dominique Pelle, closes #3407) Files: src/misc1.c *** ../vim-8.1.0360/src/misc1.c 2018-08-26 21:23:03.400383307 +0200 --- src/misc1.c 2018-09-10 18:53:46.863908096 +0200 *************** *** 4717,4722 **** --- 4717,4741 ---- } /* + * Add a user name to the list of users in ga_users. + * Do nothing if user name is NULL or empty. + */ + static void + add_user(char_u *user, int need_copy) + { + char_u *user_copy = (user != NULL && need_copy) + ? vim_strsave(user) : user; + + if (user_copy == NULL || *user_copy == NUL || ga_grow(&ga_users, 1) == FAIL) + { + if (need_copy) + vim_free(user); + return; + } + ((char_u **)(ga_users.ga_data))[ga_users.ga_len++] = user_copy; + } + + /* * Find all user names for user completion. * Done only once and then cached. */ *************** *** 4733,4758 **** # if defined(HAVE_GETPWENT) && defined(HAVE_PWD_H) { - char_u* user; struct passwd* pw; setpwent(); while ((pw = getpwent()) != NULL) ! /* pw->pw_name shouldn't be NULL but just in case... */ ! if (pw->pw_name != NULL) ! { ! if (ga_grow(&ga_users, 1) == FAIL) ! break; ! user = vim_strsave((char_u*)pw->pw_name); ! if (user == NULL) ! break; ! ((char_u **)(ga_users.ga_data))[ga_users.ga_len++] = user; ! } endpwent(); } # elif defined(WIN3264) { - char_u* user; DWORD nusers = 0, ntotal = 0, i; PUSER_INFO_0 uinfo; --- 4752,4766 ---- # if defined(HAVE_GETPWENT) && defined(HAVE_PWD_H) { struct passwd* pw; setpwent(); while ((pw = getpwent()) != NULL) ! add_user((char_u *)pw->pw_name, TRUE); endpwent(); } # elif defined(WIN3264) { DWORD nusers = 0, ntotal = 0, i; PUSER_INFO_0 uinfo; *************** *** 4760,4775 **** &nusers, &ntotal, NULL) == NERR_Success) { for (i = 0; i < nusers; i++) { ! if (ga_grow(&ga_users, 1) == FAIL) ! break; ! user = utf16_to_enc(uinfo[i].usri0_name, NULL); ! if (user == NULL) break; - ((char_u **)(ga_users.ga_data))[ga_users.ga_len++] = user; } ! NetApiBufferFree(uinfo); } } # endif --- 4768,4808 ---- &nusers, &ntotal, NULL) == NERR_Success) { for (i = 0; i < nusers; i++) + add_user(utf16_to_enc(uinfo[i].usri0_name, NULL), FALSE); + + NetApiBufferFree(uinfo); + } + } + # endif + # if defined(HAVE_GETPWNAM) + { + char_u *user_env = mch_getenv((char_u *)"USER"); + + // The $USER environment variable may be a valid remote user name (NIS, + // LDAP) not already listed by getpwent(), as getpwent() only lists + // local user names. If $USER is not already listed, check whether it + // is a valid remote user name using getpwnam() and if it is, add it to + // the list of user names. + + if (user_env != NULL && *user_env != NUL) + { + int i; + + for (i = 0; i < ga_users.ga_len; i++) { ! char_u *local_user = ((char_u **)ga_users.ga_data)[i]; ! ! if (STRCMP(local_user, user_env) == 0) break; } ! if (i == ga_users.ga_len) ! { ! struct passwd *pw = getpwnam((char *)user_env); ! ! if (pw != NULL) ! add_user((char_u *)pw->pw_name, TRUE); ! } } } # endif *** ../vim-8.1.0360/src/version.c 2018-09-10 17:50:32.717306902 +0200 --- src/version.c 2018-09-10 18:48:00.579950668 +0200 *************** *** 796,797 **** --- 796,799 ---- { /* Add new patch number below this line */ + /**/ + 361, /**/ -- "You know, it's at times like this when I'm trapped in a Vogon airlock with a man from Betelgeuse and about to die of asphyxiation in deep space that I really wish I'd listened to what my mother told me when I was young!" "Why, what did she tell you?" "I don't know, I didn't listen!" -- Arthur Dent and Ford Prefect in Douglas Adams' "The Hitchhiker's Guide to the Galaxy" /// 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 ///