38 if( (un = getenv(
"LOGNAME")) ){
44 long blen = sysconf(_SC_GETPW_R_SIZE_MAX);
46 logwarn(
"couldn't get getpwuid sysconf");
49 char* buf = malloc(blen);
53 if(getpwuid_r(uid, &p, buf, blen, &pret) || !pret){
57 char* ret = strdup(p.pw_name);
61 DWORD unlen = UNLEN + 1;
62 char* un = malloc(unlen);
66 if(!GetUserNameExA(NameSamCompatible, un, &unlen)){
98 return strdup(
"Microsoft Windows");
101#define PREFIX "macOS "
102 char osver[30] = PREFIX;
103 size_t oldlenp =
sizeof(osver) - strlen(PREFIX);
104 if(sysctlbyname(
"kern.osproductversion", osver + strlen(PREFIX),
105 &oldlenp,
NULL, 0) == 0){
106 return strdup(osver);
108 return strdup(
"macOS");
112 logerror(
"failure invoking uname (%s)", strerror(errno));
115 const size_t nlen = strlen(uts.sysname);
116 const size_t rlen = strlen(uts.release);
117 size_t tlen = nlen + rlen + 2;
118 char* ret = malloc(tlen);
119 memcpy(ret, uts.sysname, nlen);
121 strcpy(ret + nlen + 1, uts.release);