Skip to content

Commit 5873127

Browse files
authored
Merge pull request #1431 from pvieito/master
2 parents b211099 + f62eced commit 5873127

File tree

5 files changed

+39
-2
lines changed

5 files changed

+39
-2
lines changed

CoreFoundation/Base.subproj/CFPlatform.c

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,8 +284,29 @@ CF_EXPORT CFStringRef CFCopyUserName(void) {
284284
#else
285285
#error Dont know how to compute user name on this platform
286286
#endif
287-
if (!result)
287+
if (!result) {
288288
result = (CFStringRef)CFRetain(CFSTR(""));
289+
}
290+
291+
return result;
292+
}
293+
294+
CF_EXPORT CFStringRef CFCopyFullUserName(void) {
295+
CFStringRef result = NULL;
296+
#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_EMBEDDED || DEPLOYMENT_TARGET_EMBEDDED_MINI || DEPLOYMENT_TARGET_LINUX || DEPLOYMENT_TARGET_FREEBSD
297+
uid_t euid;
298+
__CFGetUGIDs(&euid, NULL);
299+
struct passwd *upwd = getpwuid(euid ? euid : getuid());
300+
if (upwd && upwd->pw_gecos) {
301+
result = CFStringCreateWithCString(kCFAllocatorSystemDefault, upwd->pw_gecos, kCFPlatformInterfaceStringEncoding);
302+
}
303+
#else
304+
#error Don't know how to compute full user name on this platform
305+
#endif
306+
if (!result) {
307+
result = (CFStringRef)CFRetain(CFSTR(""));
308+
}
309+
289310
return result;
290311
}
291312

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: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,11 @@ public func NSUserName() -> String {
588588
return userName._swiftObject
589589
}
590590

591+
public func NSFullUserName() -> String {
592+
let userName = CFCopyFullUserName().takeRetainedValue()
593+
return userName._swiftObject
594+
}
595+
591596
internal func _NSCreateTemporaryFile(_ filePath: String) throws -> (Int32, String) {
592597
let template = "." + filePath + ".tmp.XXXXXX"
593598
let maxLength = Int(PATH_MAX) + 1

Foundation/ProcessInfo.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,4 +140,12 @@ open class ProcessInfo: NSObject {
140140
open var systemUptime: TimeInterval {
141141
return CFGetSystemUptime()
142142
}
143+
144+
open var userName: String {
145+
return NSUserName()
146+
}
147+
148+
open var fullUserName: String {
149+
return NSFullUserName()
150+
}
143151
}

0 commit comments

Comments
 (0)