static char * getlogin_basic(int *status) { static char logname[MAXLOGNAME]; if (_logname_valid == 0) { #ifdef __NETBSD_SYSCALLS if (__getlogin(logname, sizeof(logname) - 1) < 0) { #else if (_getlogin(logname, sizeof(logname)) < 0) { #endif *status = errno; return (NULL); } _logname_valid = 1; } *status = 0; return (*logname ? logname : NULL); } char * getlogin(void) { char *result; int status; THREAD_LOCK(); result = getlogin_basic(&status); THREAD_UNLOCK(); return (result); }
int main() { char *login; if ((login = _getlogin()) == NULL) pexit("_getlogin"); printf("%s\n", login); exit(EXIT_SUCCESS); }
char * getlogin() { static char logname[MAXLOGNAME + 1]; if (__logname_valid == 0) { if (_getlogin(logname, sizeof(logname) - 1) < 0) return ((char *)NULL); __logname_valid = 1; } return (*logname ? logname : (char *)NULL); }
char * getlogin() { char *lgn; if ((lgn = (char *)_getlogin()) == NULL) { struct passwd *pwd; if ((pwd = (struct passwd *)_getpwuid(_getuid())) != NULL) return (pwd->pw_name); } return (lgn); }
static char * getlogin_basic(int *status) { static char logname[MAXLOGNAME]; if (_logname_valid == 0) { if (_getlogin(logname, sizeof(logname)) < 0) { *status = errno; return (NULL); } _logname_valid = 1; } *status = 0; return (*logname ? logname : NULL); }
int getlogin_r(char *name, size_t namelen) { int logname_size; _THREAD_PRIVATE_MUTEX_LOCK(logname); if (!logname_valid) { if (_getlogin(logname, sizeof(logname) - 1) < 0) { _THREAD_PRIVATE_MUTEX_UNLOCK(logname); return errno; } logname_valid = 1; logname[MAXLOGNAME] = '\0'; /* paranoia */ } logname_size = strlen(logname) + 1; if (namelen < logname_size) { _THREAD_PRIVATE_MUTEX_UNLOCK(logname); return ERANGE; } memcpy(name, logname, logname_size); _THREAD_PRIVATE_MUTEX_UNLOCK(logname); return 0; }