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); }
char * getlogin(void) { char *result; int status; THREAD_LOCK(); result = getlogin_basic(&status); THREAD_UNLOCK(); return (result); }
int getlogin_r(char *logname, int namelen) { char *result; int len; int status; THREAD_LOCK(); result = getlogin_basic(&status); if (status == 0) { if ((len = strlen(result) + 1) > namelen) status = ERANGE; else strncpy(logname, result, len); } THREAD_UNLOCK(); return (status); }
int getlogin_r(char *logname, int namelen) { char *result; int len; int status; if (namelen < 1) return (ERANGE); logname[0] = '\0'; THREAD_LOCK(); result = getlogin_basic(&status); if (status == 0 && result != NULL) { len = strlen(result) + 1; if (len > namelen) status = ERANGE; else strncpy(logname, result, len); } THREAD_UNLOCK(); return (status); }