int getlogin_r (char *name, size_t name_len) { size_t len; if (__getlogin_cache == NULL) { if (INLINE_SYSCALL (getlogin, 2, __getlogin_cache_room, MAXLOGNAME) < 0) return -1; /* The system call should return a NULL terminated name. */ if (__memchr (__getlogin_cache_room, '\0', MAXLOGNAME) == NULL) abort (); __getlogin_cache = __getlogin_cache_room; } len = strlen (__getlogin_cache); if (__builtin_expect (len < name_len, 1)) { memcpy (name, __getlogin_cache, len + 1); return 0; } else { __set_errno (ERANGE); return -1; } }
void *memchr(const void * ptr, int val, size_t len) { const unsigned char * m = ptr; void * result = NULL; if(ptr == NULL || (signed)len < 1) { errno = EFAULT; } else { result = __memchr(m,(unsigned char)(val & 255),len); } return(result); }