@@ -582,40 +582,28 @@ CF_EXPORT CFURLRef CFCopyHomeDirectoryURLForUser(CFStringRef uName) {
582582 return CFCopyHomeDirectoryURL ();
583583 }
584584
585- CFStringRef home = NULL ;
586- LPUSER_INFO_1 pBuffer = NULL ;
587- DWORD dwEntriesRead = 0 ;
588- DWORD dwEntries = 0 ;
589- DWORD dwToken = 0 ;
590- NTSTATUS nStatus ;
591- do {
592- nStatus = NetUserEnum (NULL , 1 , FILTER_NORMAL_ACCOUNT , (LPBYTE * )& pBuffer ,
593- MAX_PREFERRED_LENGTH , & dwEntriesRead , & dwEntries ,
594- & dwToken );
595- if (nStatus == NERR_Success || nStatus == ERROR_MORE_DATA ) {
596- for (unsigned uiEntry = 0 ; !home && uiEntry < dwEntriesRead ; ++ uiEntry ) {
597- CFStringRef name =
598- CFStringCreateWithCStringNoCopy (kCFAllocatorSystemDefault ,
599- pBuffer [uiEntry ].usri1_name ,
600- kCFStringEncodingUTF16 ,
601- kCFAllocatorNull );
602-
603- if (CFEqual (uName , name )) {
604- home = pBuffer [uiEntry ].usri1_home_dir
605- ? CFStringCreateWithCString (kCFAllocatorSystemDefault ,
606- pBuffer [uiEntry ].usri1_home_dir ,
607- kCFStringEncodingUTF16 )
608- : CFSTR ("" );
609- }
610-
611- CFRelease (name );
612- }
613- }
614- NetApiBufferFree (pBuffer );
615- pBuffer = NULL ;
616- } while (nStatus == ERROR_MORE_DATA );
617-
618- return home ;
585+ CFIndex ulLength = CFStringGetLength (uName );
586+
587+ UniChar * buffer = calloc (ulLength + 1 , sizeof (UniChar ));
588+ if (buffer == NULL )
589+ return NULL ;
590+ CFStringGetCharacters (uName , CFRangeMake (0 , ulLength ), buffer );
591+
592+ CFURLRef url = NULL ;
593+ LPUSER_INFO_1 lpUI1 = NULL ;
594+ if (NetUserGetInfo (NULL , buffer , 1 , (LPBYTE * )& lpUI1 ) == NERR_Success ) {
595+ CFStringRef path =
596+ CFStringCreateWithCharacters (kCFAllocatorSystemDefault ,
597+ lpUI1 -> usri1_home_dir ,
598+ wcslen (lpUI1 -> usri1_home_dir ));
599+ url = CFURLCreateWithFileSystemPath (kCFAllocatorSystemDefault , path ,
600+ kCFURLWindowsPathStyle , true);
601+ CFRelease (path );
602+ NetApiBufferFree (lpUI1 );
603+ }
604+ free (buffer );
605+
606+ return url ;
619607#else
620608#error Dont know how to compute users home directories on this platform
621609#endif
0 commit comments