Skip to content

Commit 35b3f36

Browse files
committed
Added implementation of NSFullUserName and CFCopyFullUserName
CFCopyFullUserName implemented for POSIX OS. TODO: Add Windows implementation.
1 parent 5f9f21d commit 35b3f36

File tree

4 files changed

+24
-2
lines changed

4 files changed

+24
-2
lines changed

CoreFoundation/Base.subproj/CFPlatform.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,24 @@ CF_EXPORT CFStringRef CFCopyUserName(void) {
289289
return result;
290290
}
291291

292+
CF_EXPORT CFStringRef CFCopyFullUserName(void) {
293+
CFStringRef result = NULL;
294+
#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED || DEPLOYMENT_TARGET_EMBEDDED_MINI || DEPLOYMENT_TARGET_LINUX || DEPLOYMENT_TARGET_FREEBSD
295+
uid_t euid;
296+
__CFGetUGIDs(&euid, NULL);
297+
struct passwd *upwd = getpwuid(euid ? euid : getuid());
298+
if (upwd && upwd->pw_gecos) {
299+
result = CFStringCreateWithCString(kCFAllocatorSystemDefault, upwd->pw_gecos, kCFPlatformInterfaceStringEncoding);
300+
}
301+
#else
302+
#error Don't know how to compute full user name on this platform
303+
#endif
304+
if (!result)
305+
result = (CFStringRef)CFRetain(CFSTR(""));
306+
307+
return result;
308+
}
309+
292310
CFURLRef CFCopyHomeDirectoryURL(void) {
293311
#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED || DEPLOYMENT_TARGET_EMBEDDED_MINI || DEPLOYMENT_TARGET_LINUX || DEPLOYMENT_TARGET_FREEBSD
294312
return _CFCopyHomeDirURLForUser(NULL, true);

CoreFoundation/Base.subproj/CFPriv.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,9 @@ CFStringRef CFGetUserName(void);
159159
CF_EXPORT
160160
CFStringRef CFCopyUserName(void);
161161

162+
CF_EXPORT
163+
CFStringRef CFCopyFullUserName(void);
164+
162165
CF_EXPORT
163166
CFURLRef CFCopyHomeDirectoryURLForUser(CFStringRef uName); /* Pass NULL for the current user's home directory */
164167

Foundation/FileManager.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -746,7 +746,7 @@ extension FileManager {
746746

747747
extension FileManager {
748748
open var homeDirectoryForCurrentUser: URL {
749-
return homeDirectory(forUser: CFCopyUserName().takeRetainedValue()._swiftObject)!
749+
return homeDirectory(forUser: NSUserName())!
750750
}
751751

752752
open var temporaryDirectory: URL {

Foundation/NSPathUtilities.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,8 @@ public func NSUserName() -> String {
589589
}
590590

591591
public func NSFullUserName() -> String {
592-
NSUnimplemented()
592+
let userName = CFCopyFullUserName().takeRetainedValue()
593+
return userName._swiftObject
593594
}
594595

595596
internal func _NSCreateTemporaryFile(_ filePath: String) throws -> (Int32, String) {

0 commit comments

Comments
 (0)