@@ -582,40 +582,28 @@ CF_EXPORT CFURLRef CFCopyHomeDirectoryURLForUser(CFStringRef uName) {
582
582
return CFCopyHomeDirectoryURL ();
583
583
}
584
584
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 ;
619
607
#else
620
608
#error Dont know how to compute users home directories on this platform
621
609
#endif
0 commit comments