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 getlogin_r(char *name, size_t namelen) { size_t len; int rv; mutex_lock(&logname_mutex); if (__logname_valid == 0) { if (__getlogin(logname, sizeof(logname) - 1) < 0) { rv = errno; mutex_unlock(&logname_mutex); return (rv); } __logname_valid = 1; } len = strlen(logname) + 1; if (len > namelen) { rv = ERANGE; } else { strncpy(name, logname, len); rv = 0; } mutex_unlock(&logname_mutex); return (rv); }
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(void) { char *rv; mutex_lock(&logname_mutex); if (__logname_valid == 0) { if (__getlogin(logname, sizeof(logname) - 1) < 0) { mutex_unlock(&logname_mutex); return ((char *)NULL); } __logname_valid = 1; } rv = (*logname ? logname : (char *)NULL); mutex_unlock(&logname_mutex); return rv; }