]> granicus.if.org Git - vim/commitdiff
patch 8.1.0084: user name completion does not work on MS-Windows v8.1.0084
authorBram Moolenaar <Bram@vim.org>
Tue, 19 Jun 2018 16:58:07 +0000 (18:58 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 19 Jun 2018 16:58:07 +0000 (18:58 +0200)
Problem:    User name completion does not work on MS-Windows.
Solution:   Use NetUserEnum() to get user names. (Yasuhiro Matsumoto)

src/Make_cyg_ming.mak
src/Make_ivc.mak
src/Make_mvc.mak
src/misc1.c
src/version.c

index d51b6ea89896ea662036c9cce9458a2d384fd3ae..cdec101fbb5e413d7cdeb34e72079dab844cb936 100644 (file)
@@ -662,7 +662,7 @@ endif
 CFLAGS += -s
 endif
 
-LIB = -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32 -lversion
+LIB = -lkernel32 -luser32 -lgdi32 -ladvapi32 -lcomdlg32 -lcomctl32 -lnetapi32 -lversion
 GUIOBJ =  $(OUTDIR)/gui.o $(OUTDIR)/gui_w32.o $(OUTDIR)/gui_beval.o $(OUTDIR)/os_w32exe.o
 CUIOBJ = $(OUTDIR)/iscygpty.o
 OBJ = \
index d90477c7617de44f83cf3787b818f6ca427f79c3..c8c1c2f97a35554a51c9f9d5640389ce9ba86f43 100644 (file)
@@ -88,7 +88,7 @@ LINK32=link.exe
 CPP_PROJ= /nologo /MT /W3 /GX /I ".\proto" /D "WIN32" /c
 # ADD CPP /nologo /MT /W3 /GX /I ".\proto" /D "WIN32" /c
 
-LINK32_FLAGS= oldnames.lib kernel32.lib user32.lib gdi32.lib version.lib comdlg32.lib comctl32.lib advapi32.lib shell32.lib ole32.lib uuid.lib /nologo /machine:I386 /nodefaultlib
+LINK32_FLAGS= oldnames.lib kernel32.lib user32.lib gdi32.lib version.lib comdlg32.lib comctl32.lib advapi32.lib shell32.lib ole32.lib netapi32.lib uuid.lib /nologo /machine:I386 /nodefaultlib
 # ADD LINK32  oldnames.lib kernel32.lib user32.lib gdi32.lib version.lib comdlg32.lib comctl32.lib advapi32.lib shell32.lib ole32.lib uuid.lib /nologo /machine:I386 /nodefaultlib
 # SUBTRACT LINK32 /incremental:yes
 
index 5ca53808771fd180369e18f16e7f35eeb95d637d..8cb443c7c54cd7199f44de56f26d1a509417a412 100644 (file)
@@ -489,10 +489,11 @@ NETBEANS_LIB      = WSock32.lib
 
 # need advapi32.lib for GetUserName()
 # need shell32.lib for ExtractIcon()
+# need netapi32.lib for NetUserEnum()
 # gdi32.lib and comdlg32.lib for printing support
 # ole32.lib and uuid.lib are needed for FEAT_SHORTCUT
 CON_LIB = oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32.lib \
-          comdlg32.lib ole32.lib uuid.lib /machine:$(CPU)
+          comdlg32.lib ole32.lib netapi32.lib uuid.lib /machine:$(CPU)
 !if "$(DELAYLOAD)" == "yes"
 CON_LIB = $(CON_LIB) /DELAYLOAD:comdlg32.dll /DELAYLOAD:ole32.dll DelayImp.lib
 !endif
@@ -801,7 +802,7 @@ GUI_OBJ = \
        $(OUTDIR)\os_w32exe.obj
 GUI_LIB = \
        gdi32.lib version.lib $(IME_LIB) \
-       winspool.lib comctl32.lib advapi32.lib shell32.lib \
+       winspool.lib comctl32.lib advapi32.lib shell32.lib netapi32.lib \
        /machine:$(CPU)
 !else
 SUBSYSTEM = console
index 76f50258ad962b265791be4899362fb6d3d7dad4..d797a0bc65ad5714df8f16aa1767a21f22a1c294 100644 (file)
 #include "vim.h"
 #include "version.h"
 
+#if defined(FEAT_CMDL_COMPL) && defined(WIN3264)
+# include <lm.h>
+#endif
+
 static char_u *vim_version_dir(char_u *vimdir);
 static char_u *remove_tail(char_u *p, char_u *pend, char_u *name);
 #if defined(FEAT_CMDL_COMPL)
@@ -4603,6 +4607,28 @@ init_users(void)
            }
        endpwent();
     }
+# elif defined(WIN3264)
+    {
+       char_u*         user;
+       DWORD           nusers = 0, ntotal = 0, i;
+       PUSER_INFO_0    uinfo;
+
+       if (NetUserEnum(NULL, 0, 0, (LPBYTE *) &uinfo, MAX_PREFERRED_LENGTH,
+                                      &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
 }
 
index 20cd3803cd78e4d80ef56b282c8b930fe08a89e7..9d4d4493b538a1fc23030e9c3b401d50032190e1 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    84,
 /**/
     83,
 /**/